利用Python进行King County房价数据分析

  • Post author:
  • Post category:python


本次又从kaggle上淘来了

King County

的房价数据,结合近期学习的Python分析工具,对影响房价的可能因素进行分析。


  • 提出问题

随着国家对房产市场的宏观调控越来越严格,此前一路高歌猛进的房产市场也随之开始转冷,那么除了政策因素,还有哪些因素会影响房价呢?

本次我们以

King County

的房价数据为参考依据,对房价可能存在的影响因素进行分析:



房价与环境配套有哪些关系?

分别从

海滨区域、设施等级、房屋评级等级

进行分析(评级标准为当地自己的评级系统所产生,本次分析将直接引用);



房价与房间配置有哪些关系?

分别从

卧室数、洗浴室数、楼层

进行分析;



房价与得房率的关系?


得房率=使用面积/建筑面积

由于2015年有房主自行翻修,可能存在扩大使用面积情况,故此处

使用面积



2015年使用面积



房价与房龄的关系?


房龄=2015-建成时间

数据为2015年上传,故按照2015为时间起始点计算;



房屋实看数


房屋实看数=房屋被实际查看的数量;

房屋查看的数量一定程度上可反映出用户对于房价的接受程度;


  • 理解数据

由于下载的数据格式为CSV格式,故直接本地数据upload至Jupyter notebook;

#读取CSV,均转为str格式数据,后期在进行其他格式数据转换
import pandas as pd
import numpy as np
priceDf=pd.read_csv('kc_house_data.csv',dtype='object')

#打印头5行查看数据
priceDf.head()


  • 数据清洗


1)选择子集

#选择子集
subpriceDf=priceDf.loc[:,'id':'grade']


2)重命名列名

#将需要使用的列名重新命名
calNameDict={'date':'日期',
             'price':'房价',
             'bedrooms':'卧室数',
             'bathrooms':'洗浴室数',
             'sqft_living':'使用面积',
             'sqft_lot':'建筑面积',
             'floors':'楼层',
             'waterfront':'海滨区',
             'view':'实看数','grade':'房屋等级',
             'yr_built':'建成年份',
             'yr_renovated':'翻修年份',
             'zipcode':'邮编',
             'sqft_living15':'使用面积(2015)',
             'condition':'条件设施',
             'sqft_lot15':'建筑面积(2015)',
             'id':'编号',
             'sqft_above':'地上建筑面积',
             'sqft_basement':'地下建筑面积',
             'lat':'纬度',
             'long':'经度'}
priceDf.rename(columns=calNameDict,inplace=True)


3)缺失值处理(仅删除)

#处理缺失值(本次仅做删除处理)
priceDf=priceDf.dropna(subset=['卧室数','洗浴室数','楼层','海滨区','条件设施','房屋等级','使用面积(2015)','建筑面积(2015)','建成年份','实看数'],how='any')


4)数据类型转化

#将数据中属于浮点型的数据进行转化
priceDf['洗浴室数']=priceDf['洗浴室数'].astype('float')
priceDf['lat']=priceDf['lat'].astype('float')
priceDf['long']=priceDf['long'].astype('float')
priceDf['使用面积(2015)']=priceDf['使用面积(2015)'].astype('float')
priceDf['建筑面积(2015)']=priceDf['建筑面积(2015)'].astype('float')

#打印出结果,查看是否更改彻底
print(priceDf.dtypes)

#将数据中日期的字符串形式转化
priceDf.loc[:,'日期']=pd.to_datetime(priceDf.loc[:,'日期'],
                                  format='%Y-%m-%d',
                                  errors='coerce')


  • 构建模型


1)房价与环境配套的相关性

此处仅对’房价’,’海滨区’,’条件设施’,’房屋等级’进行展示,并查看其相关性;

#去重
kpi1_Df=priceDf.drop_duplicates(
    subset=['房价','海滨区','条件设施','房屋等级'])

#结果按'房价'倒叙排列
kpi1_Df=kpi1_Df.sort_values(by='房价',
                           ascending=False)

#重新命名编号列
kpi1_Df=kpi1_Df.reset_index(drop=True)

#打印出结果的前十行数据
kpi1_Df.head(10)


2)房价与房间配置的相关性

方法与模型1)类似,此处不再赘述,详见代码;

#去重
kpi2_Df=priceDf.drop_duplicates(
    subset=['房价','卧室数','洗浴室数','楼层'])

#结果按'房价'倒叙排列
kpi2_Df=kpi2_Df.sort_values(by='房价',
                           ascending=False)

#重新命名编号列
kpi2_Df=kpi2_Df.reset_index(drop=True)

#打印出结果的前十行数据
kpi2_Df.head(10)


3)得房率

#统计建筑面积&使用面积之和(以2015年为基准)
totalAreaF1=priceDf.loc[:,'建筑面积(2015)'].sum()
totalAreaF2=priceDf.loc[:,'使用面积(2015)'].sum()
kpi3_Df=totalAreaF2/totalAreaF1
print('得房率=',kpi3_Df)

得房率= 0.15558283207827878;


4)房价与房龄的相关性

#按照建成年代进行分组,并查看对应房价的平均值
builtyrF=priceDf['房价'].groupby(priceDf['建成年份']).mean()

#按金额倒叙排序,并限制展示前十房源
builtyrF=builtyrF.sort_values(ascending=False)
builtyrF.head(10)


5)房屋实看数

实际看房数一定程度上说明了用户的偏好情况;

#按照实看数进行分组,并查看对应房价的平均值
viewF=priceDf['房价'].groupby(priceDf['实看数']).mean()

#按金额进行正序排序
viewF=viewF.sort_values(ascending=False)
viewF.head(10)


  • 小结


1)房价与环境配套的相关性

King County的高价房源都集中于海滨区域,且评分都较高,最高价高达7700000美金。


2)房价与房间配置的相关性

高价房源的建筑面积较高,其中价格前十的房源大部分拥有5-6个卧室或洗浴室,而楼层偏底层,大部分为2层建筑,猜测此部分房源可能为海滨区的别墅住宅;

房源价格与卧室数、洗浴室数以及建筑面积成正相关的关系。


3)得房率

整体得房率≈ 0.16,可用面积相对较低,体现该地区房源的占地面积较大,购买房源或可拥有大面积院落;


4)房价与房龄的相关性

房源价格前十的房龄,主要集中于两个区间:90年代初期与2015年(取数时间近期);

有历史的房源和新建成的房源,一定程度上可以卖的上好价钱。


5)房屋实看数

房源实看数最高为4次,此类房源的平均价格为1463711美金;

高房价房源的实看数均较高,看房行为并不能代表最终成交,具体成交数据还有待进一步挖掘。



版权声明:本文为w17688977481原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。