1. 背景
2010到2011年的英国零售商的交易记录
2. 数据集描述
InvoiceNo:发票编号
StockCode:库存编号
Description:描述
Quantity:数量
InvoiceDate:(发票日期)交易时间
UnitPrice:单价
CustomerID:客户编号
Country:国家
3. 提出问题
a.了解现在英国零售商的现状
b.销售主要受到什么因素的影响
4. 分析思路
a.清洗数据(异常值、重复值、缺失值、数据类型转换、整合数据)
b.客户价值分析 (购买金额、购买频次、平均金额、购买内容、复购频次/间隔/内容),用户消费行为分析、RFM模型
5. 分析结论级运营建议
1)公司目前经营接近“二八定律”(约仅有20%的变因操纵着80%的局面)
2)数据显示,大客户类别里依旧存在75%的用户低于平均值,即低于7660英镑,由此可见存在优质客户拉高了整体水平
3)从时间维度看,重要价值和重要深耕客户在近三个月(即数据集中)并未产生消费行为,相反重要唤回和挽留客户比重在增加。这需要跟业务沟通原因,是销售政策倾斜导致目前现状,还是竞争对手吸引导致重要客户流失。如果皆不是需要重新修正RFM模型。
6. 数据清洗
6.1导入模块
6.11 数据处理
import numpy as np
import pandas as pd
6.12可视化
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set(style='darkgrid')
plt.rcParams['font.family']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.size']=15
6.13忽略警告
import warnings
warnings.filterwarnings('ignore')
6.14防止中文输出乱码
#!/usr/bin/env python
#coding:utf - 8
6.15聚类算法
from sklearn.cluster import KMeans
6.2读取数据
dt=pd.read_csv('E:/大数据/数据源/data/data.csv')
#预览数据
dt.head()
#查看数据大小
dt.shape
#给列名重命名
dt=dt.rename(columns={
'InvoiceNo':'发票号','StockCode':'代码','Description':'产品名','Quantity':'数量',
'InvoiceDate':'发票日期','UnitPrice':'单价','CustomerID':'用户名','Country':'国家'})
#查看数据分布
dt.describe()
最小值这里数量和单价为负数,是异常值,要搞清楚
数量<=0,是退货数据,发票号开头是“C“的数据
dq=dt.loc[dt['发票号'].str[0]=='C']
dq.describe()
单价<=0
dt.loc[dt['单价']<=0,'单价'].groupby(dt['单价']).count()
可能为促销品,负数项太大可能是系统疏漏,删除处理
6.3数据清洗
6.31异常值处理
dt=dt[dt['数量']>0]
dt=dt[dt['单价']>0]
dt.shape
6.32缺失值处理