基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

[2]。高校畢業(yè)生的租房需求呈現(xiàn)出多樣性和復雜性。畢業(yè)生在選擇租房時通常會考慮到眾多因素,包括地理位置、租金水平、交通便捷性、社區(qū)環(huán)境等。然而,傳統(tǒng)的租房信息平臺難以全面理解和滿足畢業(yè)生個性化的需求。機器學習技術(shù)的應(yīng)用為解決租房信息不全問題提供了新的思路。通過爬蟲爬取數(shù)據(jù),再對這些數(shù)據(jù)進行清洗、統(tǒng)計和可視化分析,可以為用戶挖掘出隱藏在網(wǎng)絡(luò)數(shù)據(jù)中的所有房源的分布情況以及價格等特征走向,幫助用戶做出更好的決策[3]。結(jié)合機器學習算法對大量租房數(shù)據(jù)的處理,有望實現(xiàn)為畢業(yè)生提供信息支持,以提高租房匹配度,降低信息檢索成本。本研究的意義在于,通過構(gòu)建基于機器學習的畢業(yè)生租房數(shù)據(jù)系統(tǒng),不僅可以為畢業(yè)生提供更為智能、精準的租房信息服務(wù),也有助于優(yōu)化城市租房市場的資源配置,提升整體租房體驗。這一系統(tǒng)的設(shè)計與實現(xiàn)將為租房領(lǐng)域引入新的技術(shù)手段,推動傳統(tǒng)租房模式向智能化方向邁進,具有重要的社會和商業(yè)價值。通過深入研究高校畢業(yè)生租房問題,結(jié)合機器學習算法的應(yīng)用,本研究旨在提高租房市場的效率和質(zhì)量,為畢業(yè)生提供更好的租房服務(wù),同時推動智能技術(shù)在社會生活中的廣泛應(yīng)用,從而為城市化發(fā)展提供有益參考。1.2研究方向與現(xiàn)狀傳統(tǒng)租房平臺在信息匹配度和個性化服務(wù)方面存在瓶頸,難以滿足畢業(yè)生多樣化的租房需求。隨著智能技術(shù)的不斷發(fā)展,機器學習算法在房地產(chǎn)領(lǐng)域的應(yīng)用逐漸成為研究和實踐的熱點,為提高租房市場效率提供了新的解決方案。畢業(yè)生對租房體驗的要求逐漸提升,個性化、智能化的租房服務(wù)成為市場的發(fā)展趨勢。通過對畢業(yè)生租房問題的研究,結(jié)合機器學習算法的應(yīng)用,本論文旨在為優(yōu)化畢業(yè)生租房體驗提供新的思路與解決方案。國內(nèi)學者對畢業(yè)生租房問題進行了廣泛研究。一些研究聚焦于租房市場的特點,通過實地調(diào)查和問卷調(diào)查,深入了解畢業(yè)生在租房過程中的需求、痛點和偏好。還有研究關(guān)注傳統(tǒng)租房平臺的運營機制和問題,提出了在信息匹配度、推薦算法等方面的優(yōu)化建議。此外,一些學者還關(guān)注畢業(yè)生就業(yè)與租房的關(guān)系,研究畢業(yè)生在就業(yè)城市的租房特點,為提供更精準的租房服務(wù)提供了依據(jù)。在國外,畢業(yè)生租房問題同樣引起了研究者的關(guān)注。一些發(fā)達國家的研究者通過引入智能技術(shù),提出了基于機器學習和數(shù)據(jù)挖掘的租房服務(wù)系統(tǒng)。他們關(guān)注房租、地區(qū)、政策對租金的影響,此外,一些學者還關(guān)注畢業(yè)生租房對社會的影響,包括對城市發(fā)展、社會結(jié)構(gòu)和居民生活方式的影響。在已有研究中,盡管對畢業(yè)生租房問題進行了一定程度的探討,但仍然存在一些共性問題。信息來源過少,信息匹配度不高、推薦算法有限以及租房平臺服務(wù)體驗不夠智能化等問題制約了畢業(yè)生租房服務(wù)的進一步優(yōu)化。部分學者提出了一些解決方案,包括基于機器學習的智能推薦系統(tǒng)、優(yōu)化信息匹配算法等,這些方案在提高租房服務(wù)的個性化、智能化方面取得了一定的成果,可以減少用戶在眾多產(chǎn)品和服務(wù)面前決策的復雜度[4],為進一步改善畢業(yè)生租房體驗提供了思路。畢業(yè)生租房問題已經(jīng)成為國內(nèi)外研究的熱點之一,然而,要真正解決其中存在的問題,仍需要深入挖掘數(shù)據(jù),數(shù)據(jù)中含有大量的價值等待人們?nèi)グl(fā)現(xiàn)與探索[5]。本論文將在此基礎(chǔ)上提出一種結(jié)合機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng),以期在實際應(yīng)用中取得更好的效果。1.3文獻綜述JunshengC,LifenP[6]利用python強大的數(shù)據(jù)采集處理技術(shù),實現(xiàn)區(qū)域網(wǎng)絡(luò)餐飲數(shù)據(jù)的處理,并且推送到數(shù)據(jù)庫,在后臺使用基于python的flask框架實現(xiàn)數(shù)據(jù)接口功能,結(jié)合ECharts等工具,完成數(shù)據(jù)可視化的實現(xiàn),對數(shù)據(jù)可視化的工具選用提供了借鑒思路。XiaojuM,MinY[7]等人對以安居客二手房信息進行抓取,根據(jù)爬蟲的原理和流程,對安居客的頁面結(jié)構(gòu)進行分析,獲取網(wǎng)頁數(shù)據(jù),再使用sqlserver進行數(shù)據(jù)的存儲。其數(shù)據(jù)獲取的流程,為本文系統(tǒng)實現(xiàn)提供了思路。OshodiSO,ThwalaDW,OdubiyiBT[8]等人于2018年收集了有關(guān)286個有關(guān)物業(yè)的數(shù)據(jù),構(gòu)建了神經(jīng)網(wǎng)絡(luò)模型對南非開普敦地區(qū)住宅租金進行預測,通過對模型敏感性分析,得出陽臺和樓層面積對租金影響最大,對租金預測的研究提供了思路.OtienoFO,TitusK,RaphaelK[9]針對肯尼亞住房市場供需失衡問題,選取1975到2020年的時間序列的數(shù)據(jù),使用多種模型預測肯尼亞的住房價格,采用線性回歸,多元回歸等方法進行建模,比較了各種方法的優(yōu)劣性,為機器學習方法選用提供了研究思路。1.4.本文的章節(jié)安排第二章詳細介紹了本系統(tǒng)會使用到的各項技術(shù),F(xiàn)lask框架、Echarts框架和深度學習框架、爬蟲技術(shù),為后續(xù)的功能規(guī)劃和實現(xiàn)奠定的基礎(chǔ)。第三章進行了需求分析與架構(gòu)設(shè)計描述,并進行程序?qū)崿F(xiàn)可行性分析。第四章講了了系統(tǒng)的兩大模塊設(shè)計,即是數(shù)據(jù)的獲取存儲和數(shù)據(jù)處理展示。并對其各自的流程進行了梳理。關(guān)鍵技術(shù)的使用在這兩個模塊中起到了舉足輕重的作用。第五章詳細描述了系統(tǒng)的實現(xiàn)方式。第六章是對本系統(tǒng)的測試描述,使用了三套測試用例,分別對數(shù)據(jù)爬蟲、用戶登錄、數(shù)據(jù)展示進行了全面的測試。最后對全文進行了總結(jié),討論了本論文工作需要進一步完善和深入研究的地方。2關(guān)鍵技術(shù)通過整合Flask、ECharts、爬蟲以及深度學習方法,將構(gòu)建一個全面、安全可靠的畢業(yè)生租房數(shù)據(jù)系統(tǒng),為用戶提供良好的體驗和有價值的信息。2.1Flask框架Flask在項目中扮演了后端服務(wù)的角色,通過處理請求和響應(yīng),連接前端和后端,為用戶提供數(shù)據(jù)服務(wù)和業(yè)務(wù)邏輯支持。Flask是由ArminRonacher于2010年創(chuàng)建的一個輕量級Pythonweb框架。ArminRonacher之前是Pocoo團隊的成員,他的目標是構(gòu)建一個簡單而靈活的框架,以便更容易地構(gòu)建Web應(yīng)用程序。用Flask進行Web編程非常方便和快捷,相比Java傳統(tǒng)的SSH框架使用更簡單[10]。Flask是一個微型框架,但它提供了構(gòu)建Web應(yīng)用程序所需的基本功能。它包括路由系統(tǒng)、模板引擎、請求和響應(yīng)處理、會話管理等核心功能。Flask的設(shè)計理念是“micro”(微型),它鼓勵使用擴展來添加額外的功能,使得框架保持簡單。Flask適用于構(gòu)建小到中型的Web應(yīng)用程序,Flask框架給開發(fā)人員提供了足夠的自由度,不限制開發(fā)者使用的工具或模板引擎由于它的輕量級和靈活性,它特別適用于需要快速原型設(shè)計、簡單的API開發(fā)以及對框架進行高度定制的場景[11]。Flask不強加項目結(jié)構(gòu),允許開發(fā)者按照自己的喜好組織項目。Flask的代碼結(jié)構(gòu)和API設(shè)計簡單,使得初學者能夠迅速上手。提供了基本的功能,但通過擴展可以輕松添加更多功能,保持了框架的靈活性。Flask有一個活躍的社區(qū),有大量的擴展可用,可以滿足各種需求。由于Flask是微型框架,它的開銷較小,適用于小型項目和快速原型設(shè)計。在畢業(yè)生租房數(shù)據(jù)系統(tǒng)中,F(xiàn)lask的主要作用是搭建后端服務(wù)。通過定義路由、請求處理函數(shù)和視圖,你可以響應(yīng)前端的請求,從數(shù)據(jù)庫中檢索數(shù)據(jù),并將結(jié)果返回給前端。Flask的簡單設(shè)計使得你能夠?qū)W⒂跇I(yè)務(wù)邏輯的實現(xiàn),而不必過多關(guān)注框架本身。2.2ECharts框架ECharts是百度開發(fā)的一款開源JavaScript圖表庫,于2012年首次發(fā)布。它的目標是提供一個功能豐富、靈活且美觀的數(shù)據(jù)可視化解決方案。自發(fā)布以來,ECharts迅速成為人們前端開發(fā)人員和數(shù)據(jù)分析師的首選圖標庫之一。ECharts提供了各種類型的圖表,包括折線圖、柱狀圖、餅圖、散點圖等。它支持大量的配置選項,可以自定義圖表的外觀和行為。ECharts還具有數(shù)據(jù)驅(qū)動的特性,可以通過簡單的JavaScript代碼將數(shù)據(jù)轉(zhuǎn)化為各種圖表。ECharts適用于各種數(shù)據(jù)可視化場景,包括但不限于業(yè)務(wù)報表、監(jiān)控儀表盤、地理信息可視化等。由于其靈活性和可擴展性,ECharts在大數(shù)據(jù)分析、BI系統(tǒng)以及各類Web應(yīng)用中廣泛應(yīng)用。ECharts支持多種圖表類型,滿足不同需求的數(shù)據(jù)可視化。用戶可以通過配置文件自定義圖表的外觀、交互和動畫效果。ECharts可以無縫集成到各種前端框架中,并且支持移動端和PC端的應(yīng)用。ECharts的插件系統(tǒng)和豐富的生態(tài)系統(tǒng)使得用戶可以方便地擴展其功能。在畢業(yè)生租房數(shù)據(jù)系統(tǒng)中,ECharts的主要作用是實現(xiàn)數(shù)據(jù)的可視化展示,通過Flask與SQLite進行交互,可在前端展示ECharts圖表中的數(shù)據(jù)[12]。使用ECharts繪制不同類型的圖表,你可以向用戶直觀地展示租房數(shù)據(jù)的趨勢、分布和關(guān)聯(lián)關(guān)系。ECharts的交互性和優(yōu)秀的可視化效果能夠提升用戶體驗,使得數(shù)據(jù)更易于理解和分析。ECharts在項目中扮演了數(shù)據(jù)可視化的關(guān)鍵角色,通過美觀、直觀的圖表呈現(xiàn),為用戶提供了更加友好和有效的數(shù)據(jù)展示方式。2.3PyTorch深度學習框架PyTorch是由Facebook開發(fā)的開源深度學習框架,于2016年首次發(fā)布。它的前身是Torch,但PyTorch采用了動態(tài)計算圖的方式,使得模型定義和訓練更加靈活。PyTorch在深度學習社區(qū)迅速崛起,成為研究人員和工程師們喜愛的框架之一。PyTorch采用動態(tài)計算圖,使用戶可以靈活地構(gòu)建、修改和調(diào)試模型,更適合研究和實驗。PyTorch提供了大量的工具和庫,包括torch.nn(神經(jīng)網(wǎng)絡(luò)構(gòu)建)、torch.optim(優(yōu)化算法)、torchvision(計算機視覺庫)等,方便用戶進行深度學習任務(wù)。支持即時執(zhí)行模式,可以逐行進行調(diào)試,簡化了代碼編寫和調(diào)試的過程。PyTorch擁有龐大而活躍的社區(qū),提供了大量的教程、文檔和論壇,方便用戶學習和解決問題。PyTorch廣泛應(yīng)用于學術(shù)界和工業(yè)界,適用于各種深度學習任務(wù),包括但不限于圖像處理、自然語言處理、語音識別、強化學習等。PyTorch特別適合研究人員進行實驗和創(chuàng)新,同時在產(chǎn)業(yè)界也得到了廣泛應(yīng)用。相比于靜態(tài)計算圖的框架,PyTorch的動態(tài)計算圖更具靈活性,更容易理解和調(diào)試。PyTorch的API設(shè)計簡單直觀,上手容易,尤其對于新手而言更加友好。具有龐大而積極的社區(qū),用戶可以分享經(jīng)驗、解決問題,獲得高質(zhì)量的支持。在畢業(yè)生租房數(shù)據(jù)系統(tǒng)中,PyTorch可用于實現(xiàn)深度學習模型。通過PyTorch可以輕松構(gòu)建、訓練和調(diào)試復雜的神經(jīng)網(wǎng)絡(luò)模型,充分發(fā)揮其靈活性和易用性的優(yōu)勢。2.4爬蟲技術(shù)本系統(tǒng)使用爬蟲技術(shù)實現(xiàn)對網(wǎng)頁的爬取:一是獲取URL和URL分頁的規(guī)律,二是發(fā)起請求,三是獲取響應(yīng)對象中的數(shù)據(jù)值,四是進行持久化存儲。由于抓取的原始數(shù)據(jù)格式一般為HTML、XML以及JSON,因此對目標數(shù)據(jù)還需要解析并持久化存儲[13,14]。爬蟲技術(shù)(WebScraping)起源于互聯(lián)網(wǎng)的早期階段,其目的是從網(wǎng)頁上提取數(shù)據(jù)。隨著互聯(lián)網(wǎng)的發(fā)展,爬蟲技術(shù)逐漸成為獲取信息、數(shù)據(jù)挖掘和業(yè)務(wù)發(fā)展的重要手段。早期主要用于搜索引擎的建設(shè),而今已廣泛應(yīng)用于各個領(lǐng)域。爬蟲技術(shù)能夠自動化地訪問網(wǎng)站,提取數(shù)據(jù),包括文本、圖像、視頻等。獲取大量數(shù)據(jù)后,可以通過爬蟲進行初步的數(shù)據(jù)清洗、分析,為后續(xù)的決策提供支持。用于監(jiān)測網(wǎng)站變化、競爭對手的動態(tài),或者跟蹤特定事件的發(fā)展。在市場調(diào)研、競品分析、輿情監(jiān)測等方面有廣泛應(yīng)用。早期的主要應(yīng)用場景,用于收錄和更新搜索引擎的網(wǎng)頁內(nèi)容。用于抓取商品信息、價格變動等數(shù)據(jù),進行競品分析。用于獲取金融市場數(shù)據(jù)、輿情分析,進行投資決策。用于獲取房源信息、租售價格等,支持房產(chǎn)市場研究。在畢業(yè)生租房數(shù)據(jù)系統(tǒng)中,爬蟲技術(shù)可以用于自動化地獲取各個租房網(wǎng)站上的房源信息,包括租金、位置、房屋設(shè)施等。通過爬蟲,你能夠建立一個龐大的數(shù)據(jù)集,為用戶提供全面、實時的租房信息,提高系統(tǒng)的實用性和吸引力。同時,定期爬取數(shù)據(jù)還有助于系統(tǒng)保持信息的更新和準確性。2.5本章小結(jié)本章詳細介紹了本系統(tǒng)會使用到的各項技術(shù),爬蟲技術(shù)、Flask框架、Echarts框架、用戶登錄系統(tǒng)和深度學習框架,為后續(xù)的功能規(guī)劃和實現(xiàn)奠定的基礎(chǔ)。OTS設(shè)計和實現(xiàn)3需求分析與架構(gòu)設(shè)計3.1用戶分析本系統(tǒng)的主要面向用戶是畢業(yè)生租房者,他們都是年輕人群體,通常是大學生或剛步入社會的年輕工作者??赡軐ψ夥渴袌霾惶煜?,需要一個簡單易用的系統(tǒng)來幫助他們獲取現(xiàn)在租房市場的信息。他們對租金價格、房型、住房面積、所在城市等方面比較關(guān)注,因此,需要盡可能多的給予足夠的數(shù)據(jù)分析,以此為出發(fā)點設(shè)計系統(tǒng),方便用戶瀏覽和了解房源分布信息、租金價格分布區(qū)間,以及了解住房租金水平與面積、所在城市的關(guān)系。3.2系統(tǒng)架構(gòu)設(shè)計系統(tǒng)分為數(shù)據(jù)源和數(shù)據(jù)處理層兩大模塊,如圖3-1系統(tǒng)架構(gòu)設(shè)計圖所示。其中數(shù)據(jù)來源為鏈家這樣的租房網(wǎng)站,并通過數(shù)據(jù)處理層的爬蟲模塊獲取租房數(shù)據(jù),并通過處理層的數(shù)據(jù)處理模塊將爬蟲獲得的數(shù)據(jù)做數(shù)據(jù)清洗、數(shù)據(jù)存儲,并最終通過網(wǎng)頁的方式為用戶提供圖形化的數(shù)據(jù)展示。其中數(shù)據(jù)的處理層引入機器學習能夠為用戶提供租房金額的預測供用戶參考。圖3-1系統(tǒng)架構(gòu)設(shè)計圖3.3系統(tǒng)功能分析本系統(tǒng)根據(jù)用戶需求分析可以為之提供以下功能如圖所示:圖3-2功能結(jié)構(gòu)圖1.用戶登錄功能:用戶必須通過登錄界面進行用戶登錄才可以進行下一步操作,否則,系統(tǒng)不會提供任何數(shù)據(jù)分析服務(wù)。用戶可通過登錄使用本系統(tǒng)。2.租房信息列表展示功能:使用前端界面將獲取的租房信息以列表形式呈現(xiàn),可以分頁顯示。用戶通過該模塊進行對房源詳細信息的檢索。3.面積與租賃價格分析功能:展示租房面積與租金之間的關(guān)系,以散點圖形式呈現(xiàn)。用戶可以通過該散點圖的了解租金與面積的大致趨勢,以致于提供信息支持,可以減小用高價租到低面積房的概率。4.城市與租賃價格分析功能:分析不同城市的租房價格分布,以條形圖展示。用戶可以比較不同城市的租金水平,可以為租房者的未來就業(yè)居住地區(qū)選擇提供思路。5.房型分布分析功能:通過餅圖展示不同房型的租房數(shù)量分布,用戶可以看到各種房型的占比,幫助用戶了解市場上各種房型的供應(yīng)情況,可以為用戶提供房型選擇的思路。6.租賃價格分布分析功能:通過柱狀圖展示租金分布的統(tǒng)計信息,幫助用戶了解租金的整體分布情況,對自己所需要準備的房租金有一個清晰的認知。7.租賃價格預測功能:基于已有的出租信息數(shù)據(jù)進行租金預測,以提供用戶對目的地區(qū)的未來租金水平的估計信息。根據(jù)所需租房的面積大小,來估算該地區(qū)該面積的租金水平。3.4可行性分析3.4.1技術(shù)可行性分析基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的設(shè)計與實現(xiàn),主要選取Python為編程語言,使用flask框架進行前后端連接,促使業(yè)務(wù)邏輯實現(xiàn);使用Pytorch實現(xiàn)深度學習模型,通過EChart框架實現(xiàn)數(shù)據(jù)的可視化展示。在技術(shù)上是可以實現(xiàn)的。3.4.2經(jīng)濟可行性分析從經(jīng)濟角度來看,基于機器學習算法的畢業(yè)生租房數(shù)據(jù)系統(tǒng)的開發(fā)成本相對較低,開發(fā)此系統(tǒng)所需的硬件設(shè)備相對需求較小。該系統(tǒng)僅需要一臺電腦或服務(wù)器來存儲和處理大量的住房數(shù)據(jù)以及運行相關(guān)的算法。此外,由于pytorch、eharts和flask等都是開源軟件,開發(fā)者可以免費獲取并使用它們進行開發(fā),進一步降低了開發(fā)成本??傊?,實現(xiàn)此系統(tǒng)是完全可行的。隨著技術(shù)的發(fā)展和市場的需求,這一領(lǐng)域有望為租房者提供更便捷、高效的服務(wù)。3.5本章小結(jié)本章對系統(tǒng)的潛在用戶進行了分析,確定了本系統(tǒng)的架構(gòu)設(shè)計,確定了用戶登錄、租房信息列表展示功能、面積與租賃價格分析功能、城市與租賃價格分析功能、房型分布分析功能、租賃價格分布分析功能和租賃價格預測功能等具體功能,并進行了實現(xiàn)可行性分析。4系統(tǒng)設(shè)計根據(jù)架構(gòu)設(shè)計,本系統(tǒng)的主要設(shè)計可以概括為數(shù)據(jù)獲取與存儲和數(shù)據(jù)展示兩個環(huán)節(jié)。接下來將從這兩個部分開始敘述。4.1數(shù)據(jù)獲取與存儲即為爬蟲獲取鏈家網(wǎng)租房信息并存儲到SQLite數(shù)據(jù)庫的過程:1.在開始之前,需要查閱和分析鏈家網(wǎng)站,了解原網(wǎng)站數(shù)據(jù)的內(nèi)容結(jié)構(gòu)概況。通常,這些內(nèi)容包括獲取房型信息、地理位置、租金等等,同時找出其數(shù)據(jù)接口并分析。2.使用Python中的HTTP庫(如Requests)構(gòu)建HTTP請求,向鏈家的接口發(fā)送請求。請求可能需要包含特定的參數(shù),例如城市代碼、返回條數(shù)等。3.接收鏈家API返回的響應(yīng),通常是JSON格式的數(shù)據(jù)。使用Python的JSON解析庫對數(shù)據(jù)進行解析,提取需要的租房信息。4.使用Python的SQLite庫連接到SQLite數(shù)據(jù)庫。如果沒有數(shù)據(jù)庫表,可以先創(chuàng)建一個表,包含存儲租房信息所需的字段(如房源地址、租金、面積等)。將從鏈家獲取的數(shù)據(jù)插入到SQLite數(shù)據(jù)庫中的相應(yīng)表格中。這通常涉及到執(zhí)行SQLINSERT語句。以上過程的實現(xiàn)需要具備對鏈家網(wǎng)站數(shù)據(jù)的理解。其主要處理流程如下:4.2數(shù)據(jù)展示相關(guān)功能的設(shè)計圖4-1數(shù)據(jù)獲取本系統(tǒng)力求打造一個數(shù)據(jù)展示平臺,以滿足用戶在租房市場中的信息需求和決策需求。在用戶成功登錄后,系統(tǒng)將為他們解鎖一系列數(shù)據(jù)可視化功能,以提供直觀、清晰的數(shù)據(jù)展示。本系統(tǒng)需要在用戶登錄后進行才可使用數(shù)據(jù)展示功能。在數(shù)據(jù)展示環(huán)節(jié)中,數(shù)據(jù)庫中的數(shù)據(jù)將通過圖表、圖形和統(tǒng)計信息的方式呈現(xiàn),為用戶提供直觀、清晰的租房數(shù)據(jù)展示,幫助他們更好地理解市場趨勢和做出決策。通過本系統(tǒng)的數(shù)據(jù)展示功能,用戶將能夠輕松獲取租房市場的房源信息,以直觀、清晰的方式理解市場趨勢,為租房決策提供有力支持,使更好地把握市場情況,實現(xiàn)自身利益的保護,數(shù)據(jù)展示的幾個內(nèi)容模塊如下圖所示:圖4-2數(shù)據(jù)展示模塊設(shè)計4.2.1用戶登錄設(shè)計用戶登錄系統(tǒng)是你畢業(yè)生租房數(shù)據(jù)系統(tǒng)中的一項關(guān)鍵組件,為確保系統(tǒng)的安全性、用戶管理和個性化服務(wù)提供了必要的基礎(chǔ)。用戶登錄系統(tǒng)是一個身份驗證的機制,用于確認用戶的身份并授權(quán)其訪問系統(tǒng)資源。已注冊用戶使用其憑證(如用戶名和密碼)進行登錄,以驗證其身份。驗證用戶身份后,授予用戶訪問系統(tǒng)特定資源或執(zhí)行特定操作的權(quán)限。用戶登錄流程:1.用戶提供登錄憑證,通常是用戶名和密碼。2.系統(tǒng)驗證憑證的正確性,比對輸入的用戶名和密碼與數(shù)據(jù)庫中存儲的信息。3.如果驗證通過,系統(tǒng)生成登錄令牌,并將其返回給用戶。認證與授權(quán):1.用戶在之后的請求中攜帶登錄令牌。2.系統(tǒng)驗證令牌的有效性,確保用戶已成功登錄。3.根據(jù)用戶的身份和權(quán)限,系統(tǒng)決定是否授權(quán)用戶訪問特定資源或執(zhí)行特定操作。用戶登錄系統(tǒng)在畢業(yè)生租房數(shù)據(jù)系統(tǒng)中起到了關(guān)鍵作用。通過這一系統(tǒng),你可以實現(xiàn)用戶身份管理,確保只有經(jīng)過身份驗證的用戶才能訪問系統(tǒng)。登錄系統(tǒng)可以記錄和分析用戶的行為,實現(xiàn)個性化的用戶體驗,例如保存用戶的搜索歷史、提供個性化的推薦等。打開鏈家官方網(wǎng)站,進入租房板塊,可以看到租房信息列表。圖4-3用戶登錄流程4.2.2租房信息展示模塊設(shè)計租房信息列表模塊展示從鏈家網(wǎng)站獲取處理后的租房信息列表,包括每個房源的基本信息,如房源地址、租金、面積、房型等。使用爬蟲獲取數(shù)據(jù),通過前端界面將獲取的租房信息以列表形式呈現(xiàn),可以分頁顯示。4.2.3面積與租賃價格關(guān)系展示模塊設(shè)計面積與租賃價格關(guān)系模塊展示租房面積與租金之間的關(guān)系,以散點圖呈現(xiàn)。用戶可以通過該模塊中散點圖的分布了解租金與面積的大致趨勢。通過數(shù)據(jù)庫中存儲的數(shù)據(jù),使用ECharts等前端圖表庫,將面積和租金的數(shù)據(jù)進行可視化呈現(xiàn),需要對數(shù)據(jù)進行一定的處理和平滑。4.2.4城市與租賃價格關(guān)系模塊設(shè)計城市與租賃價格關(guān)系模塊分析不同城市的租房價格分布,以條形圖形式展示。用戶可以比較不同城市的租金水平。利用ECharts等工具,將城市和租金的關(guān)系進行可視化。4.2.5房型分布模塊設(shè)計房型分布模塊展示不同房型的租房數(shù)量分布,幫助用戶了解市場上各種房型的供應(yīng)情況。使用餅圖,將各種房型的數(shù)量占比可視化呈現(xiàn)。4.2.6租賃價格分布模塊設(shè)計租賃價格分布模塊展示租金分布的統(tǒng)計信息,幫助用戶了解租金的整體分布情況。利用統(tǒng)計圖表,使用柱狀圖,可以對租金具體區(qū)間的出租房數(shù)量進行可視化展示。4.2.7租賃價格預測模塊設(shè)計租賃價格預測模塊基于已有的出租房信息數(shù)據(jù),使用深度學習模型進行租金預測,以提供用戶對未來租金水平的估計。使用訓練好的模型,將用戶輸入的特征(住房所在城市和面積)通過前后端的交互傳入模型,得到對應(yīng)的租金預測結(jié)果。其主要流程如下:用戶在前端通過表單選擇輸入數(shù)據(jù),前端通過HTTP請求將數(shù)據(jù)發(fā)送到后端,后端處理數(shù)據(jù)并傳入深度學習模型進行租金預測,后端生成響應(yīng)并將預測結(jié)果發(fā)送回前端。前端接收并顯示響應(yīng),進行預測結(jié)果的展示。4.3本章小結(jié)本章規(guī)劃了系統(tǒng)的兩大模塊的具體設(shè)計,對處理流程進行了梳理。前文中關(guān)鍵技術(shù)的使用在這兩個模塊中起到了舉足輕重的作用。5系統(tǒng)實現(xiàn)本章將使用爬蟲技術(shù)進行租房數(shù)據(jù)的獲取,并使用Flask框架和Echarts框架對數(shù)據(jù)進行展示。在網(wǎng)頁展示的過程中會讓用戶進行登錄,給予對應(yīng)的訪問權(quán)限。在網(wǎng)頁中,會利用爬蟲獲取的數(shù)據(jù),通過多個模塊進行數(shù)據(jù)分析展示,最后租金預測模塊會讓用戶輸入目的租房的條件,利用機器學習算法為用戶預測相應(yīng)的房租價格。5.1數(shù)據(jù)獲取與存儲的實現(xiàn)5.1.1數(shù)據(jù)獲取的實現(xiàn)數(shù)據(jù)獲取實現(xiàn)即為爬蟲函數(shù)代碼的實現(xiàn),其實現(xiàn)流程如下:獲取接口:打開鏈家網(wǎng)站,進入租房板塊,可以看到租房信息列表。進入開發(fā)者模式,可以查詢到獲取該列表的url接口及其http頭部信息,這些信息包含了鏈家服務(wù)器信息等。構(gòu)建HTTP請求:核心關(guān)鍵是使用requests模塊發(fā)送請求,以從響應(yīng)response對象中獲取數(shù)據(jù)[15]。使用requests.post(URL,data=payload)方法發(fā)送請求,請求該接口需要傳入上文所得接口,并在payload中傳遞如表5-1的參數(shù),payload包含了多個鍵值對,這些鍵值對將被編碼并發(fā)送到服務(wù)器。在這個例子中,payload包含了'city_id','limit',和'source'這幾個字段,它們分別代表要查詢的城市代碼(后文會定義城市名稱與城市代碼的字典,code即為城市代碼參數(shù))、返回房源的最大數(shù)量,以及數(shù)據(jù)源的標識。表5-1參數(shù)列表序號參數(shù)名稱參數(shù)值1city_idcode2limit1003sourcezhiying_pc檢查響應(yīng)狀態(tài):函數(shù)檢查響應(yīng)的狀態(tài)碼。如果狀態(tài)碼為200,說明請求成功,服務(wù)器返回了預期的響應(yīng)。解析響應(yīng)內(nèi)容:如果請求成功,函數(shù)將響應(yīng)體轉(zhuǎn)換為JSON格式,并提取其中的數(shù)據(jù)。這里響應(yīng)數(shù)據(jù)包含一個字典,該字典包含一個鍵為'data'的項,該項又包含一個鍵為'list'的列表,該列表包含了房源項。本設(shè)計中獲取的數(shù)據(jù)形式如下:代碼5-1JSON數(shù)據(jù)返回格式{

"request_id":"2051401597926",

"status":0,

"msg":"OK",

"data":{

"list":[

Object{...},

Object{...},

Object{...},

Object{...},

Object{...},

Object{...},

Object{...},

Object{...},

Object{...}

],

"total":11,

"fbQueryId":"806807476274999296",

"aggregations":[

]

}}5.構(gòu)建房源列表:函數(shù)遍歷res['data']['list']中的每個房源項,并將其添加到house_list列表中。這里并沒有對房源標題進行任何修改。6.返回房源列表:最后,函數(shù)返回house_list,這是一個包含了從服務(wù)器獲取的房源項的列表。7.處理請求失敗的情況:如果請求的狀態(tài)碼不是200,說明請求失敗,或者服務(wù)器返回了錯誤。在這種情況下,函數(shù)返回一個空列表[]。以下是爬蟲函數(shù)實現(xiàn)的主要代碼。代碼5-2獲取房租數(shù)據(jù)函數(shù)代碼defget_house_list(code,city):print('obtainingdepartmentlist.city:%s,code:%s'%(city,code))URL='/zufang/aj/homeRecommend/v1'payload={'city_id':code,'limit':100,'source':'zhiying_pc'}response=requests.post(URL,data=payload)ifresponse.status_code==200:res=response.json()house_list=[]foriteminres['data']['list']:house_list.append(item)returnhouse_listelse:return[]5.1.2數(shù)據(jù)存儲的實現(xiàn)在上文中得到的list字段中,包含了租房的具體數(shù)據(jù),如名稱、城市、經(jīng)緯度、房型、租金、面積、所屬街道和小區(qū)等等。為此,需要創(chuàng)建房租信息的數(shù)據(jù)庫,用來存儲以上信息。數(shù)據(jù)庫的名稱設(shè)定為house_table,其包含的字段屬性及其含義如下表所示。表5-2數(shù)據(jù)表設(shè)計字段名稱字段類型說明idSTRING自增ID,主鍵house_titleSTRING名稱house_statusSTRING租賃狀態(tài)city_idSTRING城市max_monthly_rent_priceSTRING租金latitudeSTRING緯度longitudeSTRING經(jīng)度frame_bedroom_numSTRING臥室數(shù)量frame_kitchen_numSTRING廚房數(shù)量frame_hall_numSTRING客廳數(shù)量frame_bathroom_numSTRING衛(wèi)生間數(shù)量rent_areaSTRING面積house_layoutSTRING戶型hdic_resblock_nameSTRING小區(qū)名稱hdic_district_nameSTRING街道名稱在實際運行中根據(jù)傳入爬蟲的城市信息,爬取對應(yīng)的城市租房信息后創(chuàng)建數(shù)據(jù)表,將租房信息存儲到數(shù)據(jù)庫中。代碼5-3存儲房租數(shù)據(jù)代碼conn=sqlite3.connect('data/database.db')cursor=conn.cursor()cursor.execute('''CREATETABLEIFNOTEXISTShouse_table(idINTEGERPRIMARYKEYAUTOINCREMENT,house_titleSTRING,house_statusSTRING,city_idSTRING,max_monthly_rent_priceSTRING,latitudeSTRING,longitudeSTRING,frame_bedroom_numSTRING,frame_kitchen_numSTRING,frame_hall_numSTRING,frame_bathroom_numSTRING,rent_areaSTRING,house_layoutSTRING,hdic_resblock_nameSTRING,hdic_district_nameSTRING,list_pictureSTRING)''')city_code={'110000':'北京','120000':'天津','130100':'石家莊','140100':'太原','150100':'呼和浩特','210100':'沈陽','220100':'長春','230100':'哈爾濱','310000':'上海','320100':'南京','320500':'蘇州','330100':'杭州','330300':'溫州','410100':'鄭州','420100':'武漢','430100':'長沙','440100':'廣州','440300':'深圳','440400':'珠海','500000':'重慶','510100':'成都','520100':'貴陽','530100':'昆明','610100':'西安','620100':'蘭州'}forkey,valueincity_code.items():house_list=get_house_list(key,value)forhouseinhouse_list:cursor.execute('INSERTINTOhouse_table(house_title,house_status,city_id,max_monthly_rent_price,latitude,longitude,frame_bedroom_num,frame_kitchen_num,frame_hall_num,frame_bathroom_num,rent_area,house_layout,hdic_resblock_name,hdic_district_name,list_picture)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',(house['house_title'],house['house_status'],house['city_id'],str(house['max_monthly_rent_price']),house['latitude'],house['longitude'],house['frame_bedroom_num'],house['frame_kitchen_num'],house['frame_hall_num'],house['frame_bathroom_num'],str(house['rent_area']),house['house_layout'],house['hdic_resblock_name'],house['hdic_district_name'],house['list_picture']))time.sleep(0.1)mit()conn.close()在每爬取一次網(wǎng)頁之后,讓系統(tǒng)停頓了0.1秒,目的是防止過快的爬取速度觸發(fā)網(wǎng)站的反爬蟲機制。經(jīng)過以上的操作,各地的租房信息就存儲在了數(shù)據(jù)庫中,具體如下圖所示:圖5-2數(shù)據(jù)庫數(shù)據(jù)展示5.2數(shù)據(jù)展示的實現(xiàn)數(shù)據(jù)展示采用了Flask框架結(jié)合Echart數(shù)據(jù)可視化方案,并且集成了簡單的用戶登錄權(quán)限驗證功能。利用框架的模板繼承功能,為網(wǎng)站創(chuàng)建相應(yīng)的模塊展示頁面。頁面關(guān)系如下。圖5-3網(wǎng)頁關(guān)系base.html為基礎(chǔ)模板,只要實現(xiàn)菜單欄的功能,其他模板共享了該基礎(chǔ)模板,只需要實現(xiàn)各自需要的展示功能即可。菜單欄的效果如下圖所示:圖5-4導航欄效果5.2.1用戶登錄模塊用戶登錄模塊主要分為兩個部分:一、用戶登錄認證。渲染login.html模板,并返回給客戶端。用戶可以在其中輸入用戶名和密碼。用戶先輸入用戶和密碼,驗證通過后跳轉(zhuǎn)到主界面,否則提示用戶信息輸入有誤。用戶通過認證后,會向用戶session中寫入數(shù)據(jù),方便以后訪問受限頁面時,對用戶身份進行驗證,其代碼如下:代碼5-4用戶登錄入口代碼@app.route('/login',methods=['POST','GET'])deflogin():ifrequest.method=='POST':username=request.form.get('username')password=request.form.get('password')ifusernameinusersandusers[username]['password']==password:session['username']=usernamereturnredirect('/')else:return'Invalidusernameorpassword.Pleasetryagain.'elifrequest.method=='GET':returnrender_template('login.html')這里的用戶名和密碼,沒有存儲到數(shù)據(jù)庫中,目的是為了實現(xiàn)方便,直接在代碼中進行驗證。目前有效的用戶名和對應(yīng)密碼為:表5-4用戶信息表序號用戶名密碼1user1password12user2password2功能實現(xiàn)后,頁面效果如下所示:圖5-5登錄頁面二.用戶權(quán)限的檢查。通過對session的檢查的方式來實現(xiàn),如果該session存儲了特定字段,則表示用戶已經(jīng)登錄,并通過了檢驗,在后續(xù)的模塊中都有@login_required代碼調(diào)用,實現(xiàn)對用戶權(quán)限的檢查。代碼5-5用戶登錄權(quán)限檢查代碼deflogin_required(view_func):@wraps(view_func)defwrapper(*args,**kwargs):if'username'notinsession:returnredirect(url_for('login'))returnview_func(*args,**kwargs)returnwrapper@app.route('/logout')deflogout():session.pop('username',None)returnredirect(url_for('login'))5.2.2租房信息模塊在Flask中創(chuàng)建該模塊的入口,讀取sqlite數(shù)據(jù)庫中的數(shù)據(jù),并根據(jù)取的內(nèi)容創(chuàng)建一個字典。每個字典代表一個房屋的信息,包含標題、城市ID、最大月租金、面積、經(jīng)緯度、戶型、小區(qū)名、區(qū)域名和圖片列表。并將數(shù)據(jù)以列表形式展現(xiàn)到頁面上,其對應(yīng)的網(wǎng)頁模板為index.html。代碼5-6租房信息展示代碼@app.route('/')@login_requireddefindex():table_name='house_table'column_name='*'where=''sql='select{column}from{table}'.format(table=table_name,column=column_name)conn=sqlite3.connect('data/database.db')cur=conn.cursor()result=cur.execute(sql)result_list=[]forrowinresult:data={'house_title':row[1],'city_id':row[3],'max_monthly_rent_price':row[4],'rent_area':row[11],'latitude':row[5],'longitude':row[6],'house_layout':row[12],'hdic_resblock_name':row[13],'hdic_district_name':row[14],'list_picture':row[15]}result_list.append(data)cur.close()conn.close()returnrender_template('index.html',datalist=result_list)入口函數(shù)中,同樣使用了@login_required作為注解。它的功能是在用戶訪問該接口時檢查用戶的身份,如果發(fā)現(xiàn)用戶沒有登錄,則會引導用戶跳轉(zhuǎn)到登錄界面進行用戶登錄操作,登錄成功后即可查看租房信息列表,本功能實現(xiàn)結(jié)果如下圖所示:圖5-6租房信息展示5.2.3面積與租賃價格關(guān)系模塊在Flask中創(chuàng)建該模塊的入口,在入口中,讀取數(shù)據(jù)庫中的數(shù)據(jù),并將數(shù)據(jù)以Echarts散點圖的形式展現(xiàn)到頁面上;其對應(yīng)的網(wǎng)頁模板為area_vs_price.html。代碼5-7面積與價格數(shù)據(jù)獲取代碼@app.route('/area_vs_price')@login_requireddefarea_vs_price():conn=sqlite3.connect('data/database.db')cur=conn.cursor()sql='SELECTmax_monthly_rent_price,rent_areaFROMhouse_table'cur=conn.cursor()result=cur.execute(sql)data=[]forrowinresult:data.append([row[0],row[1]])cur.close()conn.close()returnrender_template('area_vs_price.html',chart_data1=data,chart_title='面積與租賃價格關(guān)系')Echarts的散點圖繪制通過設(shè)定options來實現(xiàn),初始化echarts實例,并通過setOption方法生成散點圖[16]。代碼5-8面積與價格展示代碼varchartData={{chart_data1}}varbarChart=echarts.init(document.getElementById('chart_area'));varoptions={tooltip:{trigger:'axis',axisPointer:{type:'shadow'}},title:{text:{{chart_title|tojson|safe}}},xAxis:{type:'value',name:'價格(元)'},yAxis:{type:'value',name:'面積(平方米)'},series:[{data:chartData.filter(item=>(item[0]<10000)),type:'scatter'}]};barChart.setOption(options);最后頁面展示的效果圖如下所示:圖5-7面積與租賃價格關(guān)系效果圖5.2.4城市與租賃價格關(guān)系模塊在Flask中,創(chuàng)建該模塊的入口,在入口中,讀取數(shù)據(jù)庫中的數(shù)據(jù),并將數(shù)據(jù)以Echarts柱狀圖的形式展現(xiàn)到頁面上,其對應(yīng)的網(wǎng)頁模板為city_vs_price.html。代碼5-9城市與租賃價格獲取代碼@app.route('/city_vs_price')@login_required@cache.cached(timeout=600)defcity_vs_price():conn=sqlite3.connect('data/database.db')cur=conn.cursor()sql='SELECTcity_id,AVG(max_monthly_rent_price)ASrentFROMhouse_tableGROUPBYcity_idORDERBYrentDESC'cur=conn.cursor()result=cur.execute(sql)labels=[]values=[]forrowinresult:labels.append(row[0])values.append(int(row[1]))cur.close()conn.close()chart_data={'cities':labels,'prices':values}returnrender_template('city_vs_price.html',chart_data=chart_data,chart_title='城市均價關(guān)系')Echarts的柱狀圖繪制通過設(shè)定options來實現(xiàn)。代碼5-10城市與價格展示代碼//從Flask后端獲取的數(shù)據(jù)varchartData={{chart_data|tojson|safe}};console.log(chartData)varpieChart=echarts.init(document.getElementById('chart_area1'));options={title:{text:{{chart_title|tojson|safe}}},xAxis:{type:'category',data:chartData.cities//['Mon','Tue','Wed','Thu','Fri','Sat','Sun']},yAxis:{type:'value'//name:'房價'},series:[{data:chartData.prices,type:'bar'}]};pieChart.setOption(options);最后頁面展示的效果圖如下所示。圖5-8城市租賃均價關(guān)系效果圖5.2.5房型分布模塊在Flask中,創(chuàng)建該模塊的入口,在入口中,讀取數(shù)據(jù)庫中的數(shù)據(jù),并將數(shù)據(jù)以Echarts餅圖的形式展現(xiàn)到頁面上;其對應(yīng)的網(wǎng)頁模板為house_frame.html。代碼5-11房型分布數(shù)據(jù)獲取代碼@app.route('/house_frame')@login_required@cache.cached(timeout=600)defhouse_frame():conn=sqlite3.connect('data/database.db')cur=conn.cursor()sql='SELECThouse_layout,COUNT(house_layout)AScountFROMhouse_tableGROUPBYhouse_layout'cur=conn.cursor()result=cur.execute(sql)labels=[]values=[]forrowinresult:labels.append(row[0])values.append(row[1])cur.close()conn.close()chart_data={'labels':labels,'data':values}returnrender_template('house_frame.html',chart_data1=chart_data,chart_title='房型分布圖')Echarts的餅圖繪制通過設(shè)定options來實現(xiàn)。代碼5-12房型分布展示代碼//從Flask后端獲取的數(shù)據(jù)varchartData={{chart_data1|tojson|safe}};varpieChart=echarts.init(document.getElementById('chart_area1'));varoptions={title:{text:{{chart_title|tojson|safe}}},series:[{type:'pie',data:chartData.labels.map(function(label,index){return{name:label,value:chartData.data[index]};})}]};pieChart.setOption(options);最后頁面展示的效果圖如下所示:圖5-9房型分布效果圖5.2.6租賃價格分布模塊在Flask中,創(chuàng)建該模塊的入口,在入口中,讀取數(shù)據(jù)庫中的數(shù)據(jù),并將數(shù)據(jù)以Echarts柱狀圖的形式展現(xiàn)到頁面上,其對應(yīng)的網(wǎng)頁模板為price.html。代碼5-13租賃價格獲取代碼@app.route('/price')@login_required@cache.cached(timeout=600)defprice():conn=sqlite3.connect('data/database.db')cursor=conn.cursor()sql='SELECTmax_monthly_rent_priceFROMhouse_table'result=cursor.execute(sql)price_ranges=[0,1000,2000,3000,4000,5000,6000,7000,8000,9000,float('inf')]house_prices=[]forrowinresult:house_prices.append(row[0])house_count_in_ranges=[0]*(len(price_ranges)-1)forpriceinhouse_prices:foriinrange(len(price_ranges)-1):#print(i)ifprice_ranges[i]<=price<price_ranges[i+1]:house_count_in_ranges[i]+=1breakcursor.close()conn.close()returnrender_template('price.html',price_ranges=price_ranges[:-1],house_count_in_ranges=house_count_in_ranges,chart_title='價格分布圖')在價格分段的展示過程中,以1000為一個單位來進行分割,把價格從1000,到9000,做了詳細的分段,以此來展示數(shù)據(jù)的分布情況。Echarts的柱狀圖繪制通過設(shè)定options來實現(xiàn)。代碼5-14租賃價格展示代碼varprice_ranges={{price_ranges|tojson|safe}};varhouse_count_in_ranges={{house_count_in_ranges|tojson|safe}};varchart_title={{chart_title|tojson|safe}};varbarChart=echarts.init(document.getElementById('chart_area1'));varoptions={title:{text:{{chart_title|tojson|safe}}},xAxis:{type:'category',data:price_ranges.map(range=>`${range}-${price_ranges[price_ranges.indexOf(range)+1]}`)},yAxis:{type:'value',name:'房屋數(shù)量'},series:[{data:house_count_in_ranges,type:'bar'}]};barChart.setOption(options);最后頁面展示的效果圖如下所示。圖5-10價格分布效果圖5.2.7租賃價格預測模塊本功能首先根據(jù)每個城市的租房面積和價格為指導,進行數(shù)據(jù)的推理。之后,根據(jù)用戶輸入的城市、租房面積來預測所租房屋的價格。實現(xiàn)本模塊通過三個步驟來完成:1.深度學習模型的構(gòu)建。在價格推理部分,使用了深度學習模型。該模型將房屋面積作為特征,價格作為標簽進行擬合。為了使模型達到一定的精確度,將數(shù)據(jù)訓練了10000次。在此模型中,選擇了面積為特征,輸入的特征數(shù)量為1,輸出也為1,沒有添加隱藏層,相當于進行了線性的擬合。預測模型代碼如下:代碼5-15預測模型代碼defpredict_next_value(features,rent_data,area):importtorchimporttorch.nnasnnimporttorch.optimasoptim#將數(shù)據(jù)轉(zhuǎn)換為PyTorch張量min_values=np.min(features,axis=0)max_values=np.max(features,axis=0)normalized_features=(features-min_values)/(max_values-min_values)features_tensor=torch.FloatTensor(normalized_features)rent_tensor=torch.FloatTensor(rent_data)#定義神經(jīng)網(wǎng)絡(luò)模型classHousePricePredictor(nn.Module):def__init__(self):super(HousePricePredictor,self).__init__()self.linear=nn.Linear(1,1)defforward(self,x):returnself.linear(x)#初始化模型model=HousePricePredictor()#定義損失函數(shù)和優(yōu)化器criterion=nn.MSELoss()optimizer=optim.SGD(model.parameters(),lr=0.001)#訓練模型epochs=10000forepochinrange(epochs):#前向傳播predictions=model(features_tensor)#計算損失loss=criterion(predictions,rent_tensor)#反向傳播和優(yōu)化optimizer.zero_grad()loss.backward()optimizer.step()#打印訓練過程中的損失if(epoch+1)%100==0:print(f'Epoch[{epoch+1}/{epochs}],Loss:{loss.item():.4f}')#測試模型test_area=area#[[75.0]]normalized_features=(test_area-min_values)/(max_values-min_values)normalized_features=torch.FloatTensor(normalized_features)predicted_rent=model(normalized_features).item()returnpredicted_rent2.租聘價格預測的輸入界面的完成。在Flask中創(chuàng)建該界面的入口,在此界面中,用戶可以選擇目的城市與相應(yīng)目的租房面積的選擇,其對應(yīng)的網(wǎng)頁模板為predict.html。代碼5-16租賃價格預測的輸入界面代碼@app.route('/price')@app.route('/predict')@login_required@cache.cached(timeout=600)defpredict():city_code={'110000':'北京','120000':'天津','130100':'石家莊','140100':'太原','150100':'呼和浩特','210100':'沈陽','220100':'長春','230100':'哈爾濱','310000':'上海','320100':'南京','320500':'蘇州','330100':'杭州','330300':'溫州','410100':'鄭州','420100':'武漢','430100':'長沙','440100':'廣州','440300':'深圳','440400':'珠海','500000':'重慶','510100':'成都','520100':'貴陽','530100':'昆明','610100':'西安','620100':'蘭州'}cities=[]forkey,valueincity_code.items():cities.append(value)returnrender_template('predict.html',city_list=city_code,chart_title='租賃價格預測')其最后頁面展示的效果圖如下所示:圖5-11租賃價格預測輸入效果圖3.前后端交互實現(xiàn)租金預測。租聘價格預測的輸入界面部分通過表單形式獲取用戶的輸入,然后向服務(wù)器提交需要查詢的用戶輸入數(shù)據(jù)到predict_result接口處,其主要實現(xiàn)如下代碼所示:代碼5-17前端用戶輸入數(shù)據(jù)獲取實現(xiàn)代碼<formmethod="POST"action="/predict_result"><labelfor="city">選擇城市:</label><selectid="city"name="city">{%forcode,cityincity_list.items()%}<optionvalue="{{city}}">{{city}}</option>{%endfor%}</select><labelfor="area_range">選擇面積區(qū)間:</label><inputtype="range"id="area_range"name="area_range"min="10"max="200"step="10"value="50"oninput="updateAreaValue()"><spanid="area_value">20</span><buttontype="submit">預測</button></form>接下來在Flask中創(chuàng)建predict_result的入口,在入口中,接收前端返回的用戶輸入數(shù)據(jù)并進行處理,使用深度學習網(wǎng)絡(luò)對處理后的數(shù)據(jù)進行學習,最后將推測的租賃價格顯示到網(wǎng)頁上,其對應(yīng)的網(wǎng)頁模板為predict_result.html,該部分代碼如下所示:代碼5-18租賃價格預測代碼@app.route('/predict_result',methods=['POST'])@login_requireddefpredict_result():print('openpredictresult')form_data=request.form#獲取特定字段的值city=form_data.get('city')area=form_data.get('area_range')conn=sqlite3.connect('data/database.db')city_id=citywhere='city_id="{city_id}"'.format(city_id=city_id)#sql='SELECTlongitude,latitude,rent_area,max_monthly_rent_priceFROMhouse_tableWHERE{where}'.format(where=where)sql='SELECTrent_area,max_monthly_rent_priceFROMhouse_tableWHERE{where}'.format(where=where)print(sql)cur=conn.cursor()cur.execute(sql)result=cur.fetchall()cur.close()conn.close()#將數(shù)據(jù)轉(zhuǎn)換為NumPy數(shù)組data=np.array(result)features=data[:,0].astype(float).reshape(-1,1)#房屋面積數(shù)據(jù)rent_data=data[:,1].astype(float).reshape(-1,1)price=predict_next_value(features,rent_data,int(area))print('predictedprice:'+str(price))returnrender_template('predict_result.html',city=city,area=area,price=int(price),chart_title='')最后頁面展示的預測結(jié)果效果圖如下所示:圖5-12租賃價格預測效果圖5.3本章小結(jié)本章首先對爬蟲的實現(xiàn)方法和流程進行了詳細說明。接著進行了詳細的數(shù)據(jù)存儲的實現(xiàn)。之后在用戶端,進行了登錄系統(tǒng)的實現(xiàn),讓要進入各個功能模塊的用戶必須進行登錄操作。最后分別實現(xiàn)了數(shù)據(jù)展示系統(tǒng)中的租房信息列表模塊、面積與租賃價格關(guān)系模塊、城市與租賃價格關(guān)系模塊、房型分布模塊、租賃價格分布模塊、租賃價格預測模塊等等。OTS與/OPENDTP模型的集成6功能測試為了驗證系統(tǒng)的功能,需要對系統(tǒng)進行測試。租房信息獲取功能需要進行測試,確保爬蟲功能能夠成功從鏈家網(wǎng)站獲取租房信息,并將信息存儲到數(shù)據(jù)庫中。數(shù)據(jù)展示功能需要測試,確保Flask數(shù)據(jù)展示功能正常,能夠展示租房信息列表、面積與租賃價格關(guān)系、城市與租賃價格關(guān)系、房型分布、租賃價格分布和租賃價格預測等模塊。每個測試目標進行詳細記錄,包括通過的測試和未通過的測試,并提供相應(yīng)的測試用例。6.1爬蟲測試爬蟲是數(shù)據(jù)的來源,測試爬蟲,主要就是測試其將網(wǎng)絡(luò)數(shù)據(jù)整理后存儲數(shù)據(jù)庫。表6-1爬蟲測試用例測試編號輸入預期執(zhí)行結(jié)果測試結(jié)果001打開命令行窗口,啟動python虛擬環(huán)境,運行spider腳本成功將數(shù)據(jù)導入sqlite數(shù)據(jù)庫符合預期效果6.2用戶登錄測試登錄模塊需要用戶登錄并驗證用戶的身份。表6-2用戶登錄測試用例測試編號輸入預期執(zhí)行結(jié)果測試結(jié)果

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論