数据分析项目之:链家二手房数据分析
项目分享目的:在学习完Numpy,Pandas,matplotlib后,熟练运用它们的最好方法就是实践并总结。在下面的分享中,我会将每一步进行分析与代码展示,
希望能对大家有所帮助。
项目名称:链家二手房数据分析
项目概述:本项目主要利用上面提到的三个工具进行数据的处理,从不同的维度对北京各区二手房市场情况进行可视化分析,为后续
数据挖掘建模预测房价打好基础。
数据链接:链接:https://pan.baidu.com/s/1v7MXARXxFdMmniyW7aNuAA 密码:kucd
分析步骤:工具库导入—>数据加载—>数据清洗—>数据可视化分析
导包
# 数据分析三剑客 import numpy as np import seaborn as sns import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt sns.set_style({\'font.sans-serif\':[\'simhei\',\'Arial\']}) %matplotlib inline
# 设置忽略警告 import warnings warnings.filterwarnings(\'ignore\')
# 设置全局字体 plt.rcParams[\'font.sans-serif\'] = \'Songti SC\' plt.rcParams[\'axes.unicode_minus\'] = False
数据载入
lj_data = pd.read_csv(\'./lianjia.csv\') display(lj_data.head(),lj_data.shape)
查看数据概况
display(lj_data.info(),lj_data.describe()) \'\'\' 通过观察: 1. Elevator列存在严重的数据缺失情况 2. Size列最小值为2平米,最大值为1019平米,跟据常识,初步判断为异常值 \'\'\'
添加新属性房屋均价(PerPrice),并且重新排列列位置
\'\'\' 观察发现: 1. ID属性对于本次分析没有什么意义,所以可以将其移除; 2. 由于房屋单价分析起来比较方便,简单使用总价/面积即可得到,所以增加一列PerPrice(只用于分析,不是预测特征); 3. 原数据属性的顺序比较杂乱,所以可以调整一下。 \'\'\'
# 添加 PerPrice(单位均价) 列 df = lj_data.copy() df[\'PerPrice\'] = (lj_data[\'Price\']/lj_data[\'Size\']).round(2) # 重新摆放列位置 columns = [\'Region\',\'District\',\'Garden\',\'Layout\',\'Floor\',\'Year\',\'Size\',\'Elevator\', \'Direction\',\'Renovation\',\'PerPrice\',\'Price\'] df = pd.DataFrame(df,columns = columns) # 重新查看数据集 df.head(3)
数据可视化分析
1. Region特征分析
对于区域特征,我们可以分析不同区域房价和数量的对比
# 对二手房区域分组,对比二手房数量和每平米房价 df_house_count = df.groupby(\'Region\')[\'Price\'].count().sort_values(ascending = False).to_frame().reset_index() df_house_mean = df.groupby(\'Region\')[\'PerPrice\'].mean().sort_values(ascending = False).to_frame().reset_index() # display(df_house_count.head(2),df_house_mean.head(2))
绘图
1 # 创建子视图对象 2 f,[ax1,ax2,ax3] = plt.subplots(3,1,figsize = (20,18)) 3 4 # 设置绘图参数 5 sns.barplot(x=\'Region\',y=\'PerPrice\',palette=\'Blues_d\',data=df_house_mean,ax=ax1) 6 ax1.set_title(\'北京各区二手房单位平米价格对比\',fontsize=15) 7 ax1.set_xlabel(\'区域\') 8 ax1.set_ylabel(\'单位平米价格\') 9 10 sns.barplot(x=\'Region\',y=\'Price\',palette=\'Greens_d\',data=df_house_count,ax=ax2) 11 ax2.set_title(\'北京各区二手房数量对比\',fontsize=15) 12 ax2.set_xlabel(\'区域\') 13 ax2.set_ylabel(\'数量\') 14 15 sns.boxplot(x=\'Region\',y=\'Price\',data=df,ax=ax3) 16 ax3.set_title(\'北京各区二手房房屋总价\',fontsize=15) 17 ax3.set_xlabel(\'区域\') 18 ax3.set_ylabel(\'房屋总价\') 19 20 # 展示 21 plt.show()
分析报告
可以观察到:
二手房均价:西城区房价最贵均价大约11万/平,因为西城在二环以里,且是热门学区房聚集地。
其次是东城约10万/平,海淀约8.5万/平,其他均低于8万/平。
二手房数量:从数量统计来看,可以看到目前二手房市场比较火热的区域。海淀和朝阳区二手房数量最多,
差不多都接近3000套。然后是丰台区,近几年正在改造建设,有赶超之势。
二手房总价:通过箱型图看到,各大区房屋总价中位数都在1000万以下,而且房屋总价离散值较高,
西城最高达到了6000万,说明房屋价格不是理想的正态分布。
2. Size特征分析
# 创建子视图 f,[ax1,ax2] = plt.subplots(1,2,figsize=(15,5)) # 房屋面积分布情况 sns.distplot(df[\'Size\'],bins=20,ax=ax1,color=\'r\') sns.kdeplot(df[\'Size\'],shade=True,ax=ax1) # 房屋面积和出售价格的关系 sns.regplot(x=\'Size\',y=\'Price\',data=df,ax=ax2) # 展示 plt.show()
注:下面