pandas杭州市出租房分析( 四 )


杭州市的房租呈长尾偏态 , 大多数租金集中在1500~2500之间 。
不同区域的租价分布情况
f,ax=plt.subplots(figsize=(12,8))sns.boxplot(x='district',y="price_int",data=http://www.kingceram.com/post/info3[info3.type=='整租'])plt.title('不同区域的租金分布(整租)')plt.xlabel('区域')plt.ylabel('租金')plt.show()
f,ax=plt.subplots(figsize=(12,8))sns.boxplot(x='district',y="price_int",data=http://www.kingceram.com/post/info3[info3.type=='单间'])plt.title('不同区域的租金分布(单间)')plt.xlabel('区域')plt.ylabel('租金')plt.show()
可以发现各区域合租的租金相对于整租的租金相对集中 , 整租租金相对分散 。

pandas杭州市出租房分析

文章插图
看单间出租图可以看出 , 滨江区、上城区的租金中位数最高,将近2000/月 。余杭区和萧山区租金最低 。
f,ax=plt.subplots(figsize=(12,8))sns.boxplot(x='m_room_type',y="price_int",data=http://www.kingceram.com/post/info3[info3.type=='单间'])plt.title('不同房型的租金分布(单间)')plt.xlabel('房型')plt.ylabel('租金')plt.show()
就单间租金的话 , 主卧的价格相对高些 , 2室的主卧相比于3室的主卧又高些 。
租金和面积的关系
plt.figure(figsize=(20,6))sns.regplot(x='m_area', y='price_int', data=http://www.kingceram.com/post/info3)plt.xlabel('面积')plt.ylabel('租金')plt.show()
由图中可以看出 , 随着面积的增长 , 租金也在上升 , 大部分房源的面积在100平米以内 , 租金在一万块以内 。
房源分类
本文用聚类分析把这些房源分类 , 采用常用的K-means聚类算法 , 通过计算离差平方和来进行分类 。聚类原则:组内差距要小 , 组间差距要大 。我们用面积和租金这两个变量对房源进行分类 , 通过SSE(sum of the , 误差平方和)来确定分类K值 。
#############K-means-房源聚类############from sklearn.cluster import KMeansfrom sklearn.preprocessing import StandardScalerss = StandardScaler()#from sklearn import datasetsimport numpy as npX = info3[['m_area','price_int']] ##表示我们只取特征空间中的后两个维度X= ss.fit_transform(X )origin_data = http://www.kingceram.com/post/ss.inverse_transform(X)# '利用SSE选择k'SSE = []# 存放每次结果的误差平方和for k in range(1, 15):estimator = KMeans(n_clusters=k)# 构造聚类器estimator.fit(X )SSE.append(estimator.inertia_)X = range(1, 15)plt.xlabel('k')plt.ylabel('SSE')plt.plot(X, SSE, 'o-')plt.show()
从图中可以看到 , 当K=4时 , 明显曲线下降速度变缓 , 这说明我们将房源分成4类会比较合适 。因此确定这里K=4 。
下面进行K-means聚类
estimator = KMeans(n_clusters=4)#构造聚类器estimator.fit(X)#聚类label_pred = estimator.labels_ #获取聚类标签#绘制k-means结果x0 = origin_data[label_pred==0]x1 = origin_data[label_pred == 1]x2 = origin_data[label_pred == 2]x3 = origin_data[label_pred == 3]plt.scatter(x0[:,0], x0[:,1], c = "red", marker='o', label='label0')plt.scatter(x1[:,0], x1[:,1], c = "green", marker='*', label='label1')plt.scatter(x2[:,0], x2[:,1], c = "blue", marker='+', label='label2')plt.scatter(x3[:,0], x3[:,1], c = "yellow", marker='o', label='label3')plt.xlabel('面积')plt.ylabel('租金')plt.legend(loc=2)info3['label']=''info3['label'][label_pred==0]=0info3['label'][label_pred==1]=1info3['label'][label_pred==2]=2info3['label'][label_pred==3]=3pd.pivot_table(info3,values=['price_int','m_area'],columns='label',aggfunc='mean')