赞
踩
1. 将“house_rent”、“house_sell”分别读取;
2. 分别计算平方米建筑面积的月租金、每平方米建筑面积的房价;
3. 将数据按照小区名合并。
4. 计算指标
5. 绘制直方图、箱型图看“售租比”的一个数据分布情况
1. 删除缺失值;
2. 按照小区做均值分析,整理后数据大概11532条。
3. “房屋售租比”=“每平方米建筑面积的房价”/“每平方米建筑面积的月租金”
4. 直方图bins数量大于80来作图
# -*- coding: utf-8 -*- """ Created on Sun Nov 3 12:15:18 2019 @author: WQQ """ import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # 导入作图模块 from bokeh.plotting import figure,show,output_file from bokeh.models import ColumnDataSource from bokeh.models import HoverTool from bokeh.palettes import brewer from bokeh.models.annotations import BoxAnnotation from bokeh.layouts import gridplot import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 ''' 1.数据清洗、整合 ''' # 分别读取house_rent和house_sell import os os.chdir('C:\\Users\\WQQ\Desktop\\163data\\CLASSDATA_ch06数据分析项目实战\\练习06_房价影响因素挖掘\\') df_rent=pd.read_csv('house_rent.csv',engine='python') df_sell=pd.read_csv('house_sell.csv',engine='python') # 删除缺失值 df_rent.dropna(inplace=True) df_sell.dropna(inplace=True) # 分别计算平方米面积月租金,平方米面积房价 df_rent['price_m2']=df_rent['price']/df_rent['area'] df_sell['price_m2']=df_sell['average_price'] # 选取数据 data_rent=df_rent[['community','price_m2','lng','lat']] data_sell=df_sell[['property_name','price_m2','lng','lat']] # 按照小区做均值分析 data_rent=data_rent.groupby('community').mean() data_sell=data_sell.groupby('property_name').mean() data_rent.reset_index(inplace=True) data_sell.reset_index(inplace=True) # 合并数据 data=pd.merge(data_rent,data_sell,left_on='community',right_on='property_name') # 选取整理数据 data=data[['community','price_m2_x','price_m2_y','lng_x','lat_x']] data.rename(columns={'price_m2_x':'rent_area','price_m2_y':'sell_area', 'lng_x':'lng','lat_x':'lat'},inplace=True) ''' 2.计算房屋售租比,并做初步判断 ''' # 计算指标:售租比=每平方米建筑面积的房价/每平方米建筑面积的月租金 data['s/r']=data['sell_area']/data['rent_area'] # 绘制售租比的直方图(bins>80) data['s/r'].plot.hist(stacked=True,bins=80,color='blue',alpha=0.3,grid=True,figsize=(10,4)) plt.title('房屋售租比直方图') # 绘制售租比箱型图 data['s/r'].plot.box(vert=False,grid=True,figsize=(10,4)) plt.title('房屋售租比箱型图') # 导出整理数据 print('##############################完成#########################')
1. 首先,导出整理好的数据,并qgis中绘制空间格网图,查看房屋每平米均价、房屋每平米租金及售租比数据的空间分布
2. 空间统计,分别按照格网对人口密度、路网密度、餐饮价格进行指标统计并标准化
3. 加载上海中心点point空间数据,计算每个网格到市中心距离
4. 将空间格网的“房屋每平米均价”按照距市中心的距离排序,并制作散点图,看看能否挖掘出什么信息,这里市中心点坐标为:lng-353508.848122,lat-3456140.926976 (投影坐标系)。
5. 按照空间距离分别迭代计算三指标和“房屋每平米均价”的关系
6. 绘制折线图查看:随着市中心距离增加,不同指标相关系系数变化情况,建议用bokeh制图
1. 导出csv数据,用dataframe.to_csv()
2. qgis加载数据后,以“net_population”为格网数据做空间统计
3. 注意qgis数据都为投影坐标系
4. 人口密度指标 → 已有“net_population”数据;路网密度指标 → 以格网为空间单元,计算道路长度;餐饮价格指标 → 以格网为空间单元,计算餐饮设施的人均均价数据。最后数据导入python中,标准化得分至0-1区间,导入数据后要填充空值为0,qgis中可以用结果net数据作为下一个分析数据,以此将统计结果汇总在一张属性表内,格网数据在导出前,先转为点数据,并计算经纬度,这里用投影经纬度,好依据中心点坐标计算离市中心距离。
5. 清洗数据,去除“售租比”为0的数据
6. 用for循环迭代空间距离,然后筛选数据并计算相关性
7. bokeh可以通过多次调用figure.line()来绘制多条折线图
# -*- coding: utf-8 -*- """ Created on Sun Nov 3 14:43:41 2019 @author: WQQ """ import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # 导入作图模块 from bokeh.plotting import figure,show,output_file from bokeh.models import ColumnDataSource from bokeh.models import HoverTool from bokeh.palettes import brewer from bokeh.models.annotations import BoxAnnotation from bokeh.layouts import gridplot import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 ''' 3.上海市人口密度、路网密度、餐饮价格和房屋情况的关系分析 ''' # 加载数据 import os os.chdir('C:\\Users\\WQQ\\Desktop\\163data\\CLASSDATA_ch06数据分析项目实战\\练习06_房价影响因素挖掘\\') data=pd.read_excel('房价总和测评.xlsx',sheetname=0,header=0) # 填充空值 data.fillna(0,inplace=True) # 数据标准化01处理 def f_01(data,col): return((data[col]-data[col].min())/(data[col].max()-data[col].min())) data['renkou01']=f_01(data,'Z') data['daolu01']=f_01(data,'道路长度') data['canyin01']=f_01(data,'人均消费_') # 计算到市中心的坐标 data['dis']=((data['lng']-353508.848122)**2+(data['lat']-3456140.926976)**2)**0.5 data01=data[['renkou01','daolu01','canyin01','dis','sell_area_']] # 去除房价为0的数据 data01=data01[data01['sell_area_']>0].reset_index() del data01['index'] # 创建绘图空间和子图 fig=plt.figure(figsize=(10,12)) plt.subplots_adjust(hspace=0.4) # 绘制房屋均价和人口密度指标的散点图 ax1=fig.add_subplot(4,1,1) plt.scatter(data01['renkou01'],data01['sell_area_'],s=2,alpha=0.3) plt.xlabel('人口密度指标') plt.ylabel('房屋均价') plt.grid() # 绘制房屋均价和道路密度指标的散点图 ax1=fig.add_subplot(4,1,2) plt.scatter(data01['daolu01'],data01['sell_area_'],s=2,alpha=0.3) plt.xlabel('道路密度指标') plt.ylabel('房屋均价') plt.grid() # 绘制房屋均价和人口密度指标的散点图 ax1=fig.add_subplot(4,1,3) plt.scatter(data01['canyin01'],data01['sell_area_'],s=2,alpha=0.3) plt.xlabel('餐饮价格密度指标') plt.ylabel('房屋均价') plt.grid() # 绘制房屋均价和离市中心距离的散点图 ax1=fig.add_subplot(4,1,4) plt.scatter(data01['dis'],data01['sell_area_'],s=2,alpha=0.3) plt.xlabel('离市中心的距离') plt.ylabel('房屋均价') plt.grid() ''' 4.按照距离市中心距离每10km,分别在此判断人口密度,路网密度,餐饮价格和房屋均价的相关程度。 ''' # 按照空间距离分别迭代计算三个指标和房屋均价的关系 # 距离空列表 dis=[] # 人口密度相关性系数空列表 rkmd_pearson=[] # 道路密度相关性系数空列表 dlmd_pearson=[] # 餐饮价格相关性系数空列表 cyjg_pearson=[] # 中心距离相关性系数空列表 dis_pearson=[] # 按照空间距离得带计算三个指标和房屋均价的关系 for distance in range(10000,70000,10000): datai=data01[data01['dis']<=distance] r_value=datai.corr().loc['sell_area_'] dis.append(distance) rkmd_pearson.append(r_value.loc['renkou01']) dlmd_pearson.append(r_value.loc['daolu01']) cyjg_pearson.append(r_value.loc['canyin01']) dis_pearson.append(r_value.loc['dis']) ''' print('距离市中心的距离小于等于%i米时;' %distance) print('数据量为%i条。' %len(datai)) print('人口密度指标为%.3f;' %r_value.loc['renkou01']) print('道路密度指标为%.3f;' %r_value.loc['daolu01']) print('餐饮价格指标为%.3f;' %r_value.loc['canyin01']) print('离市中心的距离指标为%.3f;' %r_value.loc['dis']) print('########################################') ''' ''' 绘制距离市中心的距离和三个指标的关系的折线图 ''' # 创建dataframe final=pd.DataFrame({'rkmd_pearson':rkmd_pearson,'dlmd_pearson':dlmd_pearson,'cyjg_pearson':cyjg_pearson,'dis_pearson':dis_pearson}, index=dis) # 转化数据 source=ColumnDataSource(final) # 构建hover hover = HoverTool(tooltips=[("离市中心距离", "@index"), ("人口密度相关系数", "@rkmd_pearson"), ("道路密度相关系数", "@dlmd_pearson"), ("餐饮价格相关系数", "@cyjg_pearson"), ("中心距离相关系数", "@dis_pearson")]) # 创建绘图空间 p=figure(plot_width=800, plot_height=300, title="随着市中心距离增加,不同指标相关性系数变化情况", tools=[hover,'box_select,reset,xwheel_zoom,pan,crosshair']) # 构建绘图空间 # 绘制人口密度相关系数和距离折线图 p.line(x='index',y='rkmd_pearson',source = source,line_alpha = 0.8, line_color = 'red',line_dash = [15,4],legend="人口密度相关系数") p.circle(x='index',y='rkmd_pearson',source = source, size = 8,color = 'red',alpha = 0.8,legend="人口密度相关系数") # 绘制道路密度相关系数和距离折线图 p.line(x='index',y='dlmd_pearson',source = source,line_alpha = 0.8, line_color = 'green',line_dash = [15,4],legend="道路密度相关系数") p.circle(x='index',y='dlmd_pearson',source = source, size = 8,color = 'green',alpha = 0.8,legend="道路密度相关系数") # 绘制餐饮价格相关系数和距离折线图 p.line(x='index',y='cyjg_pearson',source = source,line_alpha = 0.8, line_color = 'blue',line_dash = [15,4],legend="餐饮价格相关系数") p.circle(x='index',y='cyjg_pearson',source = source, size = 8,color = 'blue',alpha = 0.8,legend="餐饮价格相关系数") # 绘制距离相关系数和距离的折线图 p.line(x='index',y='dis_pearson',source = source,line_alpha = 0.8, line_color = 'black',line_dash = [15,4],legend="中心距离相关系数") p.circle(x='index',y='dis_pearson',source = source, size = 8,color = 'black',alpha = 0.8,legend="中心距离相关系数") p.legend.location = "center_right" show(p) print('##############################完成#########################')
从左到右分别是上海市租售比、租金和房价在上海市的空间分布,颜色越深代表租售比越高或者租金和房价越高。这里的数据剔除了空值和0值。
1. 在上海全市层面,“离市中心距离”与“房屋每平米均价”相关性最强。
2. “人口密度”及“路网密度”和“房屋每平米均价”为中等相关,其中人口密度相关性高于另外两者。
3. “餐饮价格”与“房屋每平米均价”为弱相关。
4. “房屋每平米均价”数据的离散程度却和空间距离有关 → “房屋每平米均价”越靠近市中心越离散,越远离市中心则越收敛。
5. 随着离市中心的距离越远,指标的相关性在数据上体现更明显,而这个分界线大概在20-30km处,这正是上海中心城区和郊区的分界 → 上海房价市场的“中心城区-郊区”分化特征。
6. 中心城区的房产市场对指标因素的影响更加敏锐,而郊区则更迟钝 → 越靠近市中心,影响因素越复杂。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。