首先从网站上爬去该视频网站 2019.08-2020.07 一年内会员充值订单。以下是表格内容和字段名解释:
第一步:格式转换
1.1 转换货币格式,从(分)转换成(元)
1.2 将create_time这列和pay_time这列转换成时间格式
第二步:查找和处理缺失值
2.1 快速浏览数据集,判断哪一列有缺失值
输出结果查看
可以看到:除了platform和payment_provider这两列分别是77645行和78029行外,其余几列均为78049行,表明platform和payment_provider两列有缺失值。
2.2 对platform和payment_provider这两列的缺失行做删除处理
考虑到platform这列缺失400行左右,payment_provider缺失20行,数据量不是很多,因此,我们对这两列的缺失行做删除处理。
2.3 再次快速浏览数据集
可以看到:每一列都减少到77645行,并且每一列都是非空值,至此,完成缺失值的清洗
第三步:查找和处理异常值
3.1 判断异常值标准
3.1.1 order_id,是从1开始产生,不可能出现0及负数。因此<=0的数据属于异常值。
由于order_id<=0的输出结果是一个空的DataFrame,说明在order _id这一列,不存在异常值。
3.1.2 user_id,是从1开始产生,不可能出现0及负数。因此<=0
的数据属于异常值。
由于user_id<=0的输出结果是一个空的DataFrame,说明在user_id这一列,不存在异常值。
3.1.3 price价格,因为这个视频平台,会员只有月度¥25,季度¥68,年度¥248三种,一个订单只能购买一次,因此只可能是这三种数值,出现其他数值都是异常值。
通过输出结果可以看到,price这列有三行有关价格的异常值
3.1.4 platform,只有ios,android两种,其他的都是异常值。
通过输出结果可以看到,platform这一列没有异常值
3.1.5 payment_provider,只有wxpay,alipay,applepay三种,其他的都是异常值。
通过输出结果可以看到,payment_provider这一列没有异常值
3.1.6.create_time和pay_time,需要注意的是:pay_time必须大于create_time,因为支付时间,不可能比订单生成时间要小。pay_time < create_time就属于异常值。
通过输出结果可以看到,create_time和pay_time这两列有5行异常值,均为 create_time > pay_time
3.2 处理异常值
通过查找异常值,可以看到:price以及两列时间create_time,pay_time均有异常值,对异常值做删除处理并快速浏览
通过输出结果可以看到,所有行数保持一致,至此,完成对异常值的清洗
第四步:查找和处理重复值
4.1 判断重复值标准
重复值,指的是异常的重复情况。比如,order_id这一列,一个订单是一个唯一的订单号,因此不应该出现重复值。而user_id这一列,由于一个用户有可能会多次购买会员,因此出现重复是合理的情况。而其余几列出现重复情况均属于正常现象。
4.2 处理重复值
通过输出结果可以看到:order_id这一列有5行重复值,对重复值做删除处理并快速浏览
通过输出结果可以看到,所有行数保持一致,至此,完成对重复值的清洗
第五步:可视化
5.1 绘制图1
5.1.1 导入模块并设置字体
5.1.2 设置create_time这列为索引
5.1.3 将data按照不同会员类型进行分组(也就是price这列),并统计出每月有多少订单
5.1.4 将price这列转置,便于后期计算
5.1.5 转换index的时间格式为年-月
5.1.6 绘制簇状柱形图并显示
5.1.7 分析效果
通过图表可以看到:2019年8月-2020年7月,购买月度会员(25元)和年度会员(248)的用户较多,购买季度会员(68元)的用户较少。
5.2 绘制图2
5.2.1 计算每个月份各类会员的和
5.2.2 计算每个月份各类会员在所有会员类型中所占百分比
5.2.3 绘制堆积柱状图
5.2.4 分析效果
通过图表可以看到:2019年8月-2020年7月,购买年度会员的用户最多,占50%左右;其次是月度会员,占30%~40%;最少的是季度会员,仅占15%左右。说明:新用户倾向购买月度会员,主要目的是尝试为主;资深用户倾向购买年度会员,主要目的是想长期观看视频。那么,如何把这部分月度会员和季度会员培养成年度会员将是下一步的工作重点。