链家二手房数据分析

  • 项目意义:
    本文旨在分析各维度的数据,探索上海二手房整体情况及价格情况及价格的影响因素
  • 本文分析的框架
    (一)上海二手房整体情况的描述统计
    (二)各城区房价分布;
    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层的低楼层房子、朝向南面较为受欢迎,房价也是相对较贵。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容