qianlanseleiguang

数据分析(python)

转。https://zhuanlan.zhihu.com/p/35976466

1,分析背景

   数据是药店2018年1月至2018年7月19日的药品销售数据,由购药时间,社保卡号,商品编码 ,商品名称,销售数量,应收金额,实收金额七个字段组成,共6578条数据。

2,分析框架

  分析目的,通过对历史数据进行描述性统计分析,了解每月药品销售情况。更深入了解,用户更青睐于哪些药品,随着月份的变化,药品销量的变化,为药店进药提供支持。

  分析思路,统计每月药品销售总额,每月药品销售数量,客单价,每月药品销售量和金额前十

3,数据清洗

  缺失值

  重复值

  异常值

4,分析过程

5,总结

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

file_path=\'./朝阳医院2018年销售数据.xlsx\'
#pd.read_excel(file_path,converters={\'社保卡号\':str,\'商品编码\':str})

xls
= pd.ExcelFile(file_path) salesDf = xls.parse(\'Sheet1\',dtype=\'object\') salesDf.head() #查看数据,默认显示前5行 salesDf.info() #查看数据结构,包括字段,数据类型 salesDf.shape #查看数据形状,数据数目和列数 #列重命名 colNameDict={\'购药时间\':\'销售时间\'} salesDf.rename(columns = colNameDict, inplace=True) salesDf.head() #处理缺失值 salesDf.shape salesDf=salesDf.dropna(subset=[\'销售时间\',\'社保卡号\'],how=\'any\') #数据类型转换 salesDf[\'销售数量\'] = salesDf[\'销售数量\'].astype(\'float\') salesDf[\'应收金额\'] = salesDf[\'应收金额\'].astype(\'float\') salesDf[\'实收金额\'] = salesDf[\'实收金额\'].astype(\'float\') #时间转换 salesDf.head() def splitSaletime(timeColSer): timelist=[] for value in timeColSer: dateStr=value.split(\' \')[0] timelist.append(dateStr) timeSer = pd.Series(timelist) return timeSer timeSer = salesDf.loc[:,\'销售时间\'] dateSer = splitSaletime(timeSer) salesDf.loc[:,\'销售时间\']= dateSer salesDf.head() salesDf.info()
#errors
=\'coerce\': 如果原始数据不符合日期的格式,转换后的值为空值NaT
#salesDf.loc[:,\'购药时间1\'] = salesDf[\'购药时间\'].str.split(\' \').str[0] #拆分时间字段 salesDf.loc[:,
\'销售时间\'] = pd.to_datetime(salesDf.loc[:,\'销售时间\'],format=\'%Y-%m-%d\',errors=\'coerce\')

salesDf=salesDf.dropna(subset=[\'销售时间\',\'社保卡号\'],how=\'any\')

数据排序 使用pd.sort_values方法对数据进行排序,by表示按那几列进行排序,ascending
=True 表示升序排列,ascending=False表示降序排列 salesDf=salesDf.sort_values(by=\'销售时间\',ascending=True) 重命名行号:reset_index方法生成从0到N按顺序的索引值 salesDf = salesDf.reset_index(drop=True) 异常值处理 1 查看数据框中所有数据每列的描述性统计信息 describe() salesDf.describe() #设置查询条件 querySer = salesDf.loc[:,\'销售数量\']>0 salesDf.shape salesDf = salesDf.loc[querySer,:] salesDf.head() salesDf=salesDf.dropna(subset=[\'销售时间\',\'社保卡号\'],how=\'any\') salesDf[\'销售时间\'].min() #Timestamp(\'2018-01-01 00:00:00\') salesDf[\'销售时间\'].max() #Timestamp(\'2018-07-19 00:00:00\') -------------------------------------------------------------- 总销售额 salesDf[[\'销售数量\',\'应收金额\',\'实收金额\']].sum() \'\'\' 第一个指标:月均消费次数=总消费次数/月数 第二个指标:月均消费金额=总消费金额/月份数 第三个指标:客单价=平均交易金额=总消费金额/总消费次数 第四个指标:消费趋势 注意:同一天内,同一个人发生的所有消费算作一次消费,根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,使用drop_duplicates将重复的数据删除 \'\'\' salesDf.head() #消费次数 kpil_df = salesDf.drop_duplicates(subset=[\'销售时间\',\'社保卡号\']) totalI = kpil_df.shape[0] #总消费次数 5342 min_d=salesDf[\'销售时间\'].min() #Timestamp(\'2018-01-01 00:00:00\') max_d=salesDf[\'销售时间\'].max() #Timestamp(\'2018-07-19 00:00:00\') days1=(max_d - min_d).days months1 = days1//30 #月份数 6 kpi1 = totalI//months1 print(\'月均消费次数:\',kpi1) kpi2 = round(salesDf[\'实收金额\'].sum()/months1,4) print(\'月均消费金额:\',kpi2) kpi3 = round(kpi2/kpi1,4) print(\'客单价:\',kpi3) groupdf = salesDf groupdf.head() groupdf.index = groupdf[\'销售时间\'] gb = groupdf.groupby(groupdf.index.month) monthdf = gb.sum()

 

posted on 2020-11-10 12:05  浅蓝色星光  阅读(83)  评论(0编辑  收藏  举报

分类:

技术点:

相关文章:

  • 2021-11-13
  • 2021-11-09
  • 2021-04-24
  • 2021-11-02
  • 2021-11-03
  • 2021-10-28
  • 2021-10-14
猜你喜欢
  • 2021-11-02
  • 2021-10-06
  • 2021-08-13
  • 2021-07-12
  • 2021-08-22
  • 2022-12-23
  • 2021-10-16
相关资源
相似解决方案