1.背景介绍
本项目是对网上零售数据进行分析,对总体运营指标、消费趋势、客户价值和退款情况进行分析,细化指标体系,为零售业务的战略性业务决策提供给数据支持。
分析目的
- 了解整体运营情况,查看销售数据随时间变化趋势,判断业务发展健康状况并给出原因和建议;
- 分析客户价值,提升客户维护精度,进而提升用户黏性和满意度,最终增加公司销售和利润。
2.数据集介绍
数据中一共有8个字段,各字段含义如下:
-
InvoiceNo:发票号,每个订单一个发票号;
-
StockCode:库存编码,也就是sku;
-
Description:描述,对StockCode代表的商品的文字描述;
-
Quantity:数量,这个订单中购买的此* StockCode数量,负值为退货;
-
InvoiceDate:发票日期,可理解为订单付款的日期和时间,精确到分钟;
-
UnitPrice:单价,1个本商品的价格,负值为订单损失;
-
CustomerID:客户编号,1个客户1个号;
-
Country:收货地址所在的国家。
数据展示
3.分析思路
4.分析内容
4.1 数据清洗
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#设置图画正常显示中文、负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入数据
data = pd.read_csv('OnlineRetail.csv',encoding='unicode_escape')
#查看数据字段格式及数据完整度
data.info()
经观察发现:
- Description和CustomerID字段有缺失值,CustomerID字段应尽量避免确实;
- InvoiceDate字段为object格式,需要转化为日期格式便于后续分析。
data['InvoiceDate']=pd.to_datetime(data['InvoiceDate'],format='%d-%m-%Y %H:%M')
#对数值型数据观察其大致分布
data.describe()
- 能观察到Quantity和UnitPrice的均值都高于中位数,UnitPrice甚至高于上四分位数,这说明有些订单数量和价格都大幅度高于中位数,从而拉高了均值。这种情况在电商、金融领域很常见。
为了方便分析,一下对数据进行清洗,之后根据分析的需要在对应处理。
#增加退款列,如果销售数量为负数置为0,便于后续区分退款数据
data['Return'] = data['Quantity'].apply(lambda x:x if x<0 else 0)
#将数量列的负值用绝对值函数变为正值,便于统计订单数量
data['Quantity'] = data['Quantity'].apply(lambda x:abs(x))
#添加总消费金额列
data['TotalPrice'] = data['Quantity']*data['UnitPrice']
4.2 总体运营分析
- 总订单数
#总订单数
print(len(data.groupby('InvoiceNo')))
- 总客户数
#总客户数
print(len(data.groupby('CustomerID')))
# print(len(data['CustomerID'].unique())-1)
- 总成交额GMV
# 成交额
sum_price = data['TotalPrice'].sum()
print(sum_price)
4.3 消费趋势分析
月/周/日订单量和销售额分析
# 筛选出交易成功的订单,生成透视表计算需要的字段
data_grouped = data[data['Return']==0].groupby('InvoiceNo').agg({'InvoiceDate':'