Python 数据分析微专业课程--项目实战09 房价影响因素挖掘
1.项目说明
分析上海房价和房租,计算租售比;分析上海市人口密度、路网密度、餐饮价格和房价的关系。
2.项目具体要求
1、数据清洗、整合
要求:
① 将“house_rent”、“house_sell”分别读取
② 分别计算平方米建筑面积的月租金、每平方米建筑面积的房价
③ 将数据按照小区名合并
2、计算“房屋售租比”,并做初步判断
要求:
① 计算指标
② 绘制直方图、箱型图看“售租比”的一个数据分布情况
3、上海市人口密度、路网密度、餐饮价格,离市中心距离和“房屋每平米均价”是否有关系呢?
要求:
① 首先,导出整理好的数据,并qgis中绘制空间格网图,查看房屋每平米均价、房屋每平米租金及售租比数据的空间分布
② 第二,空间统计,分别按照格网对人口密度、路网密度、餐饮价格进行指标统计并标准化
③ 第三,加载上海中心点point空间数据,计算每个网格到市中心距离
④ 第四,将空间格网的“房屋每平米均价”按照距市中心的距离排序,并制作散点图,看看能否挖掘出什么信息
4、按照离市中心距离每10km,分别再次判断人口密度、路网密度、餐饮价格和“房屋每平米均价”的相关程度
要求:
① 按照空间距离分别迭代计算三指标和“房屋每平米均价”的关系
② 绘制折线图查看:随着市中心距离增加,不同指标相关系系数变化情况
3.实现思路:
1.读取数据后去除数据中的空值,然后计算每平米月租金和房价,为了后面的数据计算,由于每个小区的租金和房价差不一般都不会太大,
因此可以根据小区进行分组求租金和房价的均值,以简化计算,然后根据小区名称连接数据,并筛选出每个小区的平均租金,房价和经纬度.
2.房屋的租售比是衡量一个房价水平的重要指标,所以需要查看房屋租售比的分布情况,这里根据清洗整合后的数据绘制房屋租售比的直方图和箱型图.
3.分析上海市人口密度、路网密度、餐饮价格和房价的关系,首先需要获取相应数据,这里可以使用QGIS绘制空间网格图,计算每个网格内的人口密度,
道路密度和平均房价,然后将数据导出,在python中计算各个网格中心点离市中心的距离,再对各指标进行标准化后绘制房价与各个指标的散点图,
来查看房价与人口密度、路网密度、餐饮价格,离市中心距离的相关性,并使用pandas.corr()来计算相关系数
4.数据计算方面可以使用for循环计算每增加10KM人口密度、路网密度、餐饮价格和“房屋每平米均价”的相关系数,最后将计算结果整合成一个dataframe, 查看随距离增加相关系数的变化情况可以绘制折线图,这里可以使用bokeh来绘制。
4.实现过程:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # 不发出警告 from bokeh.io import output_notebook output_notebook() # 导入notebook绘图模块 from bokeh.plotting import figure,show from bokeh.models import ColumnDataSource # 导入图表绘制、图标展示模块 # 导入ColumnDataSource模块 import os os.chdir(r'D:\IT\python数据分析师\项目10') #读取房源信息数据和租金信息数据 hourse_rent = pd.read_csv('house_rent.csv') hourse_sell = pd.read_csv('house_sell.csv') #计算每平方米租金 hourse_rent['rent_area']=hourse_rent['price']/hourse_rent['area'] #删除空值 hourse_rent.dropna(inplace=True) hourse_sell.dropna(inplace = True) rent_mean = hourse_rent.groupby('community')[['rent_area']].mean()#租金数据根据社区分组计算均值 sell_mean = hourse_sell.groupby('property_name')[['average_price']].mean()#房源数据根据小区分组计算均值 #筛选出房源小区名称及其经纬度数据 unique_data= hourse_sell[~hourse_sell['property_name'].duplicated()][['property_name','lng','lat']] price_info = pd.merge(rent_mean,sell_mean,left_index = True,right_index=True) #根据小区名称连接房源数据和租金数据 price_info =pd.merge(price_info,unique_data,left_index =True ,right_on = 'property_name')#连接小区经纬度信息 price_info = price_info[['property_name','rent_area','average_price','lng','lat']]#数据筛选,去除多于字段 price_info.columns = ['community','rent_area','sell_area','lng','lat']#重命名字段 price_info.reset_index(drop= True,inplace =True) #重置索引 print(price_info.head(10)) price_info['sell/rent'] = price_info['sell_area']/price_info['rent_area']#计算租售比 price_info= price_info[price_info['sell/rent']!=0] #清楚价格异常数据 price_info.reset_index(drop = True,inplace = True) #重置索引 #绘制房屋租售比直方图 price_info['sell/rent'].plot.hist(bins = 90,color = 'teal',alpha = 0.7,edgecolor ='gray',figsize = (14,5)) plt.title('房屋租售比-直方图') plt.grid(linestyle = '--') plt.xlim([0,6000]) plt.savefig('租售比直方图.png') #绘制房屋租售比箱型图 price_info[['sell/rent']].plot.box(vert= False,sym='+',title = '房屋租售比-箱型图',figsize= (14,5)) plt.grid(linestyle = '--') plt.xlim([0,6000]) plt.savefig('租售比箱型图.png') #打印租售比统计数据 print(price_info['sell/rent'].describe())
说明:
1.数据清洗和整合目的主要是去除空值,并通过整合筛选获得分析所需的字段,主要是小区,每平米租金,每平米房价,经度,维度。而租金和房价数据是两各不同表格,所以需要分别读取并做清洗和计算,并通过小区分组求均值,根据小区名称连接数据,然后筛选出所需的数据。
2.房屋租售比=房屋每平米价格/房屋每平米租金,这里计算每个小区的租售比后绘制直方图和箱型图来分析上海房屋租售比情况。
分析可得以下结论:
1.上海市房屋租售比平均值为763个月,中位数为725个月,50%分布在618~870之间, 根据国际经验超过300则房地产泡沫出现,超过700为泡沫严重,说明上海房地产市场泡沫严重。
2.租售比均值763个月,约63年,即购买房屋后连续放租63年的租金总数才能收回买房的钱, 从长期受益来看,投资价值很小。
3.上海的房产投资目前都来自于对未来房价预期.
data_q = pd.read_excel('data_q1.xlsx')#导入经过空间统计后的数据表格 data_q.fillna(0,inplace = True)#空值填充为0 data_q1 = data_q[data_q['sell_area_']>0] #筛选出有房源均价信息的区域数据 data_q1.reset_index(drop = True,inplace = True) #重置索引 data_q1.head() #创建函数做数据标准化处理 def normalize(data,col): return (data[col]-data[col].min())/(data[col].max()-data[col].min()) #将人口密度,网路密度,餐饮价格做标准化处理 data_q1['人口密度指标'] = normalize(data_q1,'net_population') data_q1['路网密度指标'] = normalize(data_q1,'net_length') data_q1['餐饮价格指标'] = normalize(data_q1,'rjxf_area') #上海中心点经纬度 lng,lat = 353508.848122,3456140.926976 #计算离市中心的距离数据 data_q1['离市中心距离'] = ((data_q1['lng']-lng)**2+(data_q1['lat']-lat)**2)**0.5 data_q1.sort_values(by='离市中心距离',inplace = True) #做升序排序 data_q2 = data_q1[['sell_area_','人口密度指标','路网密度指标','餐饮价格指标','离市中心距离']] #数据筛选 #绘制人口密度指标与房屋均价散点图 fig = plt.figure(figsize = (15,18)) ax1 = fig.add_subplot(4,1,1) ax1.scatter(x = '人口密度指标',y = 'sell_area_',data = data_q2,s = 2) ax1.set_xlim(-0.2,1.2) ax1.set_xlabel('人口密度指标') ax1.set_ylabel('房屋每平米均价') ax1.grid(linestyle='--') #绘制路网密度指标与房屋均价散点图 ax2 = fig.add_subplot(4,1,2) ax2.scatter(x = '路网密度指标',y = 'sell_area_',data = data_q2,s = 2) ax2.set_xlim(-0.2,1.2) ax2.set_xlabel('路网密度指标') ax2.set_ylabel('房屋每平米均价') ax2.grid(linestyle='--') #绘制餐饮价格与房屋均价散点图 ax3 = fig.add_subplot(4,1,3) ax3.scatter(x = '餐饮价格指标',y = 'sell_area_',data = data_q2,s = 2) ax3.set_xlim(-0.2,1.2) ax3.set_xlabel('餐饮价格指标') ax3.set_ylabel('房屋每平米均价') ax3.grid(linestyle='--') #绘制离市中心距离指标与房屋均价散点图 ax4 = fig.add_subplot(4,1,4) ax4.scatter(x = '离市中心距离',y = 'sell_area_',data = data_q2,s = 2) ax4.set_xlim(-10000,70000) ax4.set_xlabel('离市中心距离') ax4.set_ylabel('房屋每平米均价') ax4.grid(linestyle='--') plt.subplots_adjust(hspace=0.3) #调节图距 fig.savefig('各指标与房价散点图.png') print('''根据散点图可知,离市中心距离、路网密度指标和人口密度指标和房屋均价有较明显的相关性, 其中离市中心的距离相关性最强。同时餐饮价格指标和房屋均价相关性很弱\n''') print(data_q2.corr()[['sell_area_']])
售租比空间分布
租金空间分布
售租比空间分布
说明:
1.一个城市对房价影响因素的分析,要找出可能有影响的各项指标,然后分期其和房价相关性,这里可能的影响因素有以下几个:人口密度、路网密度、餐饮价格、距离市中心距离这四个指标,这里使用QGIS做网格数据的空间统计得到前三个指标的数据,然后导入python计算距离市中心距离,然后对个指标数据进行标准化。
2. 分析相关性的可视化可以绘制散点图,这里创建四个子图,反别绘制四个指标与房价的散点图,可以比较清晰的看出其相关性。
3.最后通过pandas.corr()计算并输出具体相关性系数。
4.根据分析可得以下结论:
a. 在上海全市层面,“离市中心距离”与“房屋每平米均价”相关性最强
b. “人口密度”及“路网密度”和“房屋每平米均价”为中等相关
c. “餐饮价格”与“房屋每平米均价”为弱相关
d. “房屋每平米均价”数据的离散程度却和空间距离有关 → “房屋每平米均价”越靠近市中心越离散,越远离市中心则越收敛
from bokeh.models import HoverTool #导入模块 #迭代空间距离,筛选数据并计算pearson 相关系数 p_lst = [] for i in range(10000,60001,10000): p_df = data_q2[data_q2['离市中心距离']<i].corr() #筛选数据生成pearson 相关系数矩阵 p_df = p_df.loc[['sell_area_'],['人口密度指标','路网密度指标','餐饮价格指标','离市中心距离']] #提取矩阵中个指标与房屋均价的相关系数 p_df.index =[i] #变更索引 p_lst.append(p_df) #将各个距离段的相关系数数据添加到列表 pdata = pd.concat(p_lst) #连接表格 pdata.index.name = 'jl' #索引命名 pdata.columns = ['rkmd_pearson','lwmd_pearson','cyjg_pearson','zxjl_pearson'] #重命名字段 #生成绘图数据 source = ColumnDataSource(data= pdata) #标签设置 hover = HoverTool(tooltips = [('离市中心距离','@jl'), ('人口密度相关系数','@rkmd_pearson'), ('道路密度相关系数','@lwmd_pearson'), ('餐饮价格相关系数','@cyjg_pearson'), ('中心距离相关系数','@zxjl_pearson')]) #生成绘图对象 p = figure(y_range = [-0.8,0.55],plot_width = 900,plot_height = 400, tools = [hover,'wheel_zoom,reset,crosshair'], title = '随离市中心距离增加,不同指标相关性系数变化情况') #绘制人口密度相关系数点,线图 p.line(x= 'jl',y='rkmd_pearson',source = source,color = 'darkorange',alpha = 0.8,legend = '人口密度相关系数') p.circle(x= 'jl',y='rkmd_pearson',source = source,color = 'darkorange',alpha = 0.8,size =10,legend = '人口密度相关系数') #绘制路网密度相关系数点,线图 p.line(x= 'jl',y='lwmd_pearson',source = source,color = 'olive',alpha = 0.8,legend = '路网密度相关系数') p.circle(x= 'jl',y='lwmd_pearson',source = source,color = 'olive',alpha = 0.8,size =10,legend = '路网密度相关系数') #绘制餐饮价格相关系数点,线图 p.line(x= 'jl',y='cyjg_pearson',source = source,color = 'blue',alpha = 0.6,legend = '餐饮价格相关系数') p.circle(x= 'jl',y='cyjg_pearson',source = source,color = 'blue',alpha = 0.6,size =10,legend = '餐饮价格相关系数') #绘制中心距离相关系数点,线图 p.line(x= 'jl',y='zxjl_pearson',source = source,color = 'firebrick',alpha = 0.8,legend = '中心距离相关系数') p.circle(x= 'jl',y='zxjl_pearson',source = source,color = 'firebrick',alpha = 0.8,size =10,legend = '中心距离相关系数') #设置图例 p.legend.location='center_right' p.legend.click_policy='hide' show(p)
说明:
1. 根据个指标与房价的相关性分析可知距离市中心的距离与房价的相关性最强,因此这里深入分析其相关性的特点。
2.提出一个问题:随着距离市中心的距离增加,各项与房价的相关性是如何变化的?
这里采用方式是以10KM为单位,看没每增加10KM相关性系数是如何变化的,这里使用for循环计算各个距离的相关性系数,然会绘制折线图。
3.通过计算结果和图表可得以下结论:
a.“人口密度”、“道路密度”、“离市中心距离”和“房屋均价”有着明显的相关性,而“餐饮价格”和“房屋均价”相关性较弱
b. 随着离市中心的距离越远,指标的相关性在数据上体现更明显,而这个分界线大概在20-30km处,这正是上海中心城区和郊区的分界 → 上海房价市场的“中心城区-郊区”分化特征
c. 中心城区的房产市场对指标因素的影响更加敏锐,而郊区则更迟钝 → 越靠近市中心,影响因素越复杂。
5.结论:
- 数据分析中地产数据的分析是一个重要的部分,通过这个项目的完成对房价分析的套路有了一个大致的了解,
- 特别是如何确定各项分析指标,如何使用网格数据进行空间分析以及可视化实现方法,非常实用。
- Python 数据分析微专业课程--项目实战14 泰坦尼克号获救问题
- Python 数据分析微专业课程--项目实战12 财富分配实验
- Python 数据分析微专业课程--项目实战10 国产烂片深度揭秘
- Python 数据分析微专业课程--项目实战11 中国城市资本流动问题探索
- python数据分析与挖掘项目实战记录
- python数据分析美国大选项目实战(三)
- python数据分析与挖掘实战—聚类算法对比
- Python数据分析与挖掘实战(数据预处理)
- 福布斯系列之数据分析思路篇 | Python数据分析项目实战
- 【python数据挖掘课程】十三.WordCloud词云配置过程及词频分析
- python数据挖掘课程 十二.Pandas、Matplotlib结合SQL语句对比图分析
- Python数据分析与挖掘实战(开发流程及常用库安装)
- python数据挖掘与分析实战 第5章 一处错误
- Python数据分析与挖掘实战(Pandas,Matplotlib常用方法)
- python数据分析与挖掘实战-4
- 【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据
- python数据挖掘课程 十三.WordCloud词云配置过程及词频分析
- python数据挖掘课程 十一.Pandas、Matplotlib结合SQL语句可视化分析