房价影响因素挖掘

作业要求:

1、数据清洗、整合

要求:
①将“house_rent”、“house_sell”分别读取
②分别计算平方米建筑面积的月租金、每平方米建筑面积的房价
③将数据按照小区名合并

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
import os
os.chdir('C:/Users/Administrator/Desktop/项目10房价影响因素挖掘')

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['rent_area'] = df_rent['price']/df_rent['area']
#按照小区做均值分析
data_rent = df_rent[['community','rent_area','lng','lat']].groupby(by='community').mean()
data_sell = df_sell[['property_name','average_price','lng','lat']].groupby(by='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','rent_area','average_price','lng_x','lat_x']]
data = data.rename(columns = {'average_price':'sell_area','lng_x':'lng','lat_x':'lat'})
2、计算“房屋售租比”,并做初步判断

要求:
① 计算指标
② 绘制直方图、箱型图看“售租比”的一个数据分布情况
提示:
① “房屋售租比”=“每平方米建筑面积的房价”/“每平方米建筑面积的月租金”
② 直方图bins数量大于80来作图
** 一个房子,100平,2万单价 → 2000000万,首付600000,贷款1400000
** 租金 8800,20000/(8800/100)

#计算房屋售租比
data['sell_rent'] = data['sell_area'] / data['rent_area']
print('上海房屋租售比的中位数为%i个月' % data['sell_rent'].median())

#绘制直方图
data['sell_rent'].plot.hist(bins=100,stacked=True,color='green',
    alpha=0.6,grid=True,figsize=(10,4),edgecolor='black')
plt.title('房屋售租比-直方图')

#绘制箱型图
color = dict(boxes='DarkGreen',whiskers='DarkOrange',medians='DarkBlue',caps='Gray')
#boxes:箱线
#whiskers:分位数与error bar横线之间竖线的颜色
#medians:中位数线的颜色
#caps:error bar横线颜色
data['sell_rent'].plot.box(vert=False,grid=True,color=color,figsize=(10,4))
plt.title('房屋售租比-箱型图')

在这里插入图片描述
在这里插入图片描述

3、上海市人口密度、路网密度、餐饮价格和“房屋每平米均价”是否有关系呢?

要求:
① 首先,导出整理好的数据,并qgis中绘制空间格网图,查看房屋每平米均价、房屋每平米租金及售租比数据的空间分布
② 第二,空间统计,分别按照格网对人口密度、路网密度、餐饮价格进行指标统计并标准化
③ 第三,加载上海中心点point空间数据,计算每个网格到市中心距离
④ 第四,将空间格网的“房屋每平米均价”按照距市中心的距离排序,并制作散点图,看看能否挖掘出什么信息
*** 这里市中心点坐标为:lng-353508.848122,lat-3456140.926976 (投影坐标系)

空间分析步骤:
1.加载数据net_population.shp,cy.shp,road.shp
2.加载文件data.csv,另存为datapoint.shp
3.计算线条总长,输出shape文件net01
4.输入多边形矢量net01,输入点矢量图层cy,输入要聚合的矢量点图层属性-人均消费,采用均值统计方法,计算多边形内点的数目,输出shape文件net02
5.输入多边形矢量net02,输入点矢量图层datapoint,输入要聚合的矢量点图层,计算多边形内点的数目,输出shape文件net03

导出整理好的数据:

data.to_csv('data.csv')

房价空间分布
租金空间分布
售租比空间分布

data3 = pd.read_csv('result.csv',engine='python')
data3.fillna(0,inplace=True)

#创建函数进行指标统计并标准化
def f1(data,col):
    return (data[col]-data[col].min())/(data[col].max()-data[col].min())

data3['人口密度指标'] = f1(data3,'Z')
data3['路网密度指标'] = f1(data3,'长度')
data3['餐饮价格指标'] = f1(data3,'人均消费_')

#计算离市中心距离
data3['离市中心距离'] = ((data3['lng']-353508.848122)**2+(data3['lat']-3456140.926976)**2)**0.5
data3_test = data3[['人口密度指标','路网密度指标','餐饮价格指标','sell_area_','离市中心距离']]
#去除售租比为0的数据
data3_test = data3_test[data3_test['sell_area_']>0].reset_index()
del data3_test['index']

plt.figure(figsize=(10,4))
plt.scatter(data3_test['人口密度指标'],data3_test['sell_area_'],s=2,alpha=0.5)
plt.xlabel('人口密度指标')
plt.ylabel('房屋每平米均价')
plt.grid()

plt.figure(figsize=(10,4))
plt.scatter(data3_test['路网密度指标'],data3_test['sell_area_'],s=2,alpha=0.5)
plt.xlabel('路网密度指标')
plt.ylabel('房屋每平米均价')
plt.grid()

plt.figure(figsize=(10,4))
plt.scatter(data3_test['餐饮价格指标'],data3_test['sell_area_'],s=2,alpha=0.5)
plt.xlabel('餐饮价格指标')
plt.ylabel('房屋每平米均价')
plt.grid()

plt.figure(figsize=(10,4))
plt.scatter(data3_test['离市中心距离'],data3_test['sell_area_'],s=3,alpha=0.5,color='red')
plt.xlabel('离市中心距离')
plt.ylabel('房屋每平米均价')
plt.grid()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:

① 在上海全市层面,“离市中心距离”与“房屋每平米均价”相关性最强
② “人口密度”及“路网密度”和“房屋每平米均价”为中等相关
③ “餐饮价格”与“房屋每平米均价”为弱相关
④ “房屋每平米均价”数据的离散程度却和空间距离有关 → “房屋每平米均价”越靠近市中心越离散,越远离市中心则越收敛

