基本场景
业务部门拿来了一些数据找到数据部门,这些数据是关于客户的,苦于没有分析入手点,希望数据部门通过对这些数据的分析,给业务部门一些启示,或者提供后续分析或业务思考的建议。
数据源
数据源特征
USER_ID : 用户ID,整数型。
AVG_ORDERS :平均用户订单数量,浮点型。
AVG_MONEY : 平均订单价值,浮点型。
IS_ACTIVE :是否活跃,字符串型。
SEX : 性别,0,1,2标记未知,男,女。
数据类别分析
IS_ACTIVE , SEX为分类型变量,不可直接进行聚类分析。
AVG_ORDERS , AVG_MONEY具有明显的量纲差异,需要进行标准化或归一化处理。
分裂ID列,不能直接参与特征计算。
聚类方法
通过计算其聚类类别内的分类特征值出现的频数和频率。
代码
part 1 导入库
import pandas as pd # panda库
import numpy as np
import matplotlib.pyplot as plt # 导入matplotlib库
from sklearn.preprocessing import MinMaxScaler # 标准化库
from sklearn.cluster import KMeans # 导入sklearn聚类模块
from sklearn.metrics import silhouette_score # 效果评估模块
import matplotlib.pyplot as plt # 图形库
part 2 读取数据
raw_data = pd.read_csv('cluster.txt') # 导入数据文件
numeric_features = raw_data.iloc[:,1:3] # 数值型特征
part 3 数据标准化
scaler = MinMaxScaler()
scaled_numeric_features = scaler.fit_transform(numeric_features)
print(scaled_numeric_features[:,:2])
对AVG_ORDERS和AVG_MONEY做标准化处理
part 4 训练聚类模型
n_clusters = 3 # 设置聚类数量
model_kmeans = KMeans(n_clusters=n_clusters, random_state=0) # 建立聚类模型对象
model_kmeans.fit(scaled_numeric_features) # 训练聚类模型
聚类数量为3,建立聚类模型对象,random_state = 0是为了保证每次测试时的初始值一致,避免由于初始值不同导致的聚类结果差异。
part 5 模型效果指标评估
# 总样本量,总特征数
n_samples, n_features = raw_data.iloc[:,1:].shape
print('samples: %d \t features: %d' % (n_samples, n_features))
#非监督评估方