Python-Kmeans聚类全流程,aribnb

数据清洗
调整年龄的范围

airbnb=airbnb[airbnb['age']<=80]
airbnb=airbnb[airbnb['age']>=18]

转变日期的格式,转为对分析有用的日期形式
调用to_datetime 转化为日期时间格式

airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created'])

计算注册至今的年份

airbnb['create_year']=airbnb['date_account_created'].apply(lambda x:2020-x.year)

用get_dummies将性别这一类别变量转变为哑变量

airbnb=pd.get_dummies(airbnb)

用 表.drop(columns=[‘1’,‘2’]) 删除处理前无用的列

airbnb.drop(columns=['date_account_created','date_first_booking'])

标准化,k的选择和聚类
取出要聚类用的列创建一个新表

airbnb_new=airbnb[['age','web','moweb','ios','android']]

用sklearn中的预处理preprocessing中的标准化工具scale对数据标准化

from sklearn.preprocessing import scale
x=pd.DataFrame(scale(airbnb_new))

引入聚类模块和matplotlib

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

肘部法找出最佳k
添加list,for循环

sse=[]
for i in range(1,11):
    kmeans=KMeans(n_clusters=i,init='k-means++',random_state=42)
    kmeans.fit(x)
    sse.append(kmeans.inertia_)

作图

plt.plot(range(1,11),sse)
plt.title('Elbow')
plt.xlabel('number')
plt.ylabel('sse')
plt.show()

将数组聚为三类

kmeans=KMeans(n_clusters=3,init='k-means++',random_state=42)
y_kmeans=kmeans.fit_predict(x)
print(y_kmeans)

可视化
创建聚类后的标签列,

airbnb_new['cluster']=kmeans.labels_
sns.scatterplot(x='age',y='ios',hue='cluster',data=airbnb_new)

聚类后describe数据的分布情况

airbnb_new.groupby(['cluster'])['age'].describe()

模型结果评价
调用metrics库的轮廓系数silhouette coefficient 评价
【-1,1】 评分越高,结果越好

from sklearn.metrics import silhouette_score
x_cluster=kmeans.fit_predict(x)
score=silhouette_score(x,x_cluster)
print(score)

你可能感兴趣的:(python)