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