注意点:一定要处理异常值和去量纲
导入库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
一、数据概况
异常值
缺失值
二、单变量分析
- 创建新变量
airbnb['year_since_account_created']=airbnb['date_account_created'].apply(lambda x:2019-x.year)
- 类别型变量处理
store=pd.get_dummies(store)
- 日期型变量处理
airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created']) # 将注册日期转变为日期时间格式
- 删除对业务分析没有实际作用的变量
drop(['变量名'],axis=1,inplace=True)
三、数据准备
1.相关分析
mb1.columns
mobike.corr() # 相关分析
sns.heatmap(df.corr()) # 使用热力图进行可视化呈现
2.选择变量
airbnb_5=airbnb[['age','web','moweb','ios','android']]
X = dataset.iloc[:, [3, 4]].values#选择最后两栏作为分群依据
3.数据标准化:(收入-收入均值)/收入标准差
from sklearn.preprocessing import scale
airbnb_5=airbnb[['age','web','moweb','ios','android']]
x=pd.DataFrame(scale(airbnb_5)) # 全部变量
tired['speed_scaled']=preprocessing.scale(tired.vehicle_speed) # 单个变量
四、评估聚类个数——肘部法则
快速下降趋于平缓下降的转折点,为聚类最好的情况
from sklearn.cluster import KMeans
sse = []
for i in range(1,11): # 循环使用不同k测试结果
kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
kmaeans.fit(df[[,,,]])
sse.append(kmeans.inertia_) # kmeans.inertia_是每类数据到其中心点的距离之和。值越小,聚类越好。类别越多,k越大,值越小。
plt.plot(range(1,11), sse)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()
五、建模
from sklearn import cluster
model=cluster.KMeans(n_clusters=3,random_state=10)# 先尝试分为三类
model.fit(x)
airbnb_5['cluster']=model.labels_ # 提取分群标签,存入dataframe
六、模型评估,评估变量选择和群数对分群效果的影响
(一)使用groupby函数,评估各个变量维度的分群效果
airbnb_5=airbnb[['age','web','moweb','ios','android']]
airbnb_5.groupby(['cluster'])['age'].describe()
(二)散点图,查看分群结果,考虑是否调整群数
sns.scatterplot(x='age',y='ios',hue='cluster',data=airbnb_5,palette=) # palette调色板,hue分组
(三)使用silhouette score轮廓系数,评估模型效果
from sklearn import metrics
x_cluster=model.predict(x) # 个体与群的距离
metrics.silhouette_score(x,x_cluster) # 评分越高,个体与群越近;评分越低,个体与群越远
六、模型优化
改变分类数量,重复建模步骤,并比较轮廓系数,不断优化模型
七、分群的业务解读,评估每个群最有区分度的变量
centers=pd.DataFrame(model.cluster_centers_)
centers.to_csv('center_3.csv') # 导出聚类结果
理解行和列:
行:每一行是系统认为的群组,即0群、1群、2群;
列:重点关注每一列的数据,标注出绝对值较大的数字,如果人群在某个特征变量上数据的绝对值较大,就说明这个人群在这个特征上有较明显的区分度
结合业务,解读各个群组的特征
例如,下图中0群大多通过H5页面下单,不使用app;2群可能是果粉,是ios重度用户,不怎么使用web。