163Python数据分析师课程考核项目06

163Python数据分析师课程考核项目06

房价影响因素挖掘

1、2数据清洗、整合,计算“房屋售租比”,并做初步判断

要求:

1. 将“house_rent”、“house_sell”分别读取;
2. 分别计算平方米建筑面积的月租金、每平方米建筑面积的房价;
3. 将数据按照小区名合并。
4. 计算指标
5. 绘制直方图、箱型图看“售租比”的一个数据分布情况

提示:

1. 删除缺失值;
2. 按照小区做均值分析,整理后数据大概11532条。
3. “房屋售租比”=“每平方米建筑面积的房价”/“每平方米建筑面积的月租金”
4. 直方图bins数量大于80来作图

1、 2代码
# -*- 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. 小区-均租价-均售价-经度-纬度-租售比统计列表

在这里插入图片描述

2. 租售比直方图和箱型图

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

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

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

要求:

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.售租比、租金和房价空间分布图

在这里插入图片描述从左到右分别是上海市租售比、租金和房价在上海市的空间分布,颜色越深代表租售比越高或者租金和房价越高。这里的数据剔除了空值和0值。

1.房屋均价和人口密度指标、道路密度指标、餐饮价格密度指标和距离市中心的距离的关系:

在这里插入图片描述

2. 房屋均价和人口密度指标、道路密度指标、餐饮价格密度指标和距离市中心的距离的关系:

在这里插入图片描述

3.人口、道路、餐饮和距离四个参数在不同的距离上的影响参数

在这里插入图片描述

结论

1. 在上海全市层面,“离市中心距离”与“房屋每平米均价”相关性最强。
2. “人口密度”及“路网密度”和“房屋每平米均价”为中等相关,其中人口密度相关性高于另外两者。
3. “餐饮价格”与“房屋每平米均价”为弱相关。
4. “房屋每平米均价”数据的离散程度却和空间距离有关 → “房屋每平米均价”越靠近市中心越离散,越远离市中心则越收敛。
5. 随着离市中心的距离越远,指标的相关性在数据上体现更明显,而这个分界线大概在20-30km处,这正是上海中心城区和郊区的分界 → 上海房价市场的“中心城区-郊区”分化特征。
6. 中心城区的房产市场对指标因素的影响更加敏锐,而郊区则更迟钝 → 越靠近市中心,影响因素越复杂。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值