链家二手房数据分析
2019-05-03 本文已影响3人
执小生
-
项目意义:
本文旨在分析各维度的数据,探索上海二手房整体情况及价格情况及价格的影响因素
-
本文分析的框架
(一)上海二手房整体情况的描述统计
(二)各城区房价分布;
1、各城区房价情况;
2、上海单价排名前15的小区;
3、各城区单价最高的小区;
(三)各城区房源分析;
1、各城区房源数量;
2、各城区二手房面积分布;
3、各城区在售二手房数量排名前5的小区;
(四)房价影响因素探究;
1、房价与地理位置的关系;
2、房价与户型的关系;
3、房价与楼层的关系;
4、房价与朝向的关系;
5、房价与建筑年代的关系;
0观察数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
%matplotlib inline
plt.rcParams['figure.figsize']=(10,6)
f=open(r'链家二手房.csv')
df=pd.read_csv(f)
-
原始数据:
1、数据集一共有28201行,其中“朝向”、“建筑时间”字段存在缺失值,这些缺失值将在后续分析过程中进行处理;
2、从习惯角度,将字段中文名重命名为英文;
3、“楼层”字段,需要进行数据拆分,分为两个字段;
4、“建筑时间”字段类型为subject,需要提取年份部分,并存储为timestamp类型;
# 以下数据清洗、整理过程
# 1、重命名字段
df.rename(columns={'小区名称':'village','户型':'house_type','面积':'area','区域':'district','楼层':'floorlevel','朝向':'toward',
'价格(W)':'total_price','单价(平方米)':'unit_price','建筑时间':'construction_time'},inplace=True)
# 2、“楼层”字段处理
df['floor_level']=df.floorlevel.str.extract('(\D+)/')
df['floor']=df.floorlevel.str.extract('/(.*)层')
df.drop('floorlevel',axis=1,inplace=True)
df['floor']=df['floor'].astype(float)
# 3、‘建筑时间’字段处理
df['construction_time']=df.construction_time.str.extract('(\d+)年建')
df['construction_time']=pd.to_datetime(df.construction_time,format='%Y').values.astype('datetime64[Y]')
01上海二手房整体情况的描述统计
-
上海二手房整体情况:
目前在售房源28201套。 - 面积:每套平均面积96平方,50%的房子面积在85平方之内,属于小户型;
- 单价:平均单价6万元,最高达到20万元,超过50%的房子单价在5.8万元以上,说明上海房价还是相当高;
-
总价:平均总价580万元,中位数在430万元,这是存在异常极大值的影响,拉高了房价的平均水平;
- 以上是各城区在售房源数量,其中崇明、金山、静安三个区房源数量太少,不具有统计意义,因此在进行房价分析上,将其删除。
new_df=df[~df.district.isin(['崇明','金山','静安'])]
02上海二手房单价分布情况:
sns.distplot(new_df.unit_price,bins=20)
plt.title('上海二手房单价分布情况')
- 上海二手房单价分布图形类似于正态分布,呈现中间高,两边低的形态,单价均值为6万元,大多数在3-8万之间。
- 2.1.1各城区平均单价排名:
fig,axes=plt.subplots(1,2,figsize=(16,4))
axes0,axes1=axes.flatten()
# 单价各城区单价分布箱线图
sns.boxplot(x='district',y='unit_price',data=new_df,ax=axes0)
axes0.set_title('各城区单价分布箱线图')
# 单价各城区总价分布箱线图
sns.boxplot(x='district',y='total_price',data=new_df,ax=axes1)
axes1.set_title('各城区总价分布箱线图')
plt.ylim(0,3000)
new_df.groupby('district').unit_price.mean().sort_values().plot.barh()
- 黄埔区以平均单价9万排名上海第一,接下来分别是徐汇区7.9万,长宁7.5万。平均价格在5万以下的城区有4个,分别是松江区4.2万、嘉定区4.1万、青浦区4万、奉贤区最便宜3万。
- 2.1.2各城区平均总价排名:
new_df.groupby('district').total_price.mean().sort_values().plot.barh()
- 黄埔区以平均总价1059万排名上海第一,接下来分别是长宁760万,青浦676万。
- 2.2上海单价排名前15的小区:
# 部分小区在售房源数量小于10,不具有统计意义,因此删除掉在售房源小于10套的小区
drop_village=new_df.groupby('village').count().query('area>=10').index
new_df[new_df.village.isin(drop_village)].groupby('village').mean().unit_price.sort_values(ascending=False).head(15).plot.barh()
- 由上图可知,平均单价排名前三位的小区分别是翠湖天地御苑、华润外滩九里、翠湖天地雅苑;第一名的翠湖天地御苑单价,超过了15万元,远高于排名第二的华润外滩九里近2万元
- 2.3各城区单价最高的小区:
new_df[~new_df.village.isin(drop_village)].groupby(['district','village']).mean().reset_index().groupby('district').apply(lambda x:x.sort_values('unit_price',ascending=False)[:1])
以上是各个城区单价最高的小区,长宁区单价最高的小区宏业花园达到20万,奉贤区单价最高的申亚花涧墅仅6.6万元,差异较大。
03各城区房源分析;
- 3.1各城区房源数量:
group_district=df.groupby('district')
sns.countplot(x='district',data=df)
plt.title('各城区房源数量')
- 浦东区目前在售房源数量最多,约2600套,黄浦区和奉贤区房源数量在1500套左右,静安区、金山区、崇明区房源数量极其少,其他城区房源数量相差不大,在2000套左右。
- 3.2各城区二手房面积分布
district_area_rank=group_district.mean().sort_values('area',ascending=False).reset_index()
plt.bar(district_area_rank.district,district_area_rank.area)
plt.title('各城区房源平均面积')
1、青浦区平均面积远大于其他其他城区,再对比不同城区平均单价,青浦区的单价较低39898元,故分析可能原因为:青浦区位于上海的郊区,属于新开发地区,土地资源相对于市中心来讲相对宽裕一些,再加上价格便宜,所以开发商会选择修建更大面积的房子。
2、大多数城区平均面积在[80,110]之间。
- 3.3各城区在售二手房数量排名前三的小区。
new_df.groupby(['district','village']).count().reset_index().groupby('district').apply(lambda x:x.sort_values('area',ascending=False)[:3])
04房价影响因素探究
- 4.1房价与地理位置的关系:
new_df.groupby('district').mean().unit_price.sort_values(ascending=False).plot.bar()
plt.title('房价与不同地理位置的关系')
- 不同城区的房价显然存在一定的差异,平均单价最高的是黄浦区9万,最低的是奉贤区3万。
- 4.2房价与户型的关系:
fig,axes=plt.subplots(2,1,figsize=(12,8),sharex=True)
axes0,axes1=axes.flatten()
count_house_type=new_df.groupby('house_type').count().query('area>100')
count_house_type.area.plot.bar(ax=axes0)
axes0.set_title('不同户型的房源数量')
new_df[new_df.house_type.isin(count_house_type.index)].groupby('house_type').unit_price.mean().plot.bar()
axes1.set_title('不同户型的平均单价')
- 市场上以2室1厅、2室2厅、3室2厅的户型房子数量居多,这三种户型的房子单价处于整体单价的平均线水平;而1室2厅、2室0厅、1室0厅的房子,由于房子面积小,总价不会太贵,相对来说经济压力负担小一些,从而受到很多人的喜欢,并且市场上这种户型的房子数量相对较少,在这两个因素影响下导致此类小户型的房子单价相对其他大户型的较高,1室2厅的房子甚至平均单价高达7.3万。
- 4.3房价与楼层的关系
# 过滤楼层存在缺失值的行
group_floor=new_df[new_df.floor.isin((new_df.groupby('floor').area.count()>100).index)].groupby('floor')
fig,axes=plt.subplots(2,1,figsize=(16,8))
axes0,axes1=axes.flatten()
group_floor.unit_price.count().plot.bar(ax=axes0)
axes0.set_title('不同楼层的房源数量')
group_floor.unit_price.mean().plot.bar(ax=axes1)
axes1.set_title('不同楼层的平均单价')
- 从以上图形可以看出,市场上6楼的房子数量最多,其单价在邻近低楼层中最高,约6.8万;从20层到38层,随着楼层的增加,其单价也在上涨;之后单价随楼层的变化波动很大,应该是由于40层之后,数据样本数量比较少,容易产生较大的误差,因此40层之后的楼层单价与楼层的关系不进行研究。
- 4.4房价与朝向的关系:
new_df['toward']=new_df.toward.str.replace("\(进门\) ",'朝')
toward_list=list(['朝东','朝东北','朝东南','朝北','朝西北','朝西','朝西南','朝南'])
drop_toward=new_df[new_df.toward.isin(toward_list)]
group_toward=drop_toward.groupby('toward')
fig,axes=plt.subplots(2,1,figsize=(12,8))
axes0,axes1=axes.flatten()
group_toward.unit_price.count().plot.bar(ax=axes0)
axes0.set_title('不同朝向的房源数量')
group_toward.unit_price.mean().plot.bar(ax=axes1)
axes1.set_title('不同朝向的房子单价')
- 由上图可知,朝向对房价是有一定影响的,其中朝向南面(东南、西南、南)的房子单价会稍高一些,且朝南的房子数量远多于其他朝向的,这符合我国的一般房屋建筑朝向偏好,毕竟朝向南面的房屋采光好,而且在沿海地带,夏天有东南风,房子会比较通风;
- 4.5房价与建筑年代的关系:
groupby_time=new_df.groupby('construction_time')
fig,axes=plt.subplots(2,1,figsize=(12,8))
axes0,axes1=axes.flatten()
groupby_time.unit_price.count().plot(ax=axes0)
axes0.set_title('不同年代的房子数量')
groupby_time.unit_price.mean().plot(ax=axes1)
axes0.set_title('不同年代的房子单价')
- 1、在改革开放之后,上海房子建筑数量逐渐上升,尤其在1995年左右,上海房子快速增长;同样2005年,也呈现快速增长。所以说在1995年和2005年是上海房屋修建的高峰期
- 2、建筑年代与房子总价平均值、单价平均值的变化趋势基本一样,在1950年代前的房子其总价和单价都高于在后期建筑的房子,分析原因是:在1950前建筑的房子基本都处于中心位置,地位位置非常好,所以导致价格比较贵。
- 3、在2015后之后建筑的房子也呈现上升的趋势,这与目前房价不断升高的趋势是吻合的。
-
本文总结:
1、本文首先对上海二手房价格、数量及各区域房源分布进行分析,得出上海房价平均在6万元左右,其中黄埔区以平均单价9万排名上海第一,紧接是徐汇区7.9万,长宁7.5万,而奉贤区最上海房价最便宜的区域,平均单价仅3万;同时,也发现上海房屋面积平均为96平方米,其中青浦区由于属于郊区,土地资源相对充裕且单价不高,其平均房屋面积为157平方,远大于其他城区;
2、接着,通过二手房数据的区域、户型、楼层、朝向及建筑年代特征进行分析,探索各因素对房价的影响。结果表明,不同的区域、不同的户型、不同的楼层、不同的朝向和不同的建筑年代都会使得房子单价不一样,楼层在6层的低楼层房子、朝向南面较为受欢迎,房价也是相对较贵。