利用K-Means算法对Zillow竞赛数据的经纬度地理信息进行聚类,并将聚类结果进行可视化。
Kaggle举办了很多次房价预测相关的比赛。在房价预测比赛中都会有涉及到地理位置的特征,比如:最基本的经纬度(longitude、latitude),还包括地区编码、邮编等。
地理位置对房价的重要性想必大家都是知道的,对一套相同条件的房子来说,位于北京和昆明的可谓天壤之别。因此需要我们花费大量的时间和精力来处理这些特征。
一、地理位置特征处理方法
看到地理位置信息,首先就会想到聚类,一个简单的方式将每个房子划分到同一块区域中去;除了聚类以外,通过算出几个中心点坐标,计算曼哈顿距离或者欧式距离可能都会有神奇的效果。
二、Zillow地理信息可视化实战分析
我最近在刷Zillow,所以就以Zillow数据集为例,介绍地理信息聚类方法。
第一步,我们把地理信息先可视化出来,看看效果。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
properties = pd.read_csv('../input/properties_2017.csv')
# make geo_df
geo_df = properties[['parcelid','latitude', 'longitude']]
geo_df['longitude'] = geo_df['longitude'] / 1e6
geo_df['latitude'] = geo_df['latitude'] / 1e6
x = np.array(geo_df['latitude'])
y = np.array(geo_df['longitude'])
fig = plt.figure(figsize=(16, 12))
plt.scatter(x, y, alpha=0.5)
plt.show()
第二步,利用KMeans算法进行聚类,并可视化聚类效果。
kmeans = KMeans(n_clusters=10).fit(geo_df[['latitude', 'longitude']])
geo_df['cluster_n'] = kmeans.labels_
fig = plt.figure(figsize=(16, 12))
x = np.array(geo_df['latitude'])
y = np.array(geo_df['longitude'])
colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'aqua', 'brown', 'darkblue']
#print color
for i,c in enumerate(geo_df['cluster_n'][:500]):
plt.scatter(x[i], y[i], c=colors[c], alpha=0.5)
plt.show()
可视化结果,将地理信息聚类为10类并用不同的颜色来表示,在地图上的位置相对是比较集中的,具体代表的含义需要我们下来深挖。这里只是提供一个想法。
结束语
地理信息对房价来说真的非常非常非常重要,仅仅是简单的聚类完全没有将特征的价值发挥出来,需要再尝试不断的用其他方法来处理。还有很多更加深入的处理方法,我们可以参考在之前的比赛中其他优秀获奖选手的处理思路,改进我们的处理方法,毕竟模仿也是学习最快的手段。
欢迎关注个人微信公众号:“kaggle数据分析”,分享kaggle比赛的经验和方法。