数据分析的基本过程分为五个部分:提出问题、理解数据、数据清洗、构建模型、数据可视化。下面我以前四部分为基础,对一个销售数据进行分析。
1 提出问题
分析目标:根据以下三个业务指标分析医院的销售情况:月均消费次数、月均消费金额、客单价。
首先导入数据分析包和数据文件
**import**`` pandas ``**as**`` pd fileNameStr``**=**``'./朝阳医院2018年销售数据.xlsx' xls``**=**``pd``**.**``ExcelFile(fileNameStr,dtype``**=**``'object') salesDf``**=**``xls``**.**``parse('Sheet1',dtype``**=**``'object')
2 理解数据
描述数据,基本了解数据情况。


在这里,我们要了解,需要哪些指标和如何达成分析的目标。
1.月均消费次数=一年的消费次数/月份
一年的消费次数=有消费记录数据的总和(同一个人在一天内只计一次消费)
2.月均消费金额=总实收金额/月份
3.客单价=总消费金额/总消费次数
3 数据清洗
1 列表重命名
colNameDict``**=**``{'购药时间':'销售时间'} salesDf``**.**``rename(columns``**=**``colNameDict,inplace``**=**``True) salesDf``**.**``head()

2 缺失数据处理

3 数据类型转换
3.1 字符串转换为数值
salesDf['销售数量']``**=**``salesDf['销售数量']``**.**``astype('float') salesDf['应收金额']``**=**``salesDf['应收金额']``**.**``astype('float') salesDf['实收金额']``**=**``salesDf['实收金额']``**.**``astype('float') salesDf``**.**``dtypes

3.2 字符串转换为日期类型
定义函数
**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``**.**``loc[:,'销售时间']``**=**``pd``**.**``to_datetime(salesDf``**.**``loc[:,'销售时间'], format``**=**``'%Y-%m-%d', errors``**=**``'coerce')

删除转换日期格式中的空值
salesDf``**=**``salesDf``**.**``dropna(subset``**=**``['销售时间','社保卡号'],how``**=**``'any')
4 数据排序
把数据按销售时间进行升序排列
salesDf``**=**``salesDf``**.**``sort_values(by``**=**``'销售时间',ascending``**=**``True) salesDf``**.**``head(3)

更新排序后的行号
salesDf``**=**``salesDf``**.**``reset_index(drop``**=**``True) salesDf``**.**``head()

5 异常值处理
salesDf``**.**``describe()

我们发现销售数量和实收金额为负数,这在现实中是不合理的,所以我们需要筛选出正数来分析。
querySer``**=**``salesDf``**.**``loc[:,'销售数量']``**>**``0 ``*#应用查询条件*``**print**``('before',salesDf``**.**``shape) salesDf``**=**``salesDf``**.**``loc[querySer,:] ``**print**``('after',salesDf``**.**``shape)

4 构建模型
在第二步理解数据中,我们了解到同一天中,只计算一次消费次数,这里要对消费次数进行去重。
*#同一天去重*``kpi1_Df``**=**``salesDf``**.**``drop_duplicates(subset``**=**``['销售时间','社保卡号']) totalI``**=**``kpi1_Df``**.**``shape[0] ``**print**``('总销售次数',totalI)
获得总消费次数是5342次。接着,来计算月份数。先按销售时间做升序,并对行号重命名。
kpi1_Df``**=**``kpi1_Df``**.**``sort_values(by``**=**``'销售时间',ascending``**=**``True) kpi1_Df``**=**``kpi1_Df``**.**``reset_index(drop``**=**``True) kpi1_Df``**.**``head()

下面,获取最大和最小的时间值范围,计算出月份数为6.
startTime``**=**``kpi1_Df``**.**``loc[0,'销售时间'] endTime``**=**``kpi1_Df``**.**``loc[totalI``**-**``1,'销售时间'] daysI``**=**``(endTime``**-**``startTime)``**.**``days monthsI``**=**``daysI``**//**``30 ``**print**``('月份数',monthsI)
接着,计算出第一个业务指标月均消费次数为890.
kpi1_I``**=**``totalI``**//**``monthsI ``**print**``('业务指标1:月均消费次数',kpi1_I)
第二个业务指标月均消费金额如下。

第三个业务指标客单价。

到这里,我们通过python一步步的获取到了我们想要的业务指标。根据三个数据,我们来做进一步的思考。这家医院如何才能提高销售额呢?可以从三方面执行:
- 提高每月消费次数:可以设置一些促销活动优化购物体验,从而提升顾客再次购买的欲望。
- 提高每月消费金额:可以根据病人的经济情况,设定不同的药品。如条件好的,就推荐用一些效果很好的药品。如条件一般,在不降低疗效的情况下,选用一些性价比更高的药品。
- 提高客单价:丰富药品的品种,给客户更多的选择。 销售数据的业务指标有相似之处,我们也可以举一反三,拓展到其他销售数据,比如从复购率和单价开始。有了数据分析的指标,还需要通过可视化展示出来。下一讲,我们讨论数据可视化。