用資料說話:北京房價資料背後的資料

沙漠之鷹發表於2015-11-04

從2014年對樓市的普遍唱衰,到2015年的價格回暖,到底發生了怎樣的改變?本文就嘗試通過大資料來和豐富的圖表,為大家展現資料背後的資料。

  •      資料採集採用筆者用C#開發的爬蟲工具。
  •      資料清洗ETL採用了筆者開發的工具軟體。
  •      資料分析採用ipython notebook和pandas
  •      視覺化使用了matplotlib和seaborn.
  •      熱力圖使用了百度地圖API, 按經緯度0.01度為一個子區域,計算其中的平均值作為當前區域的房價/二手房數量。

至於搭建ipython notebook和安裝相應類庫的操作,以及各個類庫使用方法,可參考相應的教程。

資料來源

這些資料是筆者在2014年10月年和2015年10月份兩次,在鏈家官網上抓取的在售二手房資料,2014年約為64000條,2015年總計約7W條。資料來源可能會有偏差,因此結論僅供參考。附件有前1W條樣例資料,可供下載。

首先我們匯入所需的類庫:

# -*- coding:utf-8 -*-
import mongo;
import pandas as pd;
import csv;
from pandas import DataFrame,Series

之後載入所需的資料:

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'小區名']=table2014[u'小區名'].map(lambda x:unicode(x).strip("'"))
table2014[u'區縣']=table2014[u'區縣'].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'小區']=table2014[u'位置'].map(lambda x:unicode(x).strip("'"))

瘋長的房價

從1992年到2015年,北京的房價經歷了怎樣的瘋狂?可以檢視下面的圖表。

可以看到,1992年到2002年,呈現一個非常穩定的狀態。從2008年起,北京的房價如同火箭一般上竄。

有意思的是,如果按照建造時間來繪製圖表,會發現在2000年和2004年左右,達到高峰。在6W套二手房中,2000年總共建造了7697套,佔比百分之11.21%。

xcqu2014=table2014.groupby(by=u'位置')
p=year.value_counts();
p=p.sort_index()[50:-1]
p.plot(title=u'北京各年建造房屋數量變化')

到了2014年,北京各個區縣的二手房價格如下圖:

areag=table2014.groupby(by=u'區縣')
areag[u'價格'].mean().order(ascending=True).plot(kind='barh',title=u'各城區的二手房平均房價')

西城區和東城區的平均價格在五萬五左右,之所以沒有達到網上其他資料所提到的喪心病狂的9萬,是因為我們分析的是二手房。目前二環內新樓盤的數量極少,幾乎沒有討論的價值。

我們將房價以熱力圖方式繪製在地圖上,就會非常直觀:

顏色越深,代表其價格越高。除了西城,東城這些老城區,中關村(包含大量的學區房)和國貿(北京CBD)都價格高企。

如果我們改變縮放等級,進一步縮小地圖範圍,可以看到最貴的房子,集中在西單,南鑼鼓巷,國貿,以及北新橋地區。

這些最貴小區的房價有多貴呢?下面列出排名前十的十個小區的價格:

xcqu2014[u'價格'].mean().order(ascending=False)[1:10].plot(kind='barh',title=u'價格最高的十個小區的平均房價')

文華衚衕的位置在哪裡呢?筆者專門去搜尋了一下。這個超牛無比,價格在33萬/平的文華衚衕在靠近鬧市口大街的西單商圈。

更誇張的是,兩套房子都是平房,面積分別是12平和15平,其中一套還是1949年建的。中介給出的宣傳標語是,最牛實驗二小學區房,搶搶搶!這麼小的面積,估計是四合院的廂房改造的吧。現在官網上已經下架。

什麼樣的房子最多?

我們先看,什麼型別的樓房最多,下面給出了樓房總體高度的比例。可以看到,二手房中,六層是最多的。國家規定,七層就要裝電梯了。因此在2000年以前,大部分的居民樓都是6層。

lc=lc=table2014.groupby(by=u'樓層').size();
lc.order(ascending=False)[:20].plot(kind='barh',title=u'樓高比例')

再看看不同面積的房子所佔總數的比例。我們取面積為40-140平米的房子,進行了統計分析,結論如下圖:

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'房型面積和對應比例')

首先選出面積值不為空且為數字的所有行,之後將其轉換為int型別,後對其進行排序並繪圖。

可見,60平的一室一廳或兩室一廳最為常見。90平米的三居和兩居也較多。

