北京市租房数据分析
即将毕业,因此身边许多同学都在考虑租房的问题,于是我尝试用链家网上的租房数据进行了分析,并用机器学习算法预测了房租。
用八爪鱼爬取了链家北京市13个区租房信息共21492条,存为excel后为如下格式接下来我利用excel对原始数据进行了预处理,提取了卧室数目、客厅数目以及卫生间数目,发现数据在距地铁距离,水、电、燃气有缺失,因此对于水、电、燃气列缺失的数据,我进行了删除,并添加了id列,余下一共19590条数据。导出为csv格式,最终数据格式如下:
接下来利用Jupyter Notebook对数据进行分析。首先导入需要用的库,设置画图风格等,然后导入数据。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
#解决画图中显示中文的问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rc('figure', figsize=(10, 10))
#解决画图中负值显示为方框的问题
plt.rcParams['axes.unicode_minus']=False
#内嵌绘图,可以省略掉plt.show()这一步。
%matplotlib inline
data=pd.read_csv("zufang.csv")
data.info()
data.hist(bins=50,figsize=(15,15))
打印出数据的信息和各数值型特征的分布。
我发现房子的面积集中在200平米以内,租金集中在20000元以内,观察数据类型,我发现‘bedroom’是object类,而类似的‘livingroom’和‘bathroom’都是int类,因此我们需要看一下‘bedroom’列的元素都有什么。
data['bedroom'].unique()
out:array([‘1’, ‘2’, ‘3’, ‘5’, ‘6’, ‘4’, ‘7’, ‘9’, ‘8’, ‘未知’, ‘14’], dtype=object)
我们发现‘bedroom’列里有‘未知’元素,因此我们找到‘未知’的行,删除这些行。
data[data['bedroom'].isin(['未知'])]
data = data.drop([12548,14064,17881])
把‘bedroom’转为int64类型并查看卧室数目很多的房子中是否有不符合常识的数据,找到并且删除它们。
for col in ['bedroom']:
data[col] = data[col].astype(np.int64)
data[data['bedroom'].isin([7,8,9,14])]
截取打出的一部分数据,发现19094条数据有14间卧室面积却只有84平米,明显不符合常识,因此删除这条数据,对‘livingroom’,‘bathroom’列也做同样的操作。
添加了每平米租金列,并把数据保存为‘data_clean.csv’.
data['aver_price'] = data.apply(lambda x: x[-1] / x[2], axis=1)
data.to_csv('data_clean.csv', index=False)
下面开始对数据进行分析。
首先以行政区作为y轴,每平米平均租金作为x轴作图。
plt.subplots(figsize=(10,8))
sns.barplot(y="district",x='aver_price', data=data)
各区按照每平米的租金进行排序,从大到小为:120以上:西城,东城,海淀。80-110:朝阳,丰台,石景山。80以下: