基於Python的南京二手房數據可視化分析

轉載請附帶原文地址:http://www.javashuo.com/article/p-dmpaubgs-n.html
html


1 內容簡介

首先經過爬蟲採集鏈家網上全部南京二手房的房源數據,並對採集到的數據進行清洗;而後,對清洗後的數據進行可視化分析,探索隱藏在大量數據背後的規律;最後,採用一個聚類算法對全部二手房數據進行聚類分析,並根據聚類分析的結果,將這些房源大體分類,以對全部數據的歸納總結。經過上述分析,咱們能夠了解到目前市面上二手房各項基本特徵及房源分佈狀況,幫助咱們進行購房決策。git

2 應用技術介紹

1)Python網絡爬蟲技術github

  • Requests
  • Beautifulsoup

2)Python數據分析技術算法

  • Numpy
  • Matplotlib
  • Pandas

3)k-means聚類算法瀏覽器

4)高德地圖開發者應用JS API網絡

3 數據採集及數據清洗

3.1 數據採集

該部分經過網絡爬蟲程序抓取鏈家網上全部南京二手房的數據,收集原始數據,做爲整個數據分析的基石。ide

3.1.1 鏈家網網站結構分析函數

鏈家網二手房主頁界面如圖一、圖2,主頁上面紅色方框位置顯示目前南京二手房在售房源的各區域位置名稱,中間紅色方框位置顯示了房源的總數量,下面紅色方框顯示了二手房房源信息縮略圖,該紅色方框區域包含了二手房房源頁面的URL地址標籤。圖2下面紅色方框顯示了二手房主頁上房源的頁數。學習

鏈家網二手房主頁截圖上半部分:網站

圖1 鏈家網二手房主頁

鏈家網二手房主頁截圖下半部分:

圖2 鏈家網二手房主頁

二手房房源信息頁面如圖三、圖4。咱們須要採集的目標數據就在該頁面,包括基本信息、房屋屬性和交易屬性三大類。各種信息包括的數據項以下:

1)基本信息:小區名稱、所在區域、總價、單價。

2)房屋屬性:房屋戶型、所在樓層、建築面積、戶型結構、套內面積、建築類型、房屋朝向、建築結構、裝修狀況、梯戶比例、配備電梯、產權年限。

3)交易屬性:掛牌時間、交易權屬、上次交易、房屋用途、房屋年限、產權所屬、抵押信息、房本備件。

圖3 二手房房源信息頁面

圖4 二手房房源信息頁面

3.1.3 網絡爬蟲程序關鍵問題說明

1)問題1:鏈家網二手房主頁最多隻顯示100頁的房源數據,因此在收集二手房房源信息頁面URL地址時會收集不全,致使最後只能採集到部分數據。

解決措施:將全部南京二手房數據分區域地進行爬取,100頁最多可以顯示3000套房,該區域房源少於3000套時能夠直接爬取,若是該區域房源超過3000套能夠再分紅更小的區域。

2)問題2:爬蟲程序若是運行過快,會在採集到兩、三千條數據時觸發鏈家網的反爬蟲機制,全部的請求會被重定向到鏈家的人機鑑定頁面,從而會致使後面的爬取失敗。

解決措施:①爲程序中每次http請求構造header而且每次變換http請求header信息頭中USER_AGENTS數據項的值,讓請求信息看起來像是從不一樣瀏覽器發出的訪問請求。②爬蟲程序每處理完一次http請求和響應後,隨機睡眠1-3秒,每請求2500次後,程序睡眠20分鐘,控制程序的請求速度。

3.2 數據清洗

對於爬蟲程序採集獲得的數據並不能直接分析,須要先去掉一些「髒」數據,修正一些錯誤數據,統一全部數據字段的格式,將這些零散的數據規整成統一的結構化數據。

3.2.1 原始數據主要須要清洗的部分

主要須要清洗的數據部分以下:

1)將雜亂的記錄的數據項對齊

2)清洗一些數據項格式

3)缺失值處理

3.2.3 數據清洗結果

數據清洗前原始數據如圖8,清洗後的數據如圖9,能夠看出清洗後數據已經規整了許多。

圖8 清洗前原始數據截圖

圖9 清洗後的數據截圖

4 數據可視化分析

在數據清洗完成後,咱們就能夠開始對數據進行可視化分析。該階段主要是對數據作一個探索性分析並將結果可視化呈現,幫助人們更好、更直觀的認識數據,把隱藏在大量數據背後的信息集中和提煉出來。本文主要對二手房房源的總價、單價、面積、戶型、地區等屬性進行了分析。

數據可視化分析主要步驟以下:1)數據加載;2)數據轉換;3)數據可視化呈現。

4.1 數據加載

數據分析和建模的大量工做都是用在數據準備上的,如:清理、加載、轉換等。清洗完成後的數據仍然存儲在文本文件(CSV格式)中,要對數據進行可視化分析,必須先要將數據按必定結果加載到內存中。咱們使用Pandas提供的DataFrame對象來加載和處理咱們清洗後的數據,Pandas同時提供將表格型數據讀取爲DataFrame對象的函數。數據加載處理過程當中須要注意的主要問題以下:

1)數據項的行列索引的處理;

2)數據類型推斷和數據轉換;

3)缺失值的處理。

4.2 數據總體質量分析

4.2.1 數據基本狀況

數據加載後,數據基本狀況如圖10。從圖中能夠看到加載後的數據一共20527行、25列,佔用內存3.9+MB。在數據類型上,一共有3列float64類型,2列int64類型,20列object類型。除了戶型結構、套內面積、抵押信息三列數據項缺失值比較多以外,其餘列數據項的缺失值都很少,因此數據總體的質量還不錯。

圖10 數據基本狀況圖

4.2.2 總體數據文件詞雲

從總體數據文件詞雲(見圖11),咱們能夠獲得在南京二手房房源信息中常常出現的高頻詞,如商品房、普通住宅、一梯兩戶、鋼混結構、精裝等。咱們能夠經過這些高頻詞,十分粗略的瞭解整個數據文件中的基本內容。

圖11 總體數據文件詞雲

4.2.3 南京各區域二手房房源數量折線圖

南京各區域二手房房源數量折線圖(見圖13)橫軸爲南京各個行政區域名稱,縱軸爲房源數量(套)。從圖中能夠看出,江寧在售的房源數量最多,高達5000多套,佔了總量的1/4。與之相反的是六合區,六合區在售的房源數量僅有1套,數量太少,其餘各區的數量相差很少。因此咱們後面關於六合區的分析會存在必定偏差。

圖13 南京各區域二手房房源數量折線圖

4.2.4 南京二手房房屋用途水平柱狀圖

南京二手房房屋用途水平柱狀圖(見圖14)橫軸爲房源數量(套),縱軸爲房屋用途類型。從圖中咱們能夠看出,房屋用途類型有:普通住宅、別墅、商業辦公、酒店式公寓、車庫5中類型。其中咱們主要關心的普通住宅類型的房源數量近20000套,佔總量絕大部分。因此在本文中,咱們沒有剔除掉房屋用途爲其餘類型的記錄,由於這些類型在全部房源樣本中佔比至關少,不會影響後面的分析結果,同時它們也屬於二手房的範疇內。

圖14 南京二手房房屋用途水平柱狀圖

4.2.5 數據總體質量總結

經過前面的分析,咱們能夠看出該數據文件的總體質量還不錯。雖然存在一些缺失值比較多的數據項,但咱們比較關注一些數據項缺失值很少。這些缺失值較多的都是一些次要的數據項,不影響咱們的分析。在房屋用途類型上,數據文件中一共包括了5種類型的二手房房源信息,其中普通住宅類型佔比98%以上,因此咱們後面分析基本能夠當作是針對普通住宅類型的二手房進行的分析,這也符合咱們指望。整個數據文件中惟一不足的是六合區域的二手房房源樣本點太少,這使咱們對六合區域的分析會存在必定的偏差。

4.3 南京二手房基本信息可視化分析

二手房基本信息可視化分析主要針對二手房:區域、總價、單價、建築面積四個屬性的分析。

4.3.1 南京各區域二手房平均單價柱狀圖

南京各區域二手房平均單價柱狀圖(見圖15)橫軸爲南京各區域名稱,縱軸爲單價(元/平米)。從圖中咱們能夠看到建鄴區和鼓樓區二手房平均單價最高,近40000元/平米。建鄴區是市中心城區,近幾年發展勢頭很好,房價一路飆升,如今已經成了南京最貴的區域之一。鼓樓區做爲南京市的核心地帶,擁有衆多商場和學區房,其均價一直高升不下。從總體上來看,南京市各個區域(除去存在偏差的六合區)均價都已經超過了20000元/平米。這些能夠體現出近幾年南京市房價猛漲的結果。浦口區雖然相比房價已經很低了,但相較於浦口前幾年的房價,差很少是翻了一番。