我們再對二手房存量繪製熱力圖:

可以看到,二手房主要集中在天通苑,北苑,望京,十里堡和通州。這基本上與北京2004年釋出的《北京市城市總體規劃2004-2020》的內容相符:

很有意思的是,綠色的區域相當空曠,比如筆者目前所在的三元橋地區,和酒仙橋之間隔了好大一片荒地,晚上夜跑時荒無人煙。

2014年到2015年的房價變化

下面是剛需讀者最關心的內容,2014年到2015年的北京房價,經歷了怎樣的變化?眾所周知,2014年房價走低,整體唱衰,甚至有商家打出了降價6000元/平的廣告來推銷房子。2015年,降準降息政策出爐,公積金貸款比例提高,北京房價回暖,我們知道肯定漲價了。但到底漲了多少呢?

這部分的程式碼多一些,選取價格少於10萬,面積大於四十平米的房子,以減少錯誤的資料。求出2014年和2015年小區的交集,構造change結構,裡面儲存了每個小區的房子數量,2014年和2015年的平均價格。

table2014= table2014[(table2014[u'價格']<100000) & (table2014[u'面積']>40)]
table2015= table2015[(table2015[u'單價']<100000) & (table2015[u'面積']>40)]
xcqu2014=table2014.groupby(by=u'位置')

table2015[u'面積']= np.round(table2015[u'總價']*10000/table2015[u'單價'])

xcqu2015=table2015.groupby(by=u'小區')
p2015=xcqu2015.mean()[u'單價']
p2014=xcqu2014.mean()[u'價格']
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年價格增減的百分比,繪製出下面的房價變化數量比例圖。可以看到,房價變化基本呈現正態分佈趨勢。但均值不在0點,靠近5%左右,整體右移:

change[(change.percent>-30) & (change.percent<50)].groupby(by='percent').size().plot(title=u'不同漲跌幅度房子所佔的數量')

經過統計,2014年的平均房價為40125/平,2015年為42535/平。漲價比例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萬元以下單價,2015年小區內二手房數量超過20套的漲價排名前十的小區:

change[change.mount2015>20].sort(columns='percent',ascending=False)[:10]

上地房價怎麼漲了這麼多?即使在北京,7萬8的價格都已經是豪宅,可是上地的房子,一般都是普通的住宅。

原因還是學區房,海淀區教改使得這邊的房子變化極大。 上地東里小區內建有上地實驗小學,該小學可直升一零一中學上地分校,一零一中學上地分校位於上地西里北側,就是這9年直升的誘惑導致該區域房價直線攀升。可憐天下父母心!

當然,有漲價就有降價:基本上,降價的小區都在非中心城區,例如櫻花園就在順義。

change[change.mount2015>20].sort(columns='percent',ascending=True)[:10]

結論

5%的漲幅,已經說明2015年比2014年價格回暖不少。也有少部分郊區小區降價。當然,這種漲幅和之前火箭般的漲價不可同日而語。可以肯定的是,像北京這樣的城市,房子幾乎是不可能大跌的。但未來的事情,誰知道呢?

安得廣廈千萬間,大庇天下寒士俱歡顏!

文章已經很長,因此沒有將更多的內容囊括其中。我們還做了以下的事情:

  • 分析不同小區漲降價的原因並將其視覺化到地圖上。
  • 同一個小區中,不同的房子價格差別很大,甚至能差兩萬元。為什麼會出現這種情況?
  • 根據房子周邊的學校,醫院,商場等場所,計算房子的附加價值。
  • 嘗試預測不同小區未來的房價趨勢。

附錄:

樣例資料下載

鏈家在去年有約7W條資料,今年的出售二手房已經達到10W套,但是這些房源裡有多少水分呢?根據2014年的資料按照編號檢查一下重複:一萬兩千多套房子出現了兩次,將近五千套房子出現過三次,甚至有一套房子出現過八次。其中水分可想而知。

同時,2014年的網頁資料還會提供地理座標資訊,2015年就不存在了,所以文中涉及到地理資訊的圖表都是2014年的。另外,雖然對房子的位置描述非常詳細,但中介不會告訴你這是幾號樓幾層。僅僅提供了樓房的總層高。原因不言自明。

同樣,資料的準確性也有問題。很多房子價格都是1萬,2萬,明顯是隨意標的。也有一部分價格高的離譜,如88萬/平。這些資料在處理前都已經篩掉。以免干擾分析結果。

相關文章