1. 程式人生 > 其它 >樓盤價格資料採集與視覺化分析

樓盤價格資料採集與視覺化分析

本文就從資料採集、資料清洗、資料分析與視覺化三部分來看看新的一年裡房市的一些問題。

資料採集:

資料採集即從網頁上採集我們需要的指定資訊,一般使用爬蟲實現。當前開源的爬蟲非常多,處於簡便及學習的目的,在此使用python的urllib2庫模擬http訪問網頁,並BeautifulSoup解析網頁獲取指定的欄位資訊。本人獲取的鏈家網上的新房和二手房資料,先來看看原始網頁的結構:

首先是URL,不管是新房還是二手房,鏈家網的房產資料都是以列表的方式存在,比較容易獲取,如下圖:

其中包含的資訊有樓盤名稱、地址、價格等資訊,回到原始網頁,看看在html中,這些資訊都在什麼地方,如下圖:

值得注意的是,原始的html為了節省傳輸頻寬一般是經過壓縮的,不太方便分析,可以藉助一些html格式化工具進行處理再分析。知道這些資訊後,就可以模擬http請求來拉取html網頁並使用

BeautifulSoup提取指定的欄位了。

[python] view plain copy print?

fw = open("./chengdu.txt","a+")  
index = [i+1 for i in range(32)]  
for pa in index:    
 try:  
 if pa==1:  
            url = "http://cd.fang.lianjia.com/loupan/" 
 else:  
            url = "http://cd.fang.lianjia.com/loupan/pg%d/"%(pa)  
 print "request:"+url  
        req = urllib2.Request( url )  
        req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36")  
        req.add_header("Accept","*/*")  
        req.add_header("Accept-Language","zh-CN,zh;q=0.8")  
 
        data = urllib2.urlopen( req )  
        res = data.read()  
 #print res 
 #res = res.replace(" ","") 
 #print res 
 #objects = demjson.decode(res) 
 
        soup = BeautifulSoup(res)  
        houseLst = soup.findAll(id='house-lst')  
        resp = soup.findAll('div', attrs = {'class': 'info-panel'})  
 
 for i in range(len(resp)):  
            name =  resp[i].findAll('a', attrs = {'target': '_blank'})[0].text   
 
            privice = resp[i].findAll('span', attrs = {'class': 'num'})  
            privice =  privice[0].text  
 
            region = resp[i].findAll('span', attrs = {'class': 'region'})  
            address =  region[0].text.split('(')[0]  
 ##解析獲得經緯度 
            location,city,district = getGdLocation(name)  
 if not location:  
                location = getBdLocation(address)#自定義函式 
 if not location:  
 continue 
            formatStr = "%s,%s,%s,%s,%sn"%(city,district,name,location,privice)  
 print formatStr  
            fw.write(formatStr)  
 except:  
 pass 
fw.close()  

資料清洗:

資料清洗,顧名思義就是將不合規的資料清理掉,留下可供我們能夠正確分析的資料,至於哪些資料需要清理掉,則和我們最終的分析目標有一定的關係,可謂仁者見仁智者見智了。在這裡,由於是基於地理位置做的一個統計分析,顯然爬取的地理位置必須是準確的才行。但由於售房者填寫的地址和樓盤名稱可能有誤,如何將這些有誤的識別出來成為這裡資料清洗成敗的關鍵。我們清洗錯誤地理位置的邏輯是:使用高德地圖的地理位置逆編碼介面(地理位置逆編碼即將地理名稱解析成經緯度)獲得樓盤名稱和樓盤地址。對應的經緯度,計算二者對應的經緯度之間的距離,如果距離值超過一定的閥值,則認為地址標註有誤或者地址標註不明確。經過清洗後,獲取到的成都地區的在售樓盤及房屋數量總計在3000套的樣子。

經過清洗後的資料格式為:

包括市、區、樓盤/房屋名稱、經緯度、價格四個維度。

資料分析與視覺化:

首先是新推樓盤掛牌價格與銷售價格

市中心依然遵循了寸獨存金的原則,銷售價格遠遠高於郊縣,一方面原因是位置地段、配套的獨特性,一方面也是由於可供銷售的土地面積、樓盤數量極為有限。

二手房銷售價格和掛牌數量

二手房交易重要集中在市區及一些經濟比較發達的郊縣,不同區縣的價格分化並不大,可能原因是老城區銷售的二手房存在一部分老房子、同時二手房的價格賣家寫的比較隨意。

二手房資料的箱型圖

這個就更為明顯的印證了上面的結論,主城區的二手房存在一部分價格遠低於市場均價的(即老房子),也有一部分價格昂貴的(新房、豪宅)出售,郊縣的價格均方差則會低很多。

房屋銷售熱度的空間視覺化

房屋銷售熱度以該區域的房屋銷售數量和房屋銷售價格綜合來衡量,計算方式以該區域銷售的房屋數量及銷售價格進行加權。

新房銷售熱度

二手房銷售熱度

主城區沒什麼好說的了,人口密度大、買房售房的都多。在南邊有一塊遠離市區的地方、新房和二手房的交易熱度都很高,即成都市天府新區,目前配套和各項設施都不太完善,去這裡花高價買房安家的老百姓想必不會太多,猜測是去年炒房熱過年,這些人現在開始出售房屋了。

via http://blog.csdn.net/zbc1090549839/article/details/54692147