上篇文章我们初步认识了numpy包和pandas包的基本用法,这篇文章就来讲一下如何利用Python做数据分析。
一、数据分析的基本步骤
1. 明确问题,理解数据
(1)先把问题了解清楚,明确分析背景及目的
(2)了解数据集的整体情况
(3)明确分析思路
2. 数据清洗
(1)确定数据集
(2)处理重复值和缺失值
(3)处理数据类型/格式
(4)处理异常值
3. 构建模型,可视化分析
构建分析模型,利用可视化图表进行分析
4. 结论及建议
根据分析得出结论,并给出相应的建议
二、如何理解数据
当我们得到数据集时,可以通过提取数据集的描述统计信息,初步了解数据集的整体情况第一步,导入文件
2. 第二步,检查数据导入是否完整
用shape属性查看行列数
3. 第三步,预览表格整体情况
用head()方法打印前5行
4. 第四步,检查各字段的数据类型是否正确
用dtypes属性
三、如何进行数据清洗确定数据集
(1)选择子集
当我们不需要那么多数据时,可以通过筛选来选出需要的数据集,比如现在我只需要前5行前3列数据
(2)列名重命名
PS:inplace=False,表示原数据框不会变,而是会创建一个新的数据框进行改变,缺省时默认False
inplace=True,表示原数据框会变化,因为我们后续分析要用到改变后的数据框,所以指定True
2. 处理重复值和缺失值
由于“销售时间”和“社保卡号”任意一个都不能为空,所以要删除这两列中为空的行
3. 处理数据类型/格式
(1)数字类型转换
用astype函数把字符串数字转换为数字型数字
(2)日期类型转换
把字符串日期中的“星期”去掉,保留“日期”,举例:
① 第一步,定义日期分隔函数
因为输入的timeColSer是Series类型,所以返回要要转换成Series类型,才能不改变转换前后的数据结构
②第二步,获取“销售时间”列,把这列作为参数传入分隔函数,并对打印结果进行检验
③ 第三步,把处理后的日期替换到原来的“销售时间”列
④ 把字符串日期转换为日期型日期
4. 处理异常值
① 查看数据集的描述统计信息
用describe函数计算描述统计信息,describe只对数字类型的列进行计算
从上图中可以看出三项数据的最小值都是负数,明显是不符合常理,由此可以判断肯定存在异常值
② 排序
为了进一步确认确认销售数量、应收金额、实收金额出现负数的情况,把销售数量列进行升序排序以便观察
用sort_values方法进行排序
结果发现这3列的确是存在很多负数行,需要把这些行删除掉
PS:ascending=True 表示升序,ascending=False表示降序
na_position=True表示排序的时候,把空值放到前列,这样可以比较清晰的看到哪些地方有空值,缺省时默认是False,即空值放到最后
ignore_index=True表示重新排序后行号也重新按0~n重命名,缺省时默认是False,即按照原行号打印
③ 删除异常值
通过构建查询条件来删除异常值
最后检查是否删除成功
四、如何构建模型
案例:分析某电商产品的月均消费次数、月均消费金额、客单价
1. 业务指标1,月均消费次数
案例中业务部门定义:月均消费次数 = 总消费次数 / 月数
(1)先计算总消费次数
总消费次数中,统计口径为:同一天内,同一个人发生的所有消费算作一次消费
也就是说,要对同一天内同一个人的多次消费进行排重,计算排重后的行数就是总消费次数
(2)再计算月份数
只需要找到开始时间和结束时间,两个时间的时间差除以30即可得出月份数
① Step1,按销售时间排序
排序后发现销售时间列存在时间类型的空值NaT(Not Available Time),需要把这些行删除掉
② Step2,获取时间范围
由于删除了记录,需要重新计算行数
获取时间范围
3)Step3,计算月数
先计算出相隔天数
再把天数转换成月数
③ 最后计算月均消费次数
2. 业务指标2,月均消费金额
月均消费金额 = 总消费金额 / 月数
(1)先计算总消费金额
(2)再计算月均消费金额
3. 业务指标3,客单价
客单价(per customer transaction) = 总消费金额 / 消费人数
消费人数有两种统计口径,一种是“同一个人不同时间(天)消费算不同人”,另一种是“同一个人不同时间(天)消费算同一个人”,这里取第一种统计口径
在业务指标2中计算出了总消费金额,业务指标1中计算出了消费人数,那么客单价即: