python作为数据分析的后起之秀,已经越来越受欢迎。曾经的我也以为excel是真爱,直到用上了python。今天就用一个简单的入门级案例,来看看python做数据分析有多香。
python本身没有多厉害,但是它有一大批各种各样的帮手,学名叫做“函数库”,由第三方开发的开源函数库,能实现各种各样的功能。数据分析最常用的帮手就是numpy库和pandas库。
关于numpay库和pandas库本身由许多功能。但是用到的内容依然是少部分。重要部分导图如图。()
加长版导图
看起来很厉害的样子,接下就从一个真实的案例来看如何运用这些函数库。
在正式开始之前,先树立数据分析的一般步骤。
1、确定业务问题
2、获取理解数据
3、数据清洗
4、构造模型
5、可视化
一、提出业务问题
首先看下今天的案例数据:
数据是常见的销售数据类型,业务问题如下
1)月均消费次数2)月均消费金额3)客单价4)消费趋势
二、获取理解数据
这一步要做得就是导入数据到juypter notebook,并查看数据的基本属性。
此步需要用到的函数有
pd.read_excel():打开文件,特别注意导入数据时指定了数据类型为object,是防止如社保账号等文本类型的数值被当作浮点类型,产生变异。
df.dtype产看数据类型
df.shape查看行列数
可以看到原始数据由6579行,7列构成。
三、数据清洗
数据清洗是关键一步,花的时间比较长,用到的函数也比较多。首先梳理下数据基本6步骤:
1)选择子集
2)字段重命名
3)处理缺失值
4)修改数据类型
5)数据排序
6)异常值处理
1)选择子集
如果数据分析只需要用到部分行列,则可以在此选择数据的子集,以减少后期分析的数据量。
获取子集的方法是DataFrame下的loc[函数],
p=f.loc[1:100,'购药时间':'销售数量'],就可以获取从索引1到100,购药时间和销售数量之间的所有数据。
本例中不需要选择子集。
2)字段重命名
可以按照自己的习惯将列名做修改,也可以方便其他人理解。
列名重命名函数:f.rename(),使用案例如下:
可以将“购药时间”列名改为“销售时间”
3)处理缺失值
缺失的存在会造成分析的偏差,一般需要对缺失值进行填充或者删除。
根据销售时间和社保卡删除缺失值
4)数据类型转换
由于之前指定所有数据类型为object,根据业务需要,销售数量、应收金额、实收金额改为float类型,运用函数astype()
其次销售时间中包含了日期和星期,但是分析仅仅需要日期,所以需要从其中把日期提出出来。这里涉及到的函数有
1)split()函数,根据指定字符差分字符串
2)apply()函数,对序列所有数据进行函数运算,并返回序列。
3)to_datetime()函数,将时间改为标准时间数据类型,特别注意errors的赋值
最终得到的结果为
用结果替换掉原来的销售时间列,并删除日期转换过程中的空值。
5)排序
排序所用到的函数为:df.sort_values(),这里按照销售时间进行排序:
ascending参数只当升降序,na_positino指定空值位置,in_place指定是否原位修改。
6)删除异常值
首先查看数据的统计信息:
可以看到销售数量、应收金额、实收金额中存在小于0的数据,将其删除,运用loc[]函数进行筛选。
四、构造模型
构造模型的就是确定最终指标的计算式。
指标1:月均消费次数=总消费次数/总月份
总消费次数,根据销售记录多少计算,特别注意一个人一天如果有多次消费只算一次消费,所以要根据社保卡号和销售时间进行去重,然后看记录数。
根据记录数求得总消费次数:
总月份,可根据最大日期和最小日期之间的天数对应的月份来求得:
最终月均消费次数:
指标2:月均消费额=总消费额/总月份数
总消费额,直接对实收金额求和:
月均消费额度:
指标3:客单价=总消费额/总消费次数
指标4:消费趋势(按月分组统计)
分组函数:groupby()
【总结】
1、第一次做花了大概4个小时,第二次大概花了1个半小时。并且第二次做也有一些新的收获。做的次数越多,掌握得越熟练。
2、把这个案例做完不是目的,最重要的是把其中运用到函数要熟练掌握,另外还有基本的数据分析步骤和逻辑。这部分才是具有迁移性的知识。
3、函数的参数很多,最好是自己去试验一下,后面才能灵活运用。
4、对于表进行操作时,一般默认是建立临时新表,而不是修改原表,如果需要继承修改的内容,要注意设置inplace=True,或者用df=df.func()返回结果。