從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萬/平。這些數據在處理前都已經篩掉。以免干擾分析結果。