圖15 南京各區域二手房平均單價

4.3.2 南京各區域二手房單價和總價箱線圖

南京各區域二手房單價箱線圖(見圖16)橫軸爲南京各區域名稱,縱軸爲單價(元/平米)。二手房平均單價雖然是一個重要參考數據,但平均值不能有效的表示出數據總體上的分佈狀況,特別是數據中一些離散值的分佈狀況,這些信息的表現則須要藉助箱線圖。從圖16中能夠看出,建鄴和鼓樓兩個區域房源單價正常值分佈都不是太集中,50%的單價分佈在30000-50000的區間內,區間跨度比其餘區都要大。雖然建鄴區平均單價略高於鼓樓區,但鼓樓區的異常值特別多,單價超過50000的房源數不勝數,最高單價有達到100000的,單價上限遠高於建鄴區,而建鄴區異常值相對較少。綜合以上狀況來看,鼓樓區應該是南京市單價最高的區域。與鼓樓區相鄰的玄武區和秦淮區單價正常值分佈較爲集中50%的數據都分佈在30000-40000之間,但這兩個異常值也比較多,單價上限也很是高。這些區域單價如此多的異常值,跟這些區域集中的教育和醫療資源有着密不可分的關係。

圖16 南京各區域二手房單價箱線圖

南京各區域二手房總價箱線圖(見圖17和圖18)橫軸爲南京各區域名稱,縱軸爲單價(萬元)。圖18對圖17縱軸進行了縮放,更易於觀察,其餘方面沒有區別。從總價這個維度來看,鼓樓、建鄴這兩個單價最高區域,總價很是的高,500萬元的二手房以分佈在正常值範圍內了。南京其餘各區域二手房價格大部分都集中在200-400萬元之間,下四分位數十分靠近200萬。江寧、棲霞雖然在單價不高,但總價不低,尤爲是近幾年房價漲幅比較高的江寧,500萬以上異常值都已經比較多了。浦口區總價數據分佈最爲集中,絕大部分數據都200-300萬區間內。

圖17 南京各區域二手房總價箱線圖

圖18 南京各區域二手房總價箱線圖

4.3.3 南京二手房單價最高Top20

南京二手房單價最高Top20水平柱狀圖(見圖19)橫軸爲單價(元/平米),縱軸爲小區名字。從圖中能夠看出,單價前20的房源都已經超過9萬,而且都集中在鼓樓區,這也印證了上面箱線圖中鼓樓區如此多異常值的存在。

圖19 南京二手房單價最高Top20

4.3.4 南京二手房單價和總價熱力圖

南京二手房單價熱力圖(見圖20)和南京二手房總價熱力圖(見圖21)紅色區域表明房源密集度高且房價高的區域。從圖中能夠看出鼓樓、玄武、秦淮、建鄴上半部分是密集度最高的區域。這4個區域處於南京市正中心的位置,交通方便,醫療、教育等資源集中,這些因素一塊兒造就了這些區域高價格。

圖20 南京二手房單價熱力圖

圖21 南京二手房總價熱力圖

4.3.5 南京二手房總價小於200萬的分佈圖

南京二手房總價小於200萬的房源一共有6000多套,分佈圖見圖23。從圖中咱們能夠看出,除了鼓樓區和建鄴區比較少,其餘區域低於200萬的房子仍是有的。

圖23 南京二手房總價小於200萬的分佈圖

4.3.6 南京二手房建築面積分析

南京二手房建築面積分佈區間圖(圖24)橫軸爲房源數量(套),縱軸爲分佈區間(平米)。從圖中能夠看出在建築面積50-100區間內房源數量最多,超過了10000套。其次是100-150區間與小於50的區間。

圖24 南京二手房建築面積分佈區間柱狀圖

南京各區域平均建築面積柱狀圖(圖25)橫軸爲各區域名字,縱軸爲建築面積(平米)。從圖中能夠看出玄武、秦淮、鼓樓這幾個單價比較高的老城區平均建築面積最小,平均面積80平米左右。反而是江寧、浦口這兩個單價最低的區域平均建築面積最大,平均面積大小超過了100平米。

圖25 南京各區域二手房平均建築面積柱狀圖

4.3.7 南京二手房單價、總價與建築面積散點圖

