最近学习了python数据分析的一些基础知识,有numpy,pandas,matplotlib等,找了一个药品数据分析的小项目练一下手。
数据分析的步骤一般可以分为6个:
1,明确分析的目的
2,数据准备
3,数据清洗
4,数据分析
5,数据可视化
6,分析报告
数据分析的目的:
通过对朝阳区医院的药品销售数据的分析,了解朝阳医院的患者的月均消费次数,月均消费金额、客单价以及消费趋势、需求量前几位的药品等。
数据准备
数据是存在Excel中的,可以使用pandas的Excel文件读取函数将数据读取到内存中,这里需要注意的是文件名和Excel中的sheet页的名字。读取完数据后可以对数据进行预览和查看一些基本信息。
通过数据的基本信息可以看出来,总行数6578,但是社保卡号只有6576,其他行只有6577行,说明存在缺失值,这些将在数据清洗中进行处理。
数据清洗
数据清洗过程一般包括:选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序及异常值处理等。
(1)选择子集
在我们获取到的数据中,可能数据量非常庞大,并不是每一列都有价值都需要分析,这时候就需要从整个数据中选取合适的子集进行分析,这样就可以提高效率。但是这个案例数据列较少,可以忽略这一步。
(2)列名重命名
在数据分析过程中,有些列名和数据容易混淆或产生歧义,不利于数据分析,这时候需要把列名换成容易理解的名称,可以采用rename函数实现:
(3)缺失数据处理
通过查看基本信息可以推测“社保卡号”这列存在缺失值,如果不处理这些缺失值会干扰后面的数据分析结果。缺失数据常用的处理方式有:删除缺失值,一般用于少量缺失值,对整体数据影响不大的情况;平均值填充,对于数值型常用;算法填充等。在本次案例中缺失值商量很少,直接使用dropna函数删除缺失数据。
(4)数据类型转换
在导入数据时为了防止导入不进来,会强制所有数据都是object类型,但实际数据分析过程中“销售数量”,“应收金额”,“实收金额”,这些列需要浮点型(float)数据,“销售时间”需要改成时间格式,因此需要对数据类型进行转换,可以使用astype()函数。
(5)异常值处理
查看数据的描述统计信息:我们可以看到最小值出现了负数,原因是销售数量的值为负数,需要将销售数量小于0的数据剔除掉。
数据分析及可视化
这里涉及到的数据可视化的部分并不多所以将数据分析和可视化结合起来,数据分析之前我们应该确定分析的指标。
(1)指标1:月均消费次数 计算:月均消费次数 = 总消费次数 / 月份数
(2)指标2:月均消费金额 计算:月均消费金额 = 总消费金额 / 月份数
(3)指标3:客单价 计算:客单价 = 总消费金额 / 总消费次数
(4)指标4:消费趋势
每天的消费金额分布情况:一横轴为时间,纵轴为实收金额画散点图。
结论:从散点图可以看出,每天消费金额在500以下的占绝大多数,个别天存在消费金额很大的情况。
月消费金额变化趋势,将销售时间按月聚合分组,然后求出分组后的累计金额,画出折线图。
结论:1月,4月,5月,6月的消费金额变化不大,基本持平,2月和3月金额较低,可能是受春节假期影响,部分外来居民回家了,7月份最低是因为数据不全造成的。
药品销售情况分析,对“商品名称”和“销售数量”这两列数据进行聚合为Series形式,方便后面统计。
结论:对于销售量排在前几位的药品,医院应该时刻关注,保证药品不会短缺而影响患者。