用資料說話:北京房價資料背後的資料
從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萬/平。這些資料在處理前都已經篩掉。以免干擾分析結果。
相關文章
- 資料庫索引背後的資料結構資料庫索引資料結構
- 如何做到用資料說話(一)
- 用資料說話,億級海量資料分析效能瓶頸如何破?
- 資料驅動背後的“陷阱”
- 揭秘“資料咖啡”瑞幸背後的大資料危機大資料
- 四說大資料時代“神話”:從大資料到深資料大資料
- 資料運營實戰(三):用資料說話,從埋點開始
- 資料處理,會“說話”的大機器——資料資訊圖
- 說說資料分析中的資料建模
- 所有權背後的資料互動
- 大資料背後的星球脈動大資料
- Mashable:Google搜尋背後的資料Go
- 資料基礎架構如何演進,西部資料有話說架構
- mysql資料庫誤刪除後的資料恢復操作說明MySql資料庫資料恢復
- MySQL 資料庫誤刪除後的資料恢復操作說明MySql資料庫資料恢復
- 資料治理--後設資料
- 華為雲大資料輕量級解決方案,讓資料“慧”說話大資料
- 《不休的烏拉拉》背後的資料體系
- ABAP資料庫表的後設資料資料庫
- 自然語言處理背後的資料科學自然語言處理資料科學
- Albert Sim:資料背後 不可忽視人的情感
- i聚合:資料是聚合支付背後的“金礦”
- Truncate資料表背後的幾個引數(上)
- Truncate資料表背後的幾個引數(下)
- 感言 -《大話資料結構》的讀後感言資料結構
- 資料話民宿
- 說說敏捷大資料敏捷大資料
- 資料倉儲和後設資料
- 資料治理之後設資料管理
- mysql資料誤刪後的資料回滾MySql
- 資料新聞繁華背後有隱憂
- 一文說清資料管理、資料治理和資料資產管理
- 資料治理之資料的“管”與“用”
- 用資料說話,《集合啦!動物森友會》到底有多火?
- 程式設計師究竟能幹多少年?用資料說話!程式設計師
- 學會用資料說話-分散式鎖究竟可以多少併發?分散式
- 房價危機:疫情後時代席捲全球的新變局|資料包告
- 資料探勘者與資料探勘青年的對話(轉)