南京二手房總價與建築面積散點圖(圖26)橫軸爲建築面積(平米),縱軸爲總價(萬元)。從圖中能夠看出,總價與建築面積這兩個變量符合正相關關係。數據點分佈比較集中,大多數都在總價0-1500萬元與建築面積0-400平米這個區域內。

圖26 南京二手房總價與建築面積散點圖

南京二手房單價與建築面積散點圖(圖27)橫軸爲建築面積(平米),縱軸爲單價(元/平米)。從圖中能夠看出建築面積與單價並沒有明顯關係,一樣樣本點分佈也較爲集中,離散值很少,但單價特別高的房源,建築面積都不是太大,可能由於這些房源通常都位於市中心。

圖27 南京二手房單價與建築面積散點圖

4.4 南京二手房房屋屬性可視化分析

4.4.1 南京二手房房屋戶型佔比狀況

從南京二手房房屋戶型餅狀圖(圖28)中能夠看出,2室1廳與2室2廳做爲標準配置,一共佔比接近一半。其中3室2廳和3室1廳的房源也佔比很多,其餘房屋戶型的房源佔比就比較少了。

圖28 南京二手房房屋戶型餅狀圖

4.4.2 南京二手房房屋裝修狀況

從南京二手房房屋裝修狀況餅狀圖(圖29)能夠看出,近60%的房源的房屋裝修狀況都是其餘,可能由於房源所有爲二手房的緣故,你們都自主裝修過的。

圖29 南京二手房裝修狀況餅狀圖

4.4.3 南京二手房房屋朝向分佈狀況

南京二手房房屋朝向柱狀圖(圖30)橫軸爲房屋朝向,縱軸爲房源數量(套)。從圖中咱們能夠看出,只有少數幾種的朝向比較多,其他的都很是少,明顯屬於長尾分佈類型(嚴重偏態)。這也符合咱們的認識,房屋朝向一半以上都是坐北朝南的。

圖30 南京二手房房屋朝向分佈柱狀圖

4.4.4 南京二手房建築類型佔比狀況

從南京二手房建築類型餅狀圖(圖31)中,咱們能夠看出房源的建築類型65.6%都是板樓,如今房地產商喜歡開發的塔樓反而較少,這和南京二手房建築時間都比較久遠相符。

圖31 南京二手房建築類型餅狀圖

5 數據聚類分析

該階段採用聚類算法中的k-means算法對全部二手房數據進行聚類分析,根據聚類的結果和經驗,將這些房源大體分類,已達到對數據歸納總結的目的。在聚類過程當中,咱們選擇了面積、總價和單價這三個數值型變量做爲樣本點的聚類屬性。

5.1 k-means算法原理

5.1.1 基本原理

k-Means算法是一種使用最廣泛的聚類算法,它是一種無監督學習算法,目的是將類似的對象歸到同一個簇中。簇內的對象越類似,聚類的效果就越好。該算法不適合處理離散型屬性,但對於連續型屬性具備較好的聚類效果。

5.1.2 聚類效果斷定標準

使各個樣本點與所在簇的質心的偏差平方和達到最小,這是評價k-means算法最後聚類效果的評價標準。

5.1.3 算法實現步驟

1)選定k值

2)建立k個點做爲k個簇的起始質心。

3)分別計算剩下的元素到k個簇的質心的距離,將這些元素分別劃歸到距離最小的簇。

4)根據聚類結果,從新計算k個簇各自的新的質心,即取簇中所有元素各自維度下的算術平均值。

5)將所有元素按照新的質心從新聚類。

6)重複第5步,直到聚類結果再也不變化。

7)最後,輸出聚類結果。

5.1.4 算法缺點

雖然K-Means算法原理簡單,可是有自身的缺陷:

1)聚類的簇數k值需在聚類前給出,但在不少時候中k值的選定是十分難以估計的,不少狀況咱們聚類前並不清楚給出的數據集應當分紅多少類才最恰當。

2)k-means須要人爲地肯定初始質心,不同的初始質心可能會得出差異很大的聚類結果,沒法保證k-means算法收斂於全局最優解。

3)對離羣點敏感。

4)結果不穩定(受輸入順序影響)。

5)時間複雜度高O(nkt),其中n是對象總數,k是簇數,t是迭代次數。

5.2 算法實現關鍵問題說明

5.2.1 K值的選定說明

根據聚類原則:組內差距要小,組間差距要大。咱們先算出不一樣k值下各個SSE(Sum of
squared
errors)值,而後繪製出折線圖(圖32)來比較,從中選定最優解。從圖中,咱們能夠看出k值到達5之後,SSE變化趨於平緩,因此咱們選定5做爲k值。

