霍姝宇+王春萍+史朝陽
摘要:隨著科技的迅猛發展,在生活中,每天都會產生大量的數據。數據挖掘是實現對大量數據進行分析和獲取相關知識的研究過程,目的在于能夠使人們在其中獲取到需要的、具有潛在價值的規律。住房是民生之本,在房屋價格的不斷提升的這些年中,不少購房者將視線轉移到二手的普通住房,這也拉動了二手房的價格不斷攀升。如果只是通過觀察或者歸納總結的途徑來對影響房源價格提升的因素進行綜合分析,那么這意味著,將是一項工作量非常巨大的并且難以實現的任務。文章研究了通過機器學習工具WEKA,對趕集網獲取的昆明市二手房數據,使用SimpleKmeans聚類算法,使得具有屬性:房屋售價、房屋規格、房屋朝向、房屋樓層、房屋類型、建筑時間、產權、房屋性質、裝修情況、地段的2400余條實例各屬性分別分6個簇聚類在一起,同一類間的屬性相似度較高。
關鍵詞:數據挖掘;二手房屋價格;網絡爬蟲;聚類分析;SimpleKmeans
近幾年,我國的房屋地產銷售市場發展十分迅速,房屋價格上升較快,這也對二手房屋的銷售起到了一定的刺激作用。一系列輿論的導向,讓越來越多的人群被重新卷入到“追求高價”的房屋購買怪圈中,一定程度上也對政府決策行為產生干擾。因此探究影響房屋價格的多種因素就顯得尤為重要,本文以昆明市二手的住房為范例,做出聚類分析。
在以昆明二手房源為樣本聚類分析中,可通過以下幾個數據支撐挖掘過程,一是明確要解決的問題,確定挖掘目標。根據不同的目標選擇不同的數據挖掘的方法。本文選擇SimpleKmeans算法,是WEKA平臺中的K-means算法,目的使同一簇中的實例間相似度較高。二是數據的準備。本文通過利用Python語言編寫了多進程網絡爬蟲程序,在完成數據抓取任務的同時保證了大規模數據輸出的穩定性。三是數據預處理。在數據挖掘的過程中,數據預處理起到了十分重要的作用,它決定了數據挖掘的成敗。因為在利用各種方式獲得的原始數據中,會存在大量的缺失值或者嚴重偏離預期的數據,在預處理階段會對數據挖掘結果明顯產生影響的數據進行補充、刪除、離散化等處理。四是數據挖掘。根據數據的類型、特點,選擇合適的數據挖掘工具、方法進行挖掘,得到數據中潛在的信息。五是結論與分析。對結果進行驗證、說明,獲得結論,做出解釋。
一、數據獲取
(一)爬蟲系統需求分析
利用Python語言編寫趕集網二手房網絡爬蟲程序完成原始數據獲取。具體功能包括對售房標題、樓層、產權、裝修情況等20余個屬性信息進行抓取并保存在MongoDB數據庫中。為了保證爬蟲程序能夠順利完成,保證數據輸出的高效性,同時程序的運行結果能夠滿足基本的功能需求,因此有必要在實現系統前進行分析,設計出符合需求的工作流和功能模塊。
本文研究設計爬蟲程序主要由于三個模塊組成。1. 抓取頁面。從起始頁面開始搜索,服務器發送request包,能夠下載http協議和https協議的鏈接的網頁,構造HTTP請求中的GET請求;2. 頁面解析。主要內容是在抓取頁面后,利用BeautifulSoup4解析網頁,通過html標簽將數據提取出來。3. 主運行模塊。pool = multiprocessing.Pool(multiprocessing.cpu_count())創建進程池,實現進程池功能,實現了多進程爬蟲工作流,提高了爬蟲任務的執行效率。當程序運行時,遇到異常錯誤需要跳過此異常繼續執行并且記錄異常,保證后續運行中不會繼續訪問,例如404錯誤等異常頁面。這也就加大了對程序的可移植性和可靠性額要求。
(二)爬蟲功能設計
通過對發布信息平臺的對比,發現趕集網二手房數據更新速度快,頁面規則相對統一,便于解析網頁,因此選擇趕集網可以提取更全面的獲取二手房數據,能更準確地對影響昆明二手房源售價的因素做出分析。但是趕集網發布的數據也存在一些問題,由于趕集網發布的售房信息也會存在失真的情況,經過數據預處理后的數據集,可能有部分失真數據會使聚類分析產生偏差。原始數據通過網絡爬蟲實現抓取,網絡爬蟲利用網頁的URL來得到網頁的內容,并且將抓取的數據直接返回給用戶,不需要人工瀏覽器獲取。
在爬蟲項目中經常會遇到一些問題,比如,頻繁快速訪問會被封IP,通常會通過設置代理IP來解決這種情況,通過使用urllib.request.build_opener添加User-agent消息頭偽裝瀏覽器的方式繼續完成抓取。為了防止因為爬取速度過快而帶來的一系列問題,本文設計程序中通過time.sleep(4)方法增加等待時間,使爬蟲完成一次抓取便停頓4秒,延緩數據抓取時間。
1. 工具選擇
Python語言自帶了urllib,urllib2d等常用的庫。Python與其他編程語言進行比較可以發現,Python抓取網頁文檔的接口更簡潔;相比其他動態腳本語言,如perl,shell,python的urllib2包提供了較為完整的訪問網頁文檔的API。python里擁有功能強大的第三方包。抓取的網頁基本都需要處理,通過beautifulsoap4可以清晰、快速地完成網絡剖析的工作,提取文本。
2. 網絡爬蟲的搜索策略
趕集網上的二手房源信息資源非常豐富,網絡爬蟲需要采取一定的策略,優先爬去對聚類分析有幫助的數據。本文設計的趕集網爬蟲程序是基于深度優先原則進行的,在聚類分析的過程中,需要的是大量的、來源可靠的數據,在趕集網能提供網頁中盡可能多的一個連接一個連接進行抓取。這樣做的目的在于,抓取的數據量足夠大,使聚類分析的結果更接近實際情況。endprint
(三)爬蟲程序工作流
為了保證爬蟲在抓取過程中是高效的,使大規模抓取、輸出效率更加穩定,在過程中設計了爬蟲工作流。在列表頁爬取所有二手售房的URL,存貯到MongoDB數據庫中,通過Python語句在數據庫中建立一個用來裝URL_list的表,Spider1的作用就是將所有列表的URL統統存入到URL_list中;Spider2將URL_list中所有鏈接依次取出并逐一訪問,獲得詳情頁信息。將二手售房的詳細信息存儲到數據庫item_indo中。在這里運用了MongoDB。是一種系統管理的資源可以通過計算機與節點直接相連的方式,不需要與本地相連的節點相連接,它的使用可以通過在程序中直接編程引入,較為方便,并且相比于其他常用數據庫,更能適合完成大量數據的存儲。在編譯器pycharm中安裝MongoDB的驅動pymongo, 通過MongoClient()的方法連接主機和端口。
設計數據結構表、聚類屬性信息如表1和表2所示。
二、聚類分析技術在昆明二手房價中的應用
聚類分析在生物學、電子商務等領域應用較多,是數據挖掘和機器學習的重要內容之一,它是一種無監督的機器學習方式。聚類分析是把一組對象劃分為很多類,但是在每一類中的實例間的相似程度高,在沒有劃分到一類的對象之間的相似程度很低或者存在著某些的差異就無法聚類在一起,聚類中的簇會根據實際數據集的特征,按照數據之間的相似度來定義。這種分析的明顯優勢就在于可以通過實現對類的全方面的、多層次的描述而實現信息的獲取。 聚類分析算法可以分為劃分方法、層次方法、基于密度的方法、基于網格的方法、基于模型的方法;基于劃分的方法主要包括有k—平均值算法,k—中心點算法。基于層次的方法主要是CURE和BIRCH算法。基于網格的聚類方法具有代表性的是STING算法。典型的基于密度的聚類方法是DBSCAN算法。SimpleKmeans算法是在WEKA平臺中實現K-means算法。K-means聚類算法輸入聚類個數k以及n個實例數,輸出符合方差最小標準的k個聚類,使得統一簇組成的類中實例間相似度較高,不同類的對象間相似度低或者因為一些原因無法聚類在一起。
(一)數據預處理
1. 數據預處理
原始數據中的數據一般都存在數據不完整、重復或模糊等情況,很少能直接滿足算法研究的要求,在數據挖掘的過程中,如果只重視對算法的研究而忽略了數據預處理階段的實現,從某種程度上說,會失去數據挖掘的意義。并且,原始數據中沒有研究價值的數據很多,都會對數據挖掘算法的執行效率和挖掘的結果產生嚴重的影響,造成結果偏差。因此,對原始數據進行合理的預處理是數據挖掘研究過程中成功與否的關鍵。
2. 屬性選擇、數據清洗
數據預處理包含了很多的步驟。數據選擇主要包含選擇合適的屬性、屬性的合成、實例的選擇等;數據清理時去除數據集中明顯偏離期望值或明顯不符合常理的數據、處理重復值、缺失值,處理遺漏掉的數據和清洗臟數據;數據合成則利用原始數據生成更貼合實際的新的屬性。數據合并是將原來疏散的幾個數據集依照一定的標準和原則歸并在一起;數據格式化多應用于解決數據中不一致的情況。
利用Python撰寫的網絡爬蟲獲取了趕集網網站上的二手房源發布信息的標題、以及有關二手房出售的相關信息包含24個屬性的7000余條數據。
通過對獲得的數據觀察發現,數據出現重復問題,在周邊教育、醫療設施等屬性中存在的數據值缺失、不一致等問題較為嚴重,而在采集到的月供款數據中,原始數據嚴重偏離期望值,不符合實際。去除屬性中特殊符號,刪除嚴重缺失實例的屬性如:周邊學校、醫療設施、購物渠道等。在Excel中完成數據篩選,選擇具有實際意義的數據,將數據另存為CSV文件,WEKA平臺可直接對CSV文件操作。
(二)分裂數據集、測試集
在聚類器選擇中,使用Percentage split(按照比例分割)。使用默認設置66%,既在供聚類分析的數據集中,取出特定66%的數據作為訓練集,剩余數據作為測試集,用來評價聚類器的性能。
(三)聚類分析結果
如圖2所示。
三、結語
在聚類分析結果中,Within cluster sum of squared errors:1604.7416693522332用來評價聚類的好壞,其數值越小就意味著聚在一個簇中的實例間的距離越小。同時這個值也會受到“seed”參數的影響,設定隨機種子數不同,所得到的這個數值也不同,在本文中,設定的“seed”值是100,得到Within cluster sum of squared errors: 1604.7416693522332,是最理想的結果。
在本文中,參與聚類分析的數據集包含了九種屬性的共計2400多實例,在額外簇(Full Data)中顯示整個數據集,設置的6個簇包含的實例數分別為:216,410,414,360,421,626,數據集中的所有實例全部歸為各簇中。部分購房者在購房時對房屋的朝向有一定的要求,這是在本文中進行聚類分析的影響因素之一,對房屋的朝向的選擇可能是受一些歷史傳統觀念的影響,并且,我國處于北半球,南向、南北朝向的房屋采光效果明顯好于其他方向,利于通風,是購買者在購買時會考慮的因素,在聚類分析結果中,每個簇所在的列對應的房屋朝向都是南北朝向;在房屋類型中,分為公寓、普通住宅、別墅三種類別,普通住宅類別較為集中;房屋產權性質同理,聚集在70年商品房類別中。數據集中的精裝修、毛坯、中等裝修、豪華裝修、簡單裝修五種情況,除簇4所在列為毛坯,其余簇所在列均為精裝修類別。在對房屋性質的描述中:常有滿五不唯一,不滿五年,滿五唯一,滿五年等方式描述。滿五唯一含義是指從房產證出證開始計算,已經等于或大于五年的房屋并且戶主在這個省份內沒有其他登記擁有的住房。一般在這種情形下可免房子的個稅和營業稅,而滿五不唯一不免征個所得的稅。因此房屋的性質也是在二手房購買時,購買者通常會考慮的一些因素,不滿五年的列表聚集在0、2、3、4中。
參考文獻:
[1]李雄軍.穩定我國房價的政策探討[J].重慶工商大學學報(社會科學版),2008(01).
[2]高文林.二手房價格評估的影響因素及方法選擇[J].中國房地產,2012(08).
(作者單位:霍姝宇,昆明理工大學校團委;王春萍,昆明理工大學圖書館;史朝陽,昆明理工大學管理與經濟學院。王春萍為通訊作者)endprint