基于大数据的房价数据可视化分析预测系统
溫馨提示:文末有 CSDN 平臺官方提供的博主 Wechat / QQ 名片 :)
1. 項目背景
????????房地產是促進我國經濟持續增長的基礎性、主導性產業,二手房市場是我國房地產市場不可或缺的組成部分。由于二手房的特殊性,目前市場上實時監測二手房市場房價漲幅的情況較少,影響二手房價的因素錯綜復雜,價格并非呈傳統的線性變化。
????????本項目利用Python實現某一城市二手房相關信息的爬取,并對爬取的原始數據進行數據清洗,存儲到數據庫中,通過 flask 搭建后臺,分析影響二手房房價的各類因素,并構建遞歸決策樹模型,實現房價預測建模。
基于大數據的房價數據可視化分析預測系統
2. 二手房數據
????????二手房信息爬取流程為,先獲取該市所有在售樓盤,以保定市為例,其中,p1 表示分頁的頁碼,因此可以構造循環,抓取所有分頁下的樓盤數據。
base_url = 'https://baoding.xxxx.com/community/p{}/'all_xqlb_links = set() for page in range(1, 51):url = base_url.format(page)# 獲取 html 頁碼,并進行dom解析# ...?通過分析 html 頁面的 Dom 結構,利用 Bootstrap 進行解析,獲取樓盤的詳細字段信息。?
同理,獲取樓盤下所有在售房源信息:??
def get_house_info(house_link):"""獲取房屋的信息"""headers = {'accept': '*/*','accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9,en;q=0.8','cookie': 'Your cookie','referer': house_link,'sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}response = requests.get(house_link, headers=headers)response.encoding = 'utf8'soup = BeautifulSoup(response.text, 'lxml')house_info = {'鏈接': house_link,'產權性質': '未知','房屋類型': '未知','產權年限': '未知','房本年限': '未知','唯一住房': '未知','參考首付': '未知','發布時間': '未知','總價': '','單價': '','房屋戶型': '未知','所在樓層': '未知','建筑面積': '','裝修程度': '未知','房屋朝向': '未知','建造年代': '未知','配套電梯': '無','所屬小區': '未知','所在位置': '未知'}tbody = soup.select('tbody.houseInfo-main')[0]tds = tbody.select('td')for td in tds:datas = td.text.split(' ')if '產權性質' in datas[0]:house_info['產權性質'] = datas[0].replace('產權性質', '')if '產權年限' in datas[0]:house_info['產權年限'] = datas[0].replace('產權年限', '')if '發布時間' in datas[0]:house_info['發布時間'] = datas[0].replace('發布時間', '')if '唯一住房' in datas[0]:house_info['唯一住房'] = datas[0].replace('唯一住房', '')if '房屋類型' in datas[0]:house_info['房屋類型'] = datas[0].replace('房屋類型', '')if '房本年限' in datas[0]:house_info['房本年限'] = datas[0].replace('房本年限', '')if '參考預算' in datas[0]:yusuan = datas[0].replace('參考預算', '')house_info['參考首付'] = yusuan[2:].split(',')[0]total_price = soup.select('span.maininfo-price-num')[0]total_price = total_price.text.strip()house_info['總價'] = total_priceavgprice = soup.select('div.maininfo-avgprice-price')[0]avgprice = avgprice.text.strip()house_info['單價'] = avgpricehuxing = soup.select('div.maininfo-model-item.maininfo-model-item-1')[0]huxing = huxing.text.strip()house_info['房屋戶型'] = huxing.split(' ')[0]house_info['所在樓層'] = huxing.split(' ')[1]daxiao = soup.select('div.maininfo-model-item.maininfo-model-item-2')[0]daxiao = daxiao.text.strip()house_info['建筑面積'] = daxiao.split(' ')[0]house_info['裝修程度'] = daxiao.split(' ')[1]chaoxiang = soup.select('div.maininfo-model-item.maininfo-model-item-3')[0]chaoxiang = chaoxiang.text.strip()house_info['房屋朝向'] = chaoxiang.split(' ')[0]house_info['建造年代'] = chaoxiang.split(' ')[1].split('/')[0][:-2]bar = soup.select('div.crumbs.crumbs-middle')[0]xiaoqu = bar.select('a.anchor.anchor-weak')[-1]house_info['所屬小區'] = xiaoqu.text.strip()tags = soup.select('div.maininfo-tags')[0].textif '電梯' in tags:house_info['配套電梯'] = '有'# 所屬區域for line in soup.select('div.maininfo-community-item'):text = line.text.strip()if '所屬區域' in text:house_info['所在位置'] = text.split(' ')[1].split('\xa0')[0]return house_info3. 二手房數據清洗與存儲
抓取的原始數據可能存在數據異常、缺失等情況,需要進行數據清洗和數據類型轉換等預處理操作。清洗后的數據存儲到 mysql 或 sqlite 等關系型數據庫中。
for house_info in all_house_infos:for key in all_keys:if key not in house_info:house_info[key] = '暫無'if isinstance(house_info['單價'], float):continuehouse_info['單價'] = float(house_info['單價'][:-3].strip())house_info['總價'] = float(house_info['總價'].strip())house_info['建筑面積'] = float(house_info['建筑面積'][:-1].strip())house_info['參考首付'] = float(house_info['參考首付'][:-1].strip())tmp = list(map(int, re.findall(r'(\d+)', house_info['房屋戶型'])))house_info['房屋戶型_室數'] = tmp[0]house_info['房屋戶型_廳數'] = tmp[1]house_info['房屋戶型_衛數'] = tmp[2]del house_info['房屋戶型']if '(' not in house_info['所在樓層']:house_info['所在樓層'] = '底層({})'.format(house_info['所在樓層'])house_info['總樓層'] = list(map(int, re.findall(r'(\d+)', house_info['所在樓層'])))[0]house_info['所在樓層'] = house_info['所在樓層'][:2]4. 二手房價可視化分析預測系統
系統采用 flask 搭建 web 后臺,利用 pandas 等工具包實現對當前城市二手房現狀、二手房價格影響因素等進行統計分析,并利用 bootstrap + echarts 進行前端渲染可視化。系統通過構建機器學習模型(決策樹、隨機森林、神經網絡等模型),對二手房價格進行預測。
4.1 系統首頁/注冊登錄
?
4.2 小區樓盤名稱關鍵詞抽取與詞云展示
?
4.3?二手房房屋類型與產權年限分布
?
4.4 不同區域在售二手房房源數量與均價對比
?
?
4.5 房價影響因素分析?
?房價影響因素包括:建造年代、建筑面積、房屋戶型、朝向、房屋類型、樓層、裝修程度、配套電梯、房本年限、產權性質、唯一住房、所在區域、周邊設施等等諸多因素。我們對每類因素的影響情況分別進行可視化展示:
?
?
?
4.6 基于機器學習模型的二手房價格預測
通過一些列的特征工程、數據標準化、訓練集驗證集構造、決策樹模型構建等操作,完成決策樹模型的交叉驗證訓練和模型評估:
print('---> cv train to choose best_num_boost_round') dtrain = xgb.DMatrix(train_X, label=train_Y, feature_names=df_columns)xgb_params = {'learning_rate': 0.005,'n_estimators': 4000,'max_depth': 3,'min_child_weight': 1.5,'eval_metric': 'rmse','objective': 'reg:linear','nthread': -1,'silent': 1,'booster': 'gbtree' }cv_result = xgb.cv(dict(xgb_params),dtrain,num_boost_round=4000,early_stopping_rounds=100,verbose_eval=400,show_stdv=False,) best_num_boost_rounds = len(cv_result) mean_train_logloss = cv_result.loc[best_num_boost_rounds-11 : best_num_boost_rounds-1, 'train-rmse-mean'].mean() mean_test_logloss = cv_result.loc[best_num_boost_rounds-11 : best_num_boost_rounds-1, 'test-rmse-mean'].mean() print('best_num_boost_rounds = {}'.format(best_num_boost_rounds))print('mean_train_rmse = {:.7f} , mean_valid_rmse = {:.7f}\n'.format(mean_train_logloss, mean_test_logloss))模型訓練結果:
---> cv train to choose best_num_boost_round [0] train-rmse:4.10205 test-rmse:4.10205 [400] train-rmse:0.59919 test-rmse:0.605451 [800] train-rmse:0.20857 test-rmse:0.230669 [1200] train-rmse:0.185981 test-rmse:0.21354 [1600] train-rmse:0.181188 test-rmse:0.211841 [2000] train-rmse:0.177933 test-rmse:0.211291 [2400] train-rmse:0.174346 test-rmse:0.210886 best_num_boost_rounds = 2512 mean_train_rmse = 0.1733781 , mean_valid_rmse = 0.2108875測試集預測結果與真實值分布情況:
print('決策樹模型在驗證集上的均方誤差 RMSE 為:', rmse(valid_Y, predict_valid))>> 決策樹模型在驗證集上的均方誤差 RMSE 為: 0.19991482173207226?
?二手房價格預測模型交互式頁面:
?
5. 總結
????????本項目利用Python實現某城市二手房相關信息的爬取,并對爬取的原始數據進行數據清洗,存儲到數據庫中,通過 flask 搭建后臺,分析影響二手房房價的各類因素,并構建遞歸決策樹模型,實現房價預測建模。
歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。
技術交流認準下方?CSDN 官方提供的學長 Wechat / QQ 名片 :)
精彩專欄推薦訂閱:
1. Python 畢設精品實戰案例
2. 自然語言處理 NLP 精品實戰案例
3. 計算機視覺 CV 精品實戰案例
總結
以上是生活随笔為你收集整理的基于大数据的房价数据可视化分析预测系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MTK平台Android4.4 拍照默认
- 下一篇: 队列仿真一个银行叫号系统