用數(shù)據(jù)說話:北京房?jī)r(jià)數(shù)據(jù)背后的數(shù)據(jù)
從2014年對(duì)樓市的普遍唱衰,到2015年的價(jià)格回暖,到底發(fā)生了怎樣的改變?本文就嘗試通過大數(shù)據(jù)來和豐富的圖表,為大家展現(xiàn)數(shù)據(jù)背后的數(shù)據(jù)。
- 數(shù)據(jù)采集采用筆者用C#開發(fā)的爬蟲工具。
- 數(shù)據(jù)清洗ETL采用了筆者開發(fā)的工具軟件。
- 數(shù)據(jù)分析采用ipython notebook和pandas
- 可視化使用了matplotlib和seaborn.
- 熱力圖使用了百度地圖API, 按經(jīng)緯度0.01度為一個(gè)子區(qū)域,計(jì)算其中的平均值作為當(dāng)前區(qū)域的房?jī)r(jià)/二手房數(shù)量。
至于搭建ipython notebook和安裝相應(yīng)類庫的操作,以及各個(gè)類庫使用方法,可參考相應(yīng)的教程。
數(shù)據(jù)來源
這些數(shù)據(jù)是筆者在2014年10月年和2015年10月份兩次,在鏈家官網(wǎng)上抓取的在售二手房數(shù)據(jù),2014年約為64000條,2015年總計(jì)約7W條。數(shù)據(jù)源可能會(huì)有偏差,因此結(jié)論僅供參考。附件有前1W條樣例數(shù)據(jù),可供下載。
首先我們導(dǎo)入所需的類庫:
# -*- coding:utf-8 -*- import mongo; import pandas as pd; import csv; from pandas import DataFrame,Series
- # -*- coding:utf-8 -*-
- import mongo;
- import pandas as pd;
- import csv;
- from pandas import DataFrame,Series
- 之后加載所需的數(shù)據(jù):
- table2014 = pd.read_table("LJ2014.txt",encoding='utf-8',engine='python',quoting=csv.QUOTE_NONE)
- table2015 = pd.read_table("LJ2015.txt",encoding='utf-8',engine='python',quoting=csv.QUOTE_NONE)
- table2014[u'小區(qū)名']=table2014[u'小區(qū)名'].map(lambda x:unicode(x).strip("'"))
- table2014[u'區(qū)縣']=table2014[u'區(qū)縣'].map(lambda x:unicode(x).strip("'"))
- table2014[u'樓名']=table2014[u'樓名'].map(lambda x:unicode(x).strip("'"))
- year= table2014[u'年份'].map(lambda x:str(x).split('/')[0])
- table2014[u'小區(qū)']=table2014[u'位置'].map(lambda x:unicode(x).strip("'"))
之后加載所需的數(shù)據(jù):
table2014 = pd.read_table("LJ2014.txt",encoding='utf-8',engine='python',quoting=csv.QUOTE_NONE) table2015 = pd.read_table("LJ2015.txt",encoding='utf-8',engine='python',quoting=csv.QUOTE_NONE)
table2014[u'小區(qū)名']=table2014[u'小區(qū)名'].map(lambda x:unicode(x).strip("'")) table2014[u'區(qū)縣']=table2014[u'區(qū)縣'].map(lambda x:unicode(x).strip("'")) table2014[u'樓名']=table2014[u'樓名'].map(lambda x:unicode(x).strip("'")) year= table2014[u'年份'].map(lambda x:str(x).split('/')[0]) table2014[u'小區(qū)']=table2014[u'位置'].map(lambda x:unicode(x).strip("'"))
瘋長(zhǎng)的房?jī)r(jià)
從1992年到2015年,北京的房?jī)r(jià)經(jīng)歷了怎樣的瘋狂?可以查看下面的圖表。
可以看到,1992年到2002年,呈現(xiàn)一個(gè)非常穩(wěn)定的狀態(tài)。從2008年起,北京的房?jī)r(jià)如同火箭一般上竄。
有意思的是,如果按照建造時(shí)間來繪制圖表,會(huì)發(fā)現(xiàn)在2000年和2004年左右,達(dá)到高峰。在6W套二手房中,2000年總共建造了7697套,占比百分之11.21%。
- xcqu2014=table2014.groupby(by=u'位置')
- p=year.value_counts();
- pp=p.sort_index()[50:-1]
- p.plot(title=u'北京各年建造房屋數(shù)量變化')
到了2014年,北京各個(gè)區(qū)縣的二手房?jī)r(jià)格如下圖:
- areag=table2014.groupby(by=u'區(qū)縣')
- areag[u'價(jià)格'].mean().order(ascending=True).plot(kind='barh',title=u'各城區(qū)的二手房平均房?jī)r(jià)')
西城區(qū)和東城區(qū)的平均價(jià)格在五萬五左右,之所以沒有達(dá)到網(wǎng)上其他數(shù)據(jù)所提到的喪心病狂的9萬,是因?yàn)槲覀兎治龅氖嵌址?。目前二環(huán)內(nèi)新樓盤的數(shù)量極少,幾乎沒有討論的價(jià)值。
我們將房?jī)r(jià)以熱力圖方式繪制在地圖上,就會(huì)非常直觀:
顏色越深,代表其價(jià)格越高。除了西城,東城這些老城區(qū),中關(guān)村(包含大量的學(xué)區(qū)房)和國(guó)貿(mào)(北京CBD)都價(jià)格高企。
如果我們改變縮放等級(jí),進(jìn)一步縮小地圖范圍,可以看到最貴的房子,集中在西單,南鑼鼓巷,國(guó)貿(mào),以及北新橋地區(qū)。
這些最貴小區(qū)的房?jī)r(jià)有多貴呢?下面列出排名前十的十個(gè)小區(qū)的價(jià)格:
xcqu2014[u'價(jià)格'].mean().order(ascending=False)[1:10].plot(kind='barh',title=u'價(jià)格最高的十個(gè)小區(qū)的平均房?jī)r(jià)')
文華胡同的位置在哪里呢?筆者專門去搜索了一下。這個(gè)超牛無比,價(jià)格在33萬/平的文華胡同在靠近鬧市口大街的西單商圈。
更夸張的是,兩套房子都是平房,面積分別是12平和15平,其中一套還是1949年建的。中介給出的宣傳標(biāo)語是,最牛實(shí)驗(yàn)二小學(xué)區(qū)房,搶搶搶!這么小的面積,估計(jì)是四合院的廂房改造的吧?,F(xiàn)在官網(wǎng)上已經(jīng)下架。
什么樣的房子最多?
我們先看,什么類型的樓房最多,下面給出了樓房總體高度的比例??梢钥吹?,二手房中,六層是最多的。國(guó)家規(guī)定,七層就要裝電梯了。因此在2000年以前,大部分的居民樓都是6層。
lc=lc=table2014.groupby(by=u'樓層').size(); lc.order(ascending=False)[:20].plot(kind='barh',title=u'樓高比例')
再看看不同面積的房子所占總數(shù)的比例。我們?nèi)∶娣e為40-140平米的房子,進(jìn)行了統(tǒng)計(jì)分析,結(jié)論如下圖:
size=table2014.groupby(by=u'面積').size(); import re; takenum= re.compile('\d+'); size=size[size.index.map(lambda x:takenum.match(x) is not None)] size.index=size.index.map(lambda x:int(x)) size.order(ascending=False)[:100].sort_index().plot(kind='line',title=u'房型面積和對(duì)應(yīng)比例')
首先選出面積值不為空且為數(shù)字的所有行,之后將其轉(zhuǎn)換為int類型,后對(duì)其進(jìn)行排序并繪圖。
可見,60平的一室一廳或兩室一廳最為常見。90平米的三居和兩居也較多。
我們?cè)賹?duì)二手房存量繪制熱力圖:
可以看到,二手房主要集中在天通苑,北苑,望京,十里堡和通州。這基本上與北京2004年發(fā)布的《北京市城市總體規(guī)劃2004-2020》的內(nèi)容相符:
很有意思的是,綠色的區(qū)域相當(dāng)空曠,比如筆者目前所在的三元橋地區(qū),和酒仙橋之間隔了好大一片荒地,晚上夜跑時(shí)荒無人煙。
2014年到2015年的房?jī)r(jià)變化
下面是剛需讀者最關(guān)心的內(nèi)容,2014年到2015年的北京房?jī)r(jià),經(jīng)歷了怎樣的變化?眾所周知,2014年房?jī)r(jià)走低,整體唱衰,甚至有商家打出了降價(jià)6000元/平的廣告來推銷房子。2015年,降準(zhǔn)降息政策出爐,公積金貸款比例提高,北京房?jī)r(jià)回暖,我們知道肯定漲價(jià)了。但到底漲了多少呢?
這部分的代碼多一些,選取價(jià)格少于10萬,面積大于四十平米的房子,以減少錯(cuò)誤的數(shù)據(jù)。求出2014年和2015年小區(qū)的交集,構(gòu)造change結(jié)構(gòu),里面保存了每個(gè)小區(qū)的房子數(shù)量,2014年和2015年的平均價(jià)格。
- table2014table2014= table2014[(table2014[u'價(jià)格']<100000) & (table2014[u'面積']>40)]
- table2015table2015= table2015[(table2015[u'單價(jià)']<100000) & (table2015[u'面積']>40)]
- xcqu2014=table2014.groupby(by=u'位置')
- table2015[u'面積']= np.round(table2015[u'總價(jià)']*10000/table2015[u'單價(jià)'])
- xcqu2015=table2015.groupby(by=u'小區(qū)')
- p2015=xcqu2015.mean()[u'單價(jià)']
- p2014=xcqu2014.mean()[u'價(jià)格']
- xcqumonunt2014=xcqu2014.size()
- xcqumerge=p2014.index&p2015.index
- change= DataFrame({'2014': p2014[xcqumerge].values,'2015':p2015[xcqumerge].values,'mount2014':xcqumonunt2014[xcqumerge],'mount2015':xcqumonunt2015[xcqumerge]})
- change['diff']=change['2015']-change['2014']
- change['percent']= np.round( change['diff']/change['2014']*100.0)
我們按照2014和2015年價(jià)格增減的百分比,繪制出下面的房?jī)r(jià)變化數(shù)量比例圖??梢钥吹?,房?jī)r(jià)變化基本呈現(xiàn)正態(tài)分布趨勢(shì)。但均值不在0點(diǎn),靠近5%左右,整體右移:
- change[(change.percent>-30) & (change.percent<50)].groupby(by='percent').size().plot(title=u'不同漲跌幅度房子所占的數(shù)量')
經(jīng)過統(tǒng)計(jì),2014年的平均房?jī)r(jià)為40125/平,2015年為42535/平。漲價(jià)比例5.64%。也就是說,一套三百萬的房子,平均漲了16萬左右。
- change[(change.percent>-30) & (change.percent<50)].mean(by='percent')
- 2014 40054.083797
- 2015 42400.225776
- mount2014 15.352119
- mount2015 13.466281
- diff 2346.141979
- percent 5.508430
我們列出10萬元以下單價(jià),2015年小區(qū)內(nèi)二手房數(shù)量超過20套的漲價(jià)排名前十的小區(qū):
- change[change.mount2015>20].sort(columns='percent',ascending=False)[:10]
上地房?jī)r(jià)怎么漲了這么多?即使在北京,7萬8的價(jià)格都已經(jīng)是豪宅,可是上地的房子,一般都是普通的住宅。
原因還是學(xué)區(qū)房,海淀區(qū)教改使得這邊的房子變化極大。 上地東里小區(qū)內(nèi)建有上地實(shí)驗(yàn)小學(xué),該小學(xué)可直升一零一中學(xué)上地分校,一零一中學(xué)上地分校位于上地西里北側(cè),就是這9年直升的誘惑導(dǎo)致該區(qū)域房?jī)r(jià)直線攀升??蓱z天下父母心!
當(dāng)然,有漲價(jià)就有降價(jià):基本上,降價(jià)的小區(qū)都在非中心城區(qū),例如櫻花園就在順義。
- change[change.mount2015>20].sort(columns='percent',ascending=True)[:10]
結(jié)論
5%的漲幅,已經(jīng)說明2015年比2014年價(jià)格回暖不少。也有少部分郊區(qū)小區(qū)降價(jià)。當(dāng)然,這種漲幅和之前火箭般的漲價(jià)不可同日而語??梢钥隙ǖ氖牵癖本┻@樣的城市,房子幾乎是不可能大跌的。但未來的事情,誰知道呢?
安得廣廈千萬間,大庇天下寒士俱歡顏!
文章已經(jīng)很長(zhǎng),因此沒有將更多的內(nèi)容囊括其中。我們還做了以下的事情:
- 分析不同小區(qū)漲降價(jià)的原因并將其可視化到地圖上。
- 同一個(gè)小區(qū)中,不同的房子價(jià)格差別很大,甚至能差兩萬元。為什么會(huì)出現(xiàn)這種情況?
- 根據(jù)房子周邊的學(xué)校,醫(yī)院,商場(chǎng)等場(chǎng)所,計(jì)算房子的附加價(jià)值。
- 嘗試預(yù)測(cè)不同小區(qū)未來的房?jī)r(jià)趨勢(shì)。
附錄:
鏈家在去年有約7W條數(shù)據(jù),今年的出售二手房已經(jīng)達(dá)到10W套,但是這些房源里有多少水分呢?根據(jù)2014年的數(shù)據(jù)按照編號(hào)檢查一下重復(fù):一萬兩千多套房子出現(xiàn)了兩次,將近五千套房子出現(xiàn)過三次,甚至有一套房子出現(xiàn)過八次。其中水分可想而知。
同時(shí),2014年的網(wǎng)頁數(shù)據(jù)還會(huì)提供地理坐標(biāo)信息,2015年就不存在了,所以文中涉及到地理信息的圖表都是2014年的。另外,雖然對(duì)房子的位置描述非常詳細(xì),但中介不會(huì)告訴你這是幾號(hào)樓幾層。僅僅提供了樓房的總層高。原因不言自明。
同樣,數(shù)據(jù)的準(zhǔn)確性也有問題。很多房子價(jià)格都是1萬,2萬,明顯是隨意標(biāo)的。也有一部分價(jià)格高的離譜,如88萬/平。這些數(shù)據(jù)在處理前都已經(jīng)篩掉。以免干擾分析結(jié)果。