电商平台零售数据分析
前面的博客中已经有使用在线零售业务数据进行数据分析,但是在这一篇,我们以不同的角度重新对这些数据进行分析。
数据来源及数据结构
国外的在线零售业务的交易数据,数据下载地址
现在以表格的形式解释一下里面的字段:
字段 | 说明 |
---|---|
InvoiceNo | 订单编号,含有6个整数,退货订单编号开头有字母C |
StockCode | 产品编号,由5个整数构成 |
Description | 产品描述 |
Quantity | 产品数量,有负号表示退货 |
InvoiceDate | 订单日期和时间 |
UnitPrice | 单位 英镑 单位产品的价格 |
CustomerID | 客户编号,由5位数字组成 |
Country | 国家的名称 每个客户所在的国家/地区的名称 |
分析目的
- 用户分类(RFM模型),对比分析不同用户群体在时间、地区等维度下交易量,交易金额指标,并根据分析结果提出优化建议
- R:最近一次消费时间(最近一次消费到参考时间的长度)
- F:消费的频次(单位时间内消费多少次)
- M:消费的金额(单位时间内总消费金额)
首先说一下思路:
1、清洗数据,去除掉退单的数据和异常值
2、按照RFM模型公式,计算各个模块的数值
3、 通过数据的划分,将模型的三个模块按照重要性进行划分。
4、 通过自定义函数,将模型进行整理
5、 通过柱状图和饼状图对模型所划分的区域进行展示。
下面来看代码,里面有详细代码注释:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly as py
import plotly.graph_objects as go
import seaborn as sns
sns.set_style('darkgrid')
data = pd.read_csv('data/data.csv')
# print(data.head(10))
#进行数据清洗
# print(data.info())
#从输出信息上来看,CustomerID 发现大量缺失,Description发现少量缺失
#去除掉重复值的值
data = data.drop_duplicates()
#通过描述信息查看是否出现异常值
print(data.describe())
#通过结果发现,UnitPrice出现负值,我们只需要正值 并且 退货数据必须剔除掉
data=data[(data['UnitPrice']>0)&(data['Quantity']>0)]
#接下来将缺失的CustomerID归为一类 代号U
data['CustomerID'].fillna('U',inplace=True)
#统计最近一次消费时间【-----
#时间格式转化成datatime 这里我们暂时不需要具体的时间,所以只留下年月日
data['Data'] = [i[0] for i in data['InvoiceDate'].str.split(' ')]
data['InvoiceDate'] = pd.to_datetime(data['Data'],errors='coerce')
#增加三列 分别记录年、月、日
data[<