4、按照离市中心距离每10km,分别再次判断人口密度、路网密度、餐饮价格和“房屋每平米均价”的相关程度

要求:
① 按照空间距离分别迭代计算三指标和“房屋每平米均价”的关系
② 绘制折线图查看:随着市中心距离增加,不同指标相关系系数变化情况
*** 建议用bokeh制图

data3_test.corr().loc['sell_area_']
人口密度指标        0.502724
路网密度指标        0.449742
餐饮价格指标        0.184749
sell_area_         1.000000
离市中心距离       -0.735211

dis = []
rkmd_person = []
lwmd_person = []
cyjg_person = []
zxjl_person = []

for distance in range(10000,70000,10000):
    datai = data3_test[data3_test['离市中心距离'] <= distance]
    r_value = datai.corr().loc['sell_area_']
    dis.append(distance)
    rkmd_person.append(r_value.loc['人口密度指标'])
    lwmd_person.append(r_value.loc['路网密度指标'])
    cyjg_person.append(r_value.loc['餐饮价格指标'])
    zxjl_person.append(r_value.loc['离市中心距离'])
    print('离市中心距离小于等于%i米时:' % distance)
    print('数据量为%i条' % len(datai))   
    print('人口密度指标相关性系数为%.3f' % r_value.loc['人口密度指标'])
    print('路网密度指标相关性系数为%.3f' % r_value.loc['路网密度指标'])
    print('餐饮价格指标相关性系数为%.3f' % r_value.loc['餐饮价格指标'])   
    print('离市中心距离相关性系数为%.3f' % r_value.loc['离市中心距离'])

离市中心距离小于等于10000米时:
数据量为294条
人口密度指标相关性系数为0.070
路网密度指标相关性系数为-0.091
餐饮价格指标相关性系数为0.125
离市中心距离相关性系数为-0.493

离市中心距离小于等于20000米时:
数据量为795条
人口密度指标相关性系数为0.371
路网密度指标相关性系数为0.195
餐饮价格指标相关性系数为0.160
离市中心距离相关性系数为-0.596

离市中心距离小于等于30000米时:
数据量为1133条
人口密度指标相关性系数为0.494
路网密度指标相关性系数为0.378
餐饮价格指标相关性系数为0.164
离市中心距离相关性系数为-0.713

离市中心距离小于等于40000米时:
数据量为1328条
人口密度指标相关性系数为0.463
路网密度指标相关性系数为0.412
餐饮价格指标相关性系数为0.172
离市中心距离相关性系数为-0.731

离市中心距离小于等于50000米时:
数据量为1389条
人口密度指标相关性系数为0.490
路网密度指标相关性系数为0.441
餐饮价格指标相关性系数为0.184
离市中心距离相关性系数为-0.743

离市中心距离小于等于60000米时:
数据量为1431条
人口密度指标相关性系数为0.503
路网密度指标相关性系数为0.450
餐饮价格指标相关性系数为0.185
离市中心距离相关性系数为-0.735

df3_result = pd.DataFrame({'cyjg_person':cyjg_person,
                          'lwmd_person':lwmd_person,
                          'rkmd_person':rkmd_person,
                          'zxjl_person':zxjl_person},
                          index = dis)    
    
    
from bokeh.plotting import show,figure,output_file  
from bokeh.models import ColumnDataSource,HoverTool

source = ColumnDataSource(df3_result)

hover = HoverTool(tooltips = [('离市中心距离','@index'),
                              ('人口密度相关系数','@rkmd_person'),
                              ('路网密度相关系数','@lwmd_person'),
                              ('餐饮价格相关系数','@cyjg_person'),
                              ('中心距离相关系数','@zxjl_person')])
output_file('不同指标相关性系数变化情况.html')
p = figure(plot_width=800,plot_height=350,
         title = '随着市中心距离增加,不同指标相关性系数变化情况',
         tools = [hover,'box_select,reset,xwheel_zoom,pan,crosshair'])

p.line(x='index',y='rkmd_person',source=source,
       line_alpha=0.8,line_color='green',line_dash=[15,4],
       legend='人口密度相关系数')
p.circle(x='index',y='rkmd_person',source=source,
         size=8,color='green',alpha=0.8,
         legend='人口密度相关系数')

p.line(x='index',y='lwmd_person',source=source,
       line_alpha=0.8,line_color='blue',line_dash=[15,4],
       legend='路网密度相关系数')
p.circle(x='index',y='lwmd_person',source=source,
         size=8,color='blue',alpha=0.8,
         legend='路网密度相关系数')

p.line(x='index',y='cyjg_person',source=source,
       line_alpha=0.8,line_color='black',line_dash=[15,4],
       legend='餐饮价格相关系数')
p.circle(x='index',y='cyjg_person',source=source,
         size=8,color='black',alpha=0.8,
         legend='餐饮价格相关系数')

p.line(x='index',y='zxjl_person',source=source,
       line_alpha=0.8,line_color='red',line_dash=[15,4],
       legend='中心距离相关系数')
p.circle(x='index',y='zxjl_person',source=source,
         size=8,color='red',alpha=0.8,
         legend='中心距离相关系数')

p.legend.location = 'center_right'
show(p)
结论:

① “人口密度”、“道路密度”、“离市中心距离”和“房屋均价”有着明显的相关性,而“餐饮价格”和“房屋均价”相关性较弱
② 随着离市中心的距离越远,指标的相关性在数据上体现更明显,而这个分界线大概在20-30km处,这正是上海中心城区和郊区的分界 → 上海房价市场的“中心城区-郊区”分化特征
③ 中心城区的房产市场对指标因素的影响更加敏锐,而郊区则更迟钝 → 越靠近市中心,影响因素越复杂

在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值