Airbnb客户分群——Kmeans简单运用
2020-03-20 本文已影响0人
Brian_mingzhi
问题描述
根据airbnb用户信息对客户进行分群
数据字段
一、数据准备
1.引入数据
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
airbnb=pd.read_csv(airbnb_kmeans.csv)
airbnb.describe()
airbnb.info()
1.1发现age的异常值有“2岁”和“2014岁”
1.2data_account和data_first为object型 且gender为字符型变量
image.png
2.异常值处理
2.1处理年龄
#筛选出年龄大于5岁且小于100岁的用户
airbnb = airbnb[airbnb['age']>5]
airbnb = airbnb[airbnb['age']<100]
2.2处理时间变量
#将object转化为datetime变量
airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created'])
airbnb['date_first_booking']=pd.to_datetime(airbnb['date_first_booking'])
#创建新变量:“用户注册了多少年”
airbnb['year_date_account_created']=airbnb['date_account_created'].map(lambda x:2020-x.year)
#创建新变量:“距离用户第一次订单多少年”
airbnb['year_date_first_booking']=airbnb['date_first_booking'].map(lambda x:2020-x.year)
2.3处理gender字符型
airbnb['gender']=pd.get_dummies(airbnb['gender'])
二、建模
1.利用肘方法看分多少类
import sklearn.cluster
import matplotlib.pyplot as plt
%matplotlib inline
kmeans_score = [] #存放模型拟合后的inertia
for i in range(1,11):
model = KMeans(n_clusters=i,random_state=10)
model.fit(airbnb_5)
kmeans_score.append(model.inertia_) #inertia表示各点到中心之和
plt.plot(range(1,11),kmeans_score)
plt.xlabel('clusters')
plt.ylabel('interia')
plt.show()#用肘方法查看最合适的类数
可见n=3时,出现拐点,所以分类数定为3
2.分3类
model = KMeans(n_clusters=3,random_state=10)#注意KMeans两个大写字母
model.fit(airbnb_5)
result = model.predict(airbnb_5)
airbnb['K-means'] = result #创建“类别”列
3.查看分类后各中心点位置 并且解读
#查看分类后的各中心
model.cluster_centers_
分类中心.png
解读:
1.第一类为安卓使用者偏度,喜好通过PC端下单
2.第二类为通过手机移动网页下单
3.第三类为“果粉”,特征为很少使用PC端网页下单
image.png