圖32 不一樣k值下SSE值折線圖

5.2.2 初始的K個質心選定說明

初始的k個質心選定是採用的隨機法。從各列數值最大值和最小值中間按正太分佈隨機選取k個質心。5.2.3
關於離羣點

離羣點就是遠離總體的,很是異常、很是特殊的數據點。由於k-means算法對離羣點十分敏感,因此在聚類以前應該將這些「極大」、「極小」之類的離羣數據都去掉,不然會對於聚類的結果有影響。離羣點的斷定標準是根據前面數據可視化分析過程的散點圖和箱線圖進行斷定。根據散點圖和箱線圖,須要去除離散值的範圍以下:

1)單價:基本都在100000之內,沒有特別的異常值。

2)總價:基本都集中在3000之內,這裏咱們須要去除3000外的異常值。

3)建築面積:基本都集中在500之內,這裏咱們須要去除500外的異常值。

5.2.4 數據的標準化

由於總價的單位爲萬元,單價的單位爲元/平米,建築面積的單位爲平米,因此數據點計算出歐幾里德距離的單位是沒有意義的。同時,總價都是3000之內的數,建築面積都是500之內的數,但單價基本都是20000以上的數,在計算距離時單價起到的做用就比總價大,總價和單價的做用都遠大於建築面積,這樣聚類出來的結果是有問題的。這樣的狀況下,咱們須要將數據標準化,即將數據按比例縮放,使之都落入一個特定區間內。去除數據的單位限制,將其轉化爲無量綱的純數值,便於不一樣單位或量級的指標可以進行計算和比較。

咱們將單價、總價和麪積都映射到500,由於面積自己就都在500之內,不要特別處理。單價在計算距離時,須要先乘以映射比例0.005,總價須要乘以映射比例0.16。進行數據標準化前和進行數據標準化後的聚類效果對好比下:圖3二、圖33是沒有數據標準化前的聚類效果散點圖;圖3四、圖35是數據標準化後的聚類效果散點圖。

數據標準化前的單價與建築面積聚類效果散點圖:

圖32 數據標準化前的單價與建築面積散點圖

數據標準化前總價與建築面積聚類效果散點圖。

圖33 數據標準化前總價與建築面積散點圖

數據標準化後單價與建築面積聚類效果散點圖。

圖34 數據標準化後單價與建築面積散點圖

數據標準化後總價與建築面積聚類效果散點圖。

圖35 數據標準化後總價與建築面積散點圖

5.3 聚類結果分析

聚類結果以下

1)聚類結果統計信息以下:

2)聚類後的單價與建築面積散點圖和總價與建築面積散點圖見圖3四、圖35。

3)聚類結果分組0、一、二、三、4的區域分佈圖分別以下:圖3六、圖3七、圖3八、圖3九、圖40。

聚類結果分組0的區域分佈圖以下:

圖36 聚類結果0區域分佈圖

聚類結果分組1的區域分佈圖以下:

圖37 聚類結果1區域分佈圖

聚類結果分組2的區域分佈圖以下:

圖38 聚類結果2區域分佈圖

聚類結果分組3的區域分佈圖以下:

圖39 聚類結果3區域分佈圖

聚類結果分組4的區域分佈圖以下:

圖40 聚類結果4區域分佈圖

根據以上聚類結果和咱們的經驗分析,咱們大體能夠將這20000多套房源分爲如下4類:

a、大戶型(面積大,總價高),屬於第0類。平均面積都在200平以上,這種大戶型的房源相對數量較少,主要分佈在鼓樓、建鄴、江寧、棲霞等地(具體可從各種中的區域分佈圖可知)。

b、地段型(單價高),屬於第二、4類。這種房源圍繞南京市中心位置集中分佈,地理位置極好,交通方便,主要分佈鼓樓、玄武、建鄴、建鄴等地(具體可從各種中的區域分佈圖可知)。

c、大衆蝸居型(面積小、價格相對較低、房源多),屬於第3類。這類房源分佈範圍廣,主要圍繞在各地鐵線兩邊。典型的區域有秦淮、鼓樓、江寧、玄武、浦口等地。

d、高性價比型(面積相對大,單價低),屬於第1類。典型的區域有棲霞、浦口、江寧等地。

ps:等有人看了我再公佈github地址:),感受會火

20190329更新-github地址:https://github.com/ideaOzy/data_analysis

相關文章
相關標籤/搜索