摘? 要:文章以都勻市出租房為例,運(yùn)用Python對(duì)安居客網(wǎng)上房源信息進(jìn)行采集,對(duì)獲取的數(shù)據(jù)進(jìn)行清洗和處理,并從數(shù)據(jù)中選擇小區(qū)、戶型、朝向、住房面積和租房?jī)r(jià)格等特征進(jìn)行數(shù)據(jù)分析和可視化展示,最后使用隨機(jī)森林模型對(duì)租金價(jià)格進(jìn)行預(yù)測(cè)。通過分析與價(jià)格預(yù)測(cè),以期幫助尋租者在選擇房源時(shí)能獲取特定的需求信息,從而做出更好的決策。
關(guān)鍵詞:出租房;數(shù)據(jù)分析;可視化;租金;隨機(jī)森林
中圖分類號(hào):TP311;TP181? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2021)16-0096-04
Rental Information Visualization and Price Prediction Based on Python
LI Tao
(School of Computer and Information, Qiannan Normal University for Nationalities, Duyun? 558000, China)
Abstract: Taking the rental housing in Duyun City as an example, this paper uses Python to collect the housing source information of Anjuke real estate network, cleans and processes the obtained data, selects the characteristic data of community, house type, orientation, housing area and rental price from the data for data analysis and visual display, and finally uses the random forest model to predict the rental price. Through analysis and price forecasting, it is expected to help renters obtain required information when selecting houses, so as to make better decisions.
Keywords: rental housing; data analysis; visualization; rent; random forest
0? 引? 言
在中國(guó)持續(xù)城鎮(zhèn)化建設(shè)過程中,農(nóng)村富余勞動(dòng)力逐步向城市進(jìn)行轉(zhuǎn)移[1]。由于現(xiàn)階段城鎮(zhèn)的房?jī)r(jià)高,買房比較困難,相當(dāng)多買不起房的人只能租房。因此,這些年來國(guó)內(nèi)的租房人群十分龐大,市場(chǎng)需求也很旺盛。與此同時(shí),房?jī)r(jià)是在不斷上漲的,租金也隨著房?jī)r(jià)的上漲而上漲。文章以貴州省黔南州都勻市為例,以安居客租房網(wǎng)站上的掛牌房源數(shù)據(jù)為研究對(duì)象,對(duì)采集原始數(shù)據(jù)進(jìn)行清理、異常值和缺失值處理以及特征向量數(shù)字化處理等工作,并選取相應(yīng)特征向量進(jìn)行可視化分析。在此基礎(chǔ)上,運(yùn)用隨機(jī)森林預(yù)測(cè)模型來預(yù)測(cè)租金價(jià)格以及走向。其工作主要集中在以下6個(gè)方面:
(1)選取并收集URL,存儲(chǔ)在待抓取的URL列表。
(2)使用Requests庫(kù)抓取頁(yè)面。
(3)使用Beautiful Soup解析頁(yè)面內(nèi)容。
(4)數(shù)據(jù)存儲(chǔ)及預(yù)處理。
(5)分析數(shù)據(jù)并可視化。
(6)運(yùn)用隨機(jī)森林模型預(yù)測(cè)房租價(jià)格。
通過分析,可以了解到目前市面上出租房各項(xiàng)基本特征及房源分布情況,并對(duì)不同區(qū)域房租價(jià)格進(jìn)行預(yù)測(cè),為群體大眾進(jìn)行租房決策提供了參考意見,還會(huì)對(duì)當(dāng)?shù)卣侠淼匾?guī)范租房市場(chǎng)提供重要的數(shù)據(jù)支持。
1? 數(shù)據(jù)采集及預(yù)處理
1.1? 選取及提取網(wǎng)頁(yè)
選取安居客黔南都勻租房頁(yè)面(https://qn.zu.anjuke.com/fangyuan/duyun/),頁(yè)面上顯示所有出租房房源信息共25頁(yè)。通過分析這些頁(yè)面的URL地址,發(fā)現(xiàn)其呈現(xiàn)出如下規(guī)律,除了第一頁(yè)URL地址為“https://qn.zu.anjuke.com/fangyuan/duyun/px”其他頁(yè)面的URL地址為“https://qn.zu. anjuke .com/fangyuan /duyun/px3-p+數(shù)字”。網(wǎng)頁(yè)獲取代碼為:
url_list = []
for i in range(25):
if i == 0:
url = ‘https://qn.zu.anjuke.com/fangyuan/duyun/px3’
url_list.append(url)
else:
url = ‘https://qn.zu.anjuke.com/fangyuan/duyun/px3-p’+str(i + 2) + ‘/’
url_list.append(url)
for i in range(len(url_list)):
response = requests.get(url_list[i], headers=headers)
1.2? 使用Beautiful Soup解析頁(yè)面內(nèi)容
Beautiful Soup提供一些簡(jiǎn)單的、python式的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功能。它通過解析文檔為用戶提供需要抓取的數(shù)據(jù)[2]。Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強(qiáng)勁的速度[3]。針對(duì)下載的網(wǎng)頁(yè)文檔,使用Beautiful Soup提供各種選擇器進(jìn)行目標(biāo)數(shù)據(jù)的解析并抽取。核心代碼為:
soup = BeautifulSoup(response.text, ‘lxml’)
totaldivlist = soup.find_all(“div”, attrs={“class”, “zu-itemmod”}) #每頁(yè)房源信息列表
lenth = len(totaldivlist)? #每頁(yè)房源的數(shù)目
for j in range(lenth):
house_info = totaldivlist[j].find(“div”, attrs={“class”, “zu-info”}) #房源名
house_name = house_b[0].text
house_u = house_info.find(name=”a”)
house_url = house_u[‘href’]#房源的鏈接
house_t = totaldivlist[j].find(“p”, attrs={“class”, “details-item tag”})
house_ty = house_t.find_all(name=”b”) #戶型
for k in range(len(house_ty)):
if k == 0:
house_type += house_ty[k].text + ‘室’
elif k == 1:
house_type += house_ty[k].text + ‘廳’
else:
house_area = house_ty[k].text + ‘平米’#房源面積
house_location = totaldivlist[j].find(“span”, attrs={“class”, “cls-2”}).text #戶型朝向
address = totaldivlist[j].find(“address”, attrs={“class”, “details-item”}).text #地址
price_span = totaldivlist[j].find(“div”, attrs={“class”, “zu-side”})
price = price_span.find(‘b’).text + ‘元/月’? #租房?jī)r(jià)格
1.3? 數(shù)據(jù)清理及存儲(chǔ)
1.3.1? 數(shù)據(jù)清理
從網(wǎng)頁(yè)中獲取的數(shù)據(jù)均為文本數(shù)據(jù),這些數(shù)據(jù)并不能直接進(jìn)行數(shù)據(jù)分析。在數(shù)據(jù)分析和可視化之前,需要先去掉一些臟數(shù)據(jù),修正一些錯(cuò)誤數(shù)據(jù),對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行預(yù)處理,如房租價(jià)格、房屋面積的數(shù)字化處理,房型數(shù)據(jù)的分割(廳、室和衛(wèi)),如3室1廳1衛(wèi)等。
1.3.2? 數(shù)據(jù)存儲(chǔ)
為了能夠?qū)Τ鲎夥糠吭葱畔⑦M(jìn)行可視化,同時(shí)對(duì)租房?jī)r(jià)格趨勢(shì)做出合理的預(yù)測(cè),獲取的房源數(shù)據(jù),是從安居客網(wǎng)爬取的2021年3月到6月掛牌都勻市出租房房源信息,共1 039條數(shù)據(jù)。
Python中,常用數(shù)據(jù)存儲(chǔ)是數(shù)據(jù)庫(kù)(MySQL或Redis數(shù)據(jù)庫(kù))以及文件存儲(chǔ),如CSV文件和Excel文檔等。本文中采用CSV文件進(jìn)行數(shù)據(jù)存儲(chǔ)。
2? 數(shù)據(jù)分析與可視化
本階段是對(duì)房源數(shù)據(jù)從整體上進(jìn)行探究性分析,通過數(shù)據(jù)可視化呈現(xiàn),能更好、更直觀的認(rèn)識(shí)數(shù)據(jù),并尋找和探尋數(shù)據(jù)背后的內(nèi)在規(guī)律。文章針對(duì)出租房房源的所屬小區(qū)、住房面積、戶型(室數(shù)、廳數(shù)和衛(wèi)數(shù))、朝向和出租房?jī)r(jià)格等特征項(xiàng)進(jìn)行分析。
2.1? 都勻出租房基本信息可視化分析
2.1.1? 都勻各熱門小區(qū)出租房及占比分析
都勻各熱門小區(qū)出租房及占比分析餅圖如圖1所示,選取并顯示房源數(shù)量最多的7個(gè)熱門小區(qū)。從圖中可以看出,伯爵花園小區(qū)提供的房源占據(jù)了整體房源數(shù)據(jù)中的31.250%,其他各個(gè)小區(qū)的占比差別不大。由此看出,房源的地理位置很大程度決定租房的需求,鄰近市中心區(qū)域,租房的需求和房源供應(yīng)量就隨之提升。
2.1.2? 出租房屋面積的分布
如圖2都勻出租房面積餅圖所示,大約82%的房源的建筑面積集中在100平方米以下,大面積的房源數(shù)量比較少。面積80平方米以下房源數(shù)據(jù)覆蓋的范圍比較廣泛,滿足絕大多數(shù)租房者的租賃需求。
2.2? 出租房?jī)r(jià)格可視化分析
2.2.1? 都勻租房?jī)r(jià)格區(qū)間與房源數(shù)量之間關(guān)系
都勻各熱門小區(qū)租房每月均價(jià)與房源數(shù)量之間關(guān)系如圖3所示。從圖中可以看出,能提供出租房源數(shù)量最多小區(qū)是伯爵花園小區(qū),共74套,每月租房均價(jià)1 392元。每月租房均價(jià)最高小區(qū)是碧桂園濱江一號(hào),每月均價(jià)為2 257元,共20套。提供出租房源數(shù)量最少小區(qū)是文峰家園小區(qū),共13套,每月租房均價(jià)1 223元。每月租房均價(jià)最低小區(qū)是平惠小區(qū),每月均價(jià)為950元,共20套。
2.2.2? 都勻租房?jī)r(jià)格與出租房面積之間關(guān)系
都勻出租房面積與每月租房均價(jià)關(guān)系如圖4所示。從圖中可以看出150平方米以上的房租每月均價(jià)是最高的,為1 904元/月。30平方米以下的房租每月均價(jià)是最低的,為751元/月。
每月租房均價(jià)的范圍從751元/月到1 646元/月,面積從30平方米到150平方米,完全滿足絕大多數(shù)人的租賃需求。位置的選擇上基本覆蓋都勻市主要的各個(gè)熱門小區(qū)。
3? 房租價(jià)格預(yù)測(cè)分析
近年來,作為機(jī)器學(xué)習(xí)算法之一的隨機(jī)森林受到越來越廣泛的關(guān)注。隨機(jī)森林[4]是一種統(tǒng)計(jì)學(xué)習(xí)理論,利用bootstrap抽樣的方式從原始數(shù)據(jù)集中抽取多個(gè)樣本,對(duì)每個(gè)bootstrap樣本進(jìn)行決策樹建模,組合多個(gè)決策樹投票得到最終預(yù)測(cè)結(jié)果。
隨機(jī)森林算法具有需要調(diào)整的參數(shù)較少、不必?fù)?dān)心過度擬合、分類速度快、能高效處理大樣本數(shù)據(jù)、能估計(jì)特征因素的重要性、很好的處理類別變量、有較強(qiáng)的抗噪聲能力等優(yōu)點(diǎn)[5]。與線性回歸相比,避免了線性回歸事先假定的線性關(guān)系不符合實(shí)際造成較大誤差的情況。且隨機(jī)森林不用對(duì)函數(shù)形式事先進(jìn)行假設(shè),避免了假設(shè)誤差。
首先利用自助抽樣法,從原始數(shù)據(jù)集中抽取B個(gè)樣本,且每個(gè)樣本容量都與原始數(shù)據(jù)集相同;然后對(duì)B個(gè)樣本分別建立B棵樹,得到B個(gè)結(jié)果;最后,對(duì)這B個(gè)結(jié)果取平均值得到最終的預(yù)測(cè)結(jié)果。基于隨機(jī)森林的出租房?jī)r(jià)格評(píng)估模型計(jì)算如下,出租房的隨機(jī)森林模型由B棵樹組成,{F1(X),F(xiàn)2(X),…,F(xiàn)B(X)},其中X={x1,x2,…,xp}是出租房的維特征向量。結(jié)果會(huì)產(chǎn)生B個(gè)結(jié)果,,……,。其中,是第b棵樹的預(yù)測(cè)結(jié)果。算法流程為:
(1)原始數(shù)據(jù)含樣本量為1 039多個(gè),應(yīng)用bootstrap方式抽樣選擇30個(gè)樣本集,構(gòu)建30棵決策樹。每次抽樣未被抽到的樣本構(gòu)成OOB樣本作為隨機(jī)森林的驗(yàn)證樣本。
(2)樣本中特征變量個(gè)數(shù)為6,使用隨機(jī)森林做回歸時(shí),通常選取特征變量個(gè)數(shù)除以3。本文每一次劃分選擇2個(gè)變量。
(3)每一棵決策樹生長(zhǎng)到最大,無須進(jìn)行剪枝,重復(fù)上述步驟直到生成30棵決策樹。
通過如上步驟,建立得到出租房的隨機(jī)森林價(jià)格評(píng)估模型,將OOB樣本輸入隨機(jī)森林模型得到房?jī)r(jià)預(yù)測(cè)精度。預(yù)測(cè)效果如圖5所示。
從圖5中可以看到隨機(jī)森林模型有較好的評(píng)估精度,能夠有效的挖掘出樣本所隱含的信息,能較準(zhǔn)確地對(duì)房租價(jià)格進(jìn)行預(yù)測(cè),具有實(shí)用價(jià)值[6]。
4? 結(jié)? 論
本文通過爬蟲程序爬取都勻市出租房房源信息,通過數(shù)據(jù)清理及預(yù)處理后,以可視化方式對(duì)不同小區(qū)的租房?jī)r(jià)格,戶型類型及租房面積進(jìn)行展示,同時(shí)引入隨機(jī)森林預(yù)測(cè)模型對(duì)房租價(jià)格進(jìn)行較為準(zhǔn)確的預(yù)測(cè),為尋租者在查找出租房源的過程中提供了便利。
參考文獻(xiàn):
[1] 王鳳麗,侯建華.邊緣青年的現(xiàn)狀與出路 [N].中華讀書報(bào),2021-02-10(19).
[2] 崔慶才.Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)教程 [M].北京:人民郵電出版社,2018:168
[3]陳海燕,朱慶華,?,?基于Python的網(wǎng)頁(yè)信息爬取技術(shù)研究 [J].電腦知識(shí)與技術(shù),2021,17(8):195-196.
[4] 葛新權(quán),張守一.變系數(shù)季度預(yù)測(cè)模型 [J].預(yù)測(cè).1995(1):62-63+55.
[5] 劉冬琴.自然場(chǎng)景下交通標(biāo)志檢測(cè)算法研究 [D].北京:北京交通大學(xué),2016.
[6] 王洪.基于K-means和BP神經(jīng)網(wǎng)絡(luò)的房租價(jià)格批量評(píng)估研究 [D].武漢:華中農(nóng)業(yè)大學(xué),2019.
作者簡(jiǎn)介:李濤(1974.05—)男,漢族,安徽蕪湖人,副教授,碩士研究生,研究方向:智能信息處理及軟件工程。