1. 数据来源及背景
数据来源: http://archive.ics.uci.edu/ml/machine-learning-databases/00292/, 它是某批发经销商的客户数据, 其中包含440个样本以及8个特征,
下面将通过划分聚类中的k-means算法对这些客户进行细分.
2. 数据概览
1. 前2行和后2行
8个字段分别表示: 渠道, 地区, 以及每年在新鲜产品, 奶制品, 食品杂货, 冷冻产品, 洗涤剂和纸制品, 熟食这些类别上的支出.

2. 查看数据整体信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 440 entries, 0 to 439
Data columns (total 8 columns):
Channel 440 non-null int64
Region 440 non-null int64
Fresh 440 non-null int64
Milk 440 non-null int64
Grocery 440 non-null int64
Frozen 440 non-null int64
Detergents_Paper 440 non-null int64
Delicassen 440 non-null int64
dtypes: int64(8)
memory usage: 27.6 KB
没有缺失值, 且均为整数型.
3. 描述性统计
有两种渠道来源, 和三种地区, 各自分别占多少还需要进一步探索.
新鲜产品每年支出: 范围3~112151, 中位数为8504, 均值为12000, 呈现右偏分布
奶制品每年支出: 范围55~73498, 中位数为3627, 均值为5796, 呈现右偏分布
食品杂货每年支出: 范围3~92780, 中位数为4756, 均值为7951, 呈现右偏分布
冷冻产品每年支出: 范围25~60869, 中位数为1526, 均值为3072, 呈现右偏分布
洗涤剂和纸制品每年支出: 范围3~40827, 中位数为817, 均值为2881, 呈现右偏分布
熟食每年支出: 范围3~47943, 中位数为965, 均值为1525, 呈现右偏分布

4. 偏态和峰态
Fresh
偏态系数为 2.561322751927935, 峰态系数为 11.536408493056006
Milk
偏态系数为 4.053754849210881, 峰态系数为 24.669397750673077
Grocery
偏态系数为 3.5874286903915453, 峰态系数为 20.914670390919653
Frozen
偏态系数为 5.9079856924559575, 峰态系数为 54.68928069737255
Detergents_Paper
偏态系数为 3.6318506306913645, 峰态系数为 19.009464335418212
Delicassen
偏态系数为 11.151586478906117, 峰态系数为 170.69493933454066
可以看到均表现为尖峰, 高度偏态分布.
3. 数据预处理
没有缺失值, 因此不用缺失值处理
1. 异常值
在处理异常值之前, 先来通过箱线图看看异常值.

可以看到以上6个连续型变量均有不同程度的异常值, 由于k-means算法对异常值较敏感, 因此选择剔除它
原有样本容量:440, 剔除后样本容量:318

在剔除一次异常值之后, 6个连续变量的波动幅度也都都大致接近, 你可能会问为什么还有异常值存在? 现在的异常值是相对于新数据集产生的, 而我们把原数据集中的异常值已经剔除了, 通常来说, 对于异常值只需剔除一次即可, 如果彻底剔除的话, 样本容量可能会有大幅度的变化, 不妨试试.
原有样本容量:440, 彻底剔除后样本容量:97

可以看到现在的数据集中已经不存在异常了, 但是样本容量也从440大幅度下降为97, 因此这里不建议彻底删除.
4. 可视化分析

5. 特征工程
1. 离散型变量
将离散型变量处理成哑变量.
2. 连续型变量
由于连续型变量的数值范围有大有小, 为消除其对聚类结果的影响, 这里采用z-score进行归一化处理
6. 聚类模型
1. 构建聚类模型

根据肘部法则, 选择K=2, 也就是说将客户分为2群.
2. 客户分群
从6种产品每年消费支出来看, 客户群1在冷冻产品上最高, 在洗涤剂和纸制品上最低, 而客户群2则在冷冻产品上最低, 在洗涤剂和纸制品上最高, 且客户群2在6种产品的消费支出均高于中位数水平

3. 最终分群结果

网友评论