孫婷婷 丁碩權(quán)



摘要:隨著網(wǎng)絡(luò)時(shí)代的到來,越來越多的民眾選擇通過網(wǎng)絡(luò)上的房源信息來進(jìn)行選房、購(gòu)房,但如何從海量的房源信息中篩選出符合自己需要的商品房是一個(gè)難題。因此,該文設(shè)計(jì)實(shí)現(xiàn)房?jī)r(jià)數(shù)據(jù)抓取與分析系統(tǒng),通過對(duì)某一地區(qū)房?jī)r(jià)數(shù)據(jù)的采集、處理、分析得到房?jī)r(jià)預(yù)測(cè)模型,同時(shí)為了讓用戶更加方便的選房,實(shí)現(xiàn)了前端網(wǎng)頁展示地區(qū)房源統(tǒng)計(jì)信息,此外還提供房源信息的篩選以及地圖選房功能。
關(guān)鍵詞:房?jī)r(jià)數(shù)據(jù);數(shù)據(jù)抓取;數(shù)據(jù)分析;數(shù)據(jù)可視化
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)15-0024-04
房地產(chǎn)行業(yè)在我國(guó)屬于支柱性產(chǎn)業(yè),在我國(guó)社會(huì)經(jīng)濟(jì)發(fā)展中一直扮演著重要角色。房?jī)r(jià)問題,尤其是大中城市的房?jī)r(jià)問題,一直是政府、大眾和眾多研究人員關(guān)注的熱點(diǎn)。如何科學(xué)地預(yù)測(cè)房?jī)r(jià)是房?jī)r(jià)問題的研究方向之一。隨著互聯(lián)網(wǎng)時(shí)代的來臨,如今越來越多的民眾選擇通過網(wǎng)絡(luò)獲取房源信息并進(jìn)行選房購(gòu)房,如何盡可能多角度的呈現(xiàn)房源信息幫助民眾選房成為一個(gè)值得深人研究的課題剛。
為此,本文使用爬蟲技術(shù)獲取某一地區(qū)的房源信息,然后使用機(jī)器學(xué)習(xí)中的相關(guān)算法對(duì)房?jī)r(jià)數(shù)據(jù)集進(jìn)行訓(xùn)練,得到與實(shí)際擬合度較高的房?jī)r(jià)模型,從而實(shí)現(xiàn)房?jī)r(jià)的預(yù)測(cè)。在房?jī)r(jià)數(shù)據(jù)抓取階段使用爬蟲技術(shù),該方法獲取的房?jī)r(jià)數(shù)據(jù)與傳統(tǒng)從政府信息網(wǎng)站獲取的房?jī)r(jià)數(shù)據(jù)相比更加豐富并具有時(shí)效性。在房?jī)r(jià)數(shù)據(jù)分析時(shí)使用機(jī)器學(xué)習(xí)中的算法,這些算法能夠高效地進(jìn)行大數(shù)據(jù)分析并建立房?jī)r(jià)模型。在房?jī)r(jià)數(shù)據(jù)展示部分利用前端網(wǎng)頁技術(shù)實(shí)現(xiàn)房源統(tǒng)計(jì)信息展示、房源信息檢索篩選、地圖選房、房?jī)r(jià)預(yù)估等功能可以幫助消費(fèi)者更加高效地選房、購(gòu)房。
1需求分析
1.1設(shè)計(jì)目標(biāo)
考慮到本文系統(tǒng)運(yùn)行的環(huán)境和后續(xù)的數(shù)據(jù)處理,我們將上海房?jī)r(jià)作為研究對(duì)象,通過編寫爬蟲程序從鏈家網(wǎng)上爬取相關(guān)的二手房和租房信息,并將獲取的信息保存到mysql數(shù)據(jù)庫(kù)中。在得到房?jī)r(jià)信息后將對(duì)相關(guān)數(shù)據(jù)進(jìn)行清洗和預(yù)處理,為后續(xù)的房?jī)r(jià)建模做準(zhǔn)備。在對(duì)房?jī)r(jià)數(shù)據(jù)進(jìn)行處理得到房?jī)r(jià)數(shù)據(jù)集后,采用機(jī)器學(xué)習(xí)中的多元線性回歸和隨機(jī)森林算法分別對(duì)房?jī)r(jià)數(shù)據(jù)集進(jìn)行訓(xùn)練,從而得到房?jī)r(jià)模型,訓(xùn)練過程中遵循2-8原則,即20%的測(cè)試集,80%的訓(xùn)練集。通過比較兩種不同算法得到的房?jī)r(jià)模型與實(shí)際房?jī)r(jià)的擬合度,找到性能更優(yōu)的模型,并給出模型預(yù)測(cè)的房?jī)r(jià)值。為了方便用戶進(jìn)行選房、購(gòu)房,計(jì)劃在前端展示上海地區(qū)的房?jī)r(jià)統(tǒng)計(jì)信息,包括地區(qū)均價(jià)、房源數(shù)量等,同時(shí)設(shè)計(jì)了檢索篩選功能,用戶可以通過單關(guān)鍵詞或者多關(guān)鍵詞從數(shù)據(jù)庫(kù)中獲取所需房源信息,此外為了更加直觀的展示地區(qū)房源信息,調(diào)用了高德地圖API,用戶可以通過關(guān)鍵字在地圖上檢索某一地區(qū)的房源,房源信息將在地圖上標(biāo)注,用戶點(diǎn)擊后可以得到相應(yīng)的二手房和租房信息。
1.2功能需求
根據(jù)前一節(jié)的具體設(shè)計(jì)目標(biāo)和需求,本文的房?jī)r(jià)數(shù)據(jù)抓取與分析系統(tǒng)需要滿足以下的功能需求。
(1)房源數(shù)據(jù)抓取是本系統(tǒng)開發(fā)的基礎(chǔ),無論是房?jī)r(jià)模型的建立還是后續(xù)前端數(shù)據(jù)展示都依托于房源數(shù)據(jù),所以房?jī)r(jià)數(shù)據(jù)抓取與分析系統(tǒng)的首要需求就是實(shí)現(xiàn)房源數(shù)據(jù)的抓取。該需求要求系統(tǒng)能夠自動(dòng)從目標(biāo)房源信息網(wǎng)站上抓取有關(guān)的房源信息,并進(jìn)行保存。爬取的數(shù)據(jù)要盡可能完整,效率不能過低,同時(shí)能應(yīng)對(duì)數(shù)據(jù)爬取過程中出現(xiàn)的意外情況。
(2)房?jī)r(jià)數(shù)據(jù)處理與分析在獲取了目標(biāo)房源數(shù)據(jù)后,為了后續(xù)的數(shù)據(jù)分析,需要對(duì)獲取的原始房源數(shù)據(jù)進(jìn)行簡(jiǎn)單的預(yù)處理,預(yù)處理根據(jù)獲取數(shù)據(jù)的實(shí)際特點(diǎn)進(jìn)行針對(duì)性處理。在得到處理后的房源數(shù)據(jù)集后,采用合適的模型對(duì)數(shù)據(jù)集進(jìn)行建模分析,得到房?jī)r(jià)模型,同時(shí)通過不同模型的比較得到最符合實(shí)際的房?jī)r(jià)模型,實(shí)現(xiàn)房?jī)r(jià)的預(yù)測(cè)。
(3)房?jī)r(jià)數(shù)據(jù)前端展示是為了讓用戶更加方便地進(jìn)行選房、購(gòu)房,需要在前端展示房源數(shù)據(jù)以及地區(qū)的房源統(tǒng)計(jì)信息,并能根據(jù)關(guān)鍵詞實(shí)現(xiàn)房源數(shù)據(jù)的混合檢索,篩選出符合用戶需求的房源信息,同時(shí)為用戶提供房?jī)r(jià)模型得出的房?jī)r(jià)參考值。此外滿足用戶直接在地圖上指定區(qū)域選房的需求,實(shí)現(xiàn)更加高效的獲取所需房源數(shù)據(jù)。
1.3用例分析
使用用例圖來對(duì)需求涉及的場(chǎng)景進(jìn)行描述,可以更加清楚地說明系統(tǒng)與用戶之間的交互。
(1)房?jī)r(jià)數(shù)據(jù)管理用例
圖1展示了管理員管理房?jī)r(jià)數(shù)據(jù)的用例圖,包括使用爬蟲獲取原始房源數(shù)據(jù),接著是對(duì)房源數(shù)據(jù)的處理,最后對(duì)新的房源數(shù)據(jù)集進(jìn)行訓(xùn)練,得到房?jī)r(jià)模型。
(2)房源數(shù)據(jù)檢索用例
圖2展示了用戶檢索房源數(shù)據(jù)的用例圖,包括通過關(guān)鍵詞搜索房源以及查看該地區(qū)的房源統(tǒng)計(jì)信息。
(3)地圖搜索房源用例
圖3展示了地圖房源信息的用例圖,包括通過搜索關(guān)鍵詞在地圖定位、目的地周邊小區(qū)顯示、小區(qū)內(nèi)房源信息展示。
2系統(tǒng)設(shè)計(jì)
2.1總體結(jié)構(gòu)設(shè)計(jì)
好的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)對(duì)于系統(tǒng)的性能起著至關(guān)重要的作用。本房?jī)r(jià)數(shù)據(jù)抓取與分析系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)主要體現(xiàn)在第三部分的房?jī)r(jià)數(shù)據(jù)展示。第一階段的房?jī)r(jià)數(shù)據(jù)獲取以及第二階段的房?jī)r(jià)數(shù)據(jù)處理與分析實(shí)際上是取得目標(biāo)數(shù)據(jù)的過程。當(dāng)然爬蟲程序也可以看成是一個(gè)子系統(tǒng),但該系統(tǒng)的結(jié)構(gòu)相對(duì)較為簡(jiǎn)單,所以本部分不做過多闡述。房?jī)r(jià)數(shù)據(jù)展示部分使用的是較為經(jīng)典的MVC三層架構(gòu),即模型層(model)、視圖層(view)和控制器(controller),其中模型層主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),在該部分對(duì)應(yīng)于房源數(shù)據(jù)集,視圖層負(fù)責(zé)將數(shù)據(jù)在前端展示,控制器負(fù)責(zé)接受用戶操作,并根據(jù)操作從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),該部分中對(duì)應(yīng)于響應(yīng)前端用戶發(fā)起的數(shù)據(jù)檢索等請(qǐng)求,從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)后再調(diào)用視圖顯示數(shù)據(jù)。圖4展示的是房?jī)r(jià)數(shù)據(jù)展示的系統(tǒng)結(jié)構(gòu)圖。
2.2功能模塊設(shè)計(jì)
功能模塊設(shè)計(jì)是將程序劃分成若干個(gè)功能模塊,每一個(gè)模塊分別完成一個(gè)子功能,這些功能模塊總體構(gòu)成了系統(tǒng)。在功能模塊的設(shè)計(jì)的過程中需要遵循高內(nèi)聚、松耦合的原則,所謂高內(nèi)聚就是要提高模塊內(nèi)各個(gè)元素之間的緊密程序,低耦合就是要減少模塊間的數(shù)據(jù)交換,從而降低程序復(fù)雜度。結(jié)合這些設(shè)計(jì)原則對(duì)房?jī)r(jià)數(shù)據(jù)抓取與分析系統(tǒng)進(jìn)行了劃分。
(1)房?jī)r(jià)數(shù)據(jù)抓取功能模塊
該模塊主要實(shí)現(xiàn)了房?jī)r(jià)數(shù)據(jù)的抓取,首先輸入需要爬取的目標(biāo)房源網(wǎng)址,爬蟲程序判斷網(wǎng)址信息是否準(zhǔn)確,然后從目標(biāo)網(wǎng)頁上獲取房源信息,同時(shí)將新增的房源網(wǎng)址放到url隊(duì)列中,程序不斷循環(huán)直到?jīng)]有待爬取的房源網(wǎng)址。圖5展示了房?jī)r(jià)數(shù)據(jù)爬蟲程序的流程圖。
(2)房?jī)r(jià)數(shù)據(jù)處理與分析模塊
該模塊主要實(shí)現(xiàn)對(duì)爬取房?jī)r(jià)數(shù)據(jù)的預(yù)處理并使用機(jī)器學(xué)習(xí)算法構(gòu)建房?jī)r(jià)模型,在數(shù)據(jù)預(yù)處理部分根據(jù)獲取房?jī)r(jià)數(shù)據(jù)的特征進(jìn)行針對(duì)性處理,比如獲取的數(shù)據(jù)的類型是字符串,需要轉(zhuǎn)化為數(shù)值類型才能進(jìn)行后續(xù)建模。在數(shù)據(jù)分析部分選取機(jī)器學(xué)習(xí)中的常見算法對(duì)房?jī)r(jià)數(shù)據(jù)集進(jìn)行訓(xùn)練,通過比較選取與實(shí)際房?jī)r(jià)擬合度高的模型,同時(shí)嘗試調(diào)整模型中的參數(shù)。
(3)房?jī)r(jià)數(shù)據(jù)前端展示模塊
該模塊主要提供房源信息檢索和地圖搜索房源這兩個(gè)功能,在房源信息檢索中用戶可以根據(jù)自己的需求選擇房源信息關(guān)鍵詞,系統(tǒng)根據(jù)關(guān)鍵詞返回符合條件的房源,用戶可以點(diǎn)擊每一條房源查看詳細(xì)信息,同時(shí)用戶也可以查看地區(qū)的房源統(tǒng)計(jì)信息。在地圖搜索房源部分,用戶可以輸入目的地關(guān)鍵詞,系統(tǒng)在地圖上定位目的地,同時(shí)查找目的地周圍的所有小區(qū),小區(qū)在側(cè)欄分頁顯示,通過點(diǎn)擊每一個(gè)小區(qū)用戶可以查看該小區(qū)內(nèi)房源信息。圖6是房?jī)r(jià)數(shù)據(jù)前端展示部分的程序流程圖。
3系統(tǒng)實(shí)現(xiàn)
3.1房?jī)r(jià)數(shù)據(jù)抓取實(shí)現(xiàn)
本文系統(tǒng)選取了鏈家網(wǎng)上海二手房源的以下信息進(jìn)行爬取,包括小區(qū)名稱、所在區(qū)域、房屋戶型、建筑面積、單價(jià)、總價(jià)、房屋朝向、所在樓層、裝修情況、該房源信息所在網(wǎng)址等信息。
在房源數(shù)據(jù)爬蟲程序中主要采用的是寬度優(yōu)先遍歷策略,首先將每一頁上的所有二手房源記錄的網(wǎng)址信息爬取,用list數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)這些網(wǎng)址信息,該list相當(dāng)于ud管理器,接著從url列表中逐次取出每套二手房詳細(xì)信息所在的網(wǎng)址,接著訪問該網(wǎng)址,爬取其中所需的房源信息。詳細(xì)的步驟如下:
第一步:獲取分頁信息。通過檢查網(wǎng)頁可以定位到分頁標(biāo)簽所在位置,從中我們可以看到當(dāng)前所在的頁數(shù)(curPage)以及總共頁數(shù)(totalPage),通過觀察發(fā)現(xiàn)每頁的結(jié)構(gòu)是固定的,ud結(jié)構(gòu)https://sh.1ianjia.com/ershoufang/pg{page}/,{page}代表當(dāng)前的頁數(shù)。為此編寫獲取所有二手房源記錄所在頁url函數(shù),獲取的url存儲(chǔ)在list中。
第二步:獲取當(dāng)前頁中二手房源詳細(xì)信息所在網(wǎng)頁url。在獲取了所有的分頁信息后,下一步需要獲取每一頁上二手房源詳細(xì)信息所在的網(wǎng)頁ud。通過檢查網(wǎng)頁定位到每條二手房源記錄所在位置,從網(wǎng)頁結(jié)構(gòu)中可以看到每條二手房源信息所在ud位于類名為title的div標(biāo)簽下的超鏈接標(biāo)簽中,為此編寫獲取url的函數(shù)。首先是向目標(biāo)地址服務(wù)器發(fā)送請(qǐng)求,獲取服務(wù)器響應(yīng)的內(nèi)容,然后為網(wǎng)頁信息創(chuàng)建對(duì)象,將會(huì)將網(wǎng)頁信息轉(zhuǎn)化成一個(gè)樹形結(jié)構(gòu),通過調(diào)用對(duì)象中的各種函數(shù)可以篩選元素,通過標(biāo)簽名、類名、id名等方式實(shí)現(xiàn)元素篩選,這里需要查找的是類名為title的div標(biāo)簽。最后在篩選的div標(biāo)簽中找到超鏈接網(wǎng)址并存儲(chǔ)到列表中。
第三步:獲取每套二手房詳細(xì)信息。獲取二手房信息的方式與第二步中獲取二手房詳細(xì)信息url類似,同樣是通過創(chuàng)建對(duì)象進(jìn)行解析,不過由于標(biāo)簽結(jié)構(gòu)的復(fù)雜度提高,篩選元素的過程也相應(yīng)復(fù)雜些,為此編寫getHouseInfo函數(shù)(節(jié)選了部分信息的獲取),如圖7所示。
每一條二手房源的信息存儲(chǔ)在了houseinfo字典中,房源信息中的每個(gè)屬性對(duì)應(yīng)字典中的key,而屬性值對(duì)應(yīng)字典中的val-ue。最后將每一條二手房的房源信息存儲(chǔ)到本地?cái)?shù)據(jù)庫(kù)中名為sechouse的表中。
3.2房?jī)r(jià)數(shù)據(jù)處理與分析實(shí)現(xiàn)
在完成第一部分的上海房源數(shù)據(jù)獲取工作后,第二部分中我們將對(duì)獲取的上海房?jī)r(jià)數(shù)據(jù)進(jìn)行相應(yīng)的處理,并通過機(jī)器學(xué)習(xí)中的相關(guān)算法對(duì)上海二手房?jī)r(jià)數(shù)據(jù)集進(jìn)行訓(xùn)練,得到二手房?jī)r(jià)的模型,并比較不同算法得到模型的性能,通過二手房?jī)r(jià)的模型我們可以對(duì)現(xiàn)有的二手房房?jī)r(jià)進(jìn)行預(yù)估,并判斷其預(yù)測(cè)值與市場(chǎng)值之間的大小關(guān)系,從而給購(gòu)房者一定的參考,同時(shí)也可以為新出現(xiàn)的二手房進(jìn)行預(yù)估。
(1)數(shù)據(jù)處理
通過對(duì)數(shù)據(jù)集的觀察可以初步從以下幾個(gè)角度來處理數(shù)據(jù),一是房屋戶型現(xiàn)在是以字符串形式存儲(chǔ),例如,房屋戶型為2室2廳1廚2衛(wèi),這樣的數(shù)據(jù)顯然是無法進(jìn)行數(shù)據(jù)分析的,所以我們要將戶型根據(jù)室、廳、廚、衛(wèi)分開,并且只保留1、2、3這樣的數(shù)字,同時(shí)為了后續(xù)的數(shù)值計(jì)算,需要將原本字符串類型的數(shù)值轉(zhuǎn)化成float類型。二是單價(jià)、總價(jià)、建筑面積后的單位需要?jiǎng)h除,其數(shù)值類型也需要轉(zhuǎn)化成float類型。三是房屋朝向中存在著冗余信息,房屋朝向主要參考的是主立面所對(duì)方向,像“南北”這樣的數(shù)據(jù)顯然指的是坐北朝南,所以要將其中的干擾和冗余信息去除,此外將所在樓層中括號(hào)中的總樓層去除,方便后續(xù)的數(shù)據(jù)集訓(xùn)練。
(2)模型建立與房?jī)r(jià)預(yù)測(cè)
在獲取數(shù)據(jù)以及對(duì)數(shù)據(jù)的預(yù)處理后,期望發(fā)掘出這些數(shù)據(jù)的價(jià)值,所以這一部分的研究重點(diǎn)聚焦于房?jī)r(jià)建模,以實(shí)現(xiàn)上海二手房房?jī)r(jià)的預(yù)測(cè)。在房?jī)r(jià)預(yù)測(cè)過程中主要使用的是多元線性回歸和隨機(jī)森林兩種機(jī)器學(xué)習(xí)模型,首先使用獲取的數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練,然后使用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)分析。在進(jìn)行數(shù)據(jù)集訓(xùn)練前,對(duì)數(shù)據(jù)集中的字符數(shù)值化,并且將數(shù)據(jù)集按照訓(xùn)練集和測(cè)試集劃分。通過兩者比較得出:隨機(jī)森林模型與多元線性回歸相比訓(xùn)練得到的二手房?jī)r(jià)模型與實(shí)際擬合度更高,多元線性回歸訓(xùn)練的模型中會(huì)存在異常值,而在隨機(jī)森林模型中則并未出現(xiàn)這些異常值,準(zhǔn)確率更高。
(3)前端展示
①數(shù)據(jù)檢索
為了讓用戶可以方便快速的篩選出符合自己條件的二手房源信息,在前端設(shè)計(jì)了檢索工具,用戶可以通過選取條件或者自己設(shè)置條件從數(shù)據(jù)庫(kù)中獲取所需的房源信息,從而簡(jiǎn)化選房的過程,此處篩選條件是靈活的,用戶可以通過單關(guān)鍵字或者多關(guān)鍵字混合查詢所需的房源信息,如圖8所示。
②房源統(tǒng)計(jì)信息展示
除了設(shè)計(jì)二手房的檢索功能,還考慮將二手房的相關(guān)統(tǒng)計(jì)信息在前端展示,主要通過ECharts動(dòng)態(tài)構(gòu)建圖表展示上海地區(qū)二手房的地區(qū)分布,各地區(qū)均價(jià)等信息。下圖9是前端展示的上海二手房地區(qū)分布餅圖以及各地區(qū)均價(jià)柱狀圖。
⑧地圖選房
在前端展示部分還設(shè)計(jì)了地圖選房功能,通過用戶指定一區(qū)域,地圖可以直觀顯示該區(qū)域的二手房源和租房數(shù)量,同時(shí)在地圖上標(biāo)識(shí)這些房源所在的小區(qū),用戶可以點(diǎn)擊相應(yīng)的小區(qū)查看該小區(qū)下房源和租房信息。加入地圖選房這一模塊是為了讓用戶對(duì)所選房屋在地理上有直觀的認(rèn)識(shí),從而更加方便進(jìn)行選房和租房,如圖10所示。
4結(jié)束語
本文將上海房源數(shù)據(jù)作為研究對(duì)象,實(shí)現(xiàn)了房?jī)r(jià)數(shù)據(jù)的獲取、處理、分析、展示。首先,爬取了鏈家網(wǎng)上的上海房源數(shù)據(jù),然后對(duì)房源數(shù)據(jù)進(jìn)行了預(yù)處理,接著使用機(jī)器學(xué)習(xí)中相關(guān)算法對(duì)房?jī)r(jià)數(shù)據(jù)集進(jìn)行訓(xùn)練,通過比較得到與實(shí)際房?jī)r(jià)擬合度較高的房?jī)r(jià)預(yù)測(cè)模型。最后在前端使用ECharts中的圖表展示上海地區(qū)的房源統(tǒng)計(jì)信息,并設(shè)計(jì)了房源信息檢索功能和房?jī)r(jià)預(yù)測(cè)功能,此外還調(diào)用高德API構(gòu)建地圖實(shí)現(xiàn)目標(biāo)區(qū)域內(nèi)房源信息查詢功能。