随机森林案例python,python随机森林建模
chanong
|简介该项目是使用Django 框架构建的。用户可以看到可视化的数据分析,也可以将这些信息输入到系统中。该系统使用随机森林算法来预测这些信息并估计现有房价。
流程图实施步骤数据收集目标网站数据隐私分析
数据爬取过程:本次数据爬取采用从目录页和详情页的URL中检索部分信息的方法。
如果你看一下网页的代码,你会发现链家二手房网站并没有使用Ajax来更新数据。更传统的get 方法用于分页数据。当您翻阅页面并找到模式时,您会发现:它们唯一的区别是网页后面的/pg/,这样可以更方便地抓取不同页码的内容。
这次爬取,我使用了全局变量,因为函数返回值太多,使用起来不方便,而使用global进行声明会更方便。通过构建下面控制页数的函数page_control(),我们就实现了网站的翻页。
1.#控制访问的页面数2.defpage_control(i):3.globalpage,base_url,headers,data4.page=i5.6.base_url='https://bj.lianjia.com/ershoufang/pg{}/'.format( page) 7.8.data={9.'type':1,10.'query':'https://bj.lianjia.com/ershoufang/pg{}/'.format(page)11.}12.return0 content 获取网页get_content( )该函数根据页面数抓取当前网站的内容。请注意,网页可能内置了某些反爬虫机制,因此您无法使用time.sleep() 来控制访问频率。然后我使用更经典的Xpath 方法来更轻松地检索我需要的数据。
1.#爬取内容2.defget_content(base_url,headers,data):3.url=base_url+urlencode(data)4.globalurls,names,apartments,neighbourhoods,introductions,heated,prices,per_prices5.6.try:7.res=request .get(url,headers=headers)8.time.sleep(2.5)9.ifres.status_code==200:10.#res.encoding='utf-8'11.res.encoding='gbk2312'12.res_text=res .text13.soup=etree.HTML(res_text)14.15.urls=soup.xpath('//*[@log-mod='list']/li/a/@href')16.names=soup.xpath ( '//*[@log-mod='list']/li/p[1]/p[1]/a/text()')17.apartments=soup.xpath('//*[@log - mod='list']/li/p[1]/p[2]/p/a[1]/text()')18.neighbourhoods=soup.xpath('//*[@log-mod=' list']/li/p[1]/p[2]/p/a[2]/text()')19.introductions=soup.xpath('//*[@log-mod='list' ] /li/p[1]/p[3]/p/text()')20.heated=soup.xpath('//*[@log-mod='list']/li/p[1]/p[4]/text()')21.prices=soup.xpath('//*[@log-mod='list']/li/p[1]/p[6]/p[1]/span/text()')22.per_prices=soup.xpath('//*[@log-mod='list']/li/p[1]/p[6]/p[2]/span/text ()')23.24.print(urls[0],names[0],公寓[0],neighborhoods[0],introductions[0],heated[0],prices[0],25.per_prices[0] ) 26.return027.28.beforerequests.ConnectionErrorase:29.print('Error',e.args)30.return0 获取详情页信息
由于房产列表页面上并没有列出房屋的所有信息,因此需要从每套二手房的详情页面中获取更详细的信息,例如获取房屋所在的行政区。再次,使用访问频率控制方法来降低被识别为爬虫的可能性。
1.#获取行政区域2.defget_region():3.globalregions4.forurl_regioninurls:5.res_region=requests.get(url_region)6.time.sleep(1)7.res_region.encoding='gbk2312'8.res_region_text=res_region .text9.汤=etree.HTML(res_region_text)10.regions_item=soup.xpath('/html/body/p[5]/p[2]/p[5]/p[2]/span[2]/a[1 ] /text()')11.regions.append(regions_item[0])12.return0
用于数据清理的数据样式
许多数据文件被分割到不同的地区或城市,因此您必须首先将所有文件合并为一个文件。
#新建模版本df=pd.DataFrame()for f in lst: path=os.getcwd()+'/data/'+f tmp_df=pd.read_csv(path) if 'Daduko' not in tmp_df.loc[0, tmp_df.loc[0,'address']: 中缺少'address'] 和'Shapingba' #print(tmp_df.loc[0,'address'][0:2]) tmp_df['city']=tmp_df.loc[ 0,'地址'][0:2] else: #print(tmp_df.loc[0,'地址'][0:3]) tmp_df['城市']=tmp_df.loc[0,'地址'][0:3] df=pd . concat([df,tmp_df])df 将面积和单价转换为浮点数据
# floatdf['mianji']=df.apply(lambda x: x['area'].replace(' ', ''), axis=1)df['mianji']=df.apply(lambda) 更改x: x ['面积'].replace('', ''), axis=1)df['mianji']=df['mianji'].astype('float')# floatdf['danjia ] 每平方米=df.apply(lambda x: x['每平方米'].replace(' ', ''), axis=1)df['蛋甲']=df.apply(lambda x: x ['每平方米']. Replace ('yuan/m2', ''), axis=1)df['danjia']=df['danjia'].astype('float') 方位数据混乱,楼层信息也必须删除。
# 删除方向列中包含“layer”的行df=df[~df['orientation'].str.contains('layer')] 删除施工工期、层数为“none”的行
#删除构建时间为none df=df[df['构建时间'] !='None'] #删除层数为none df=df[df['层数'] !='None'] #0df 删除区域为=df[df['mianji'] !=0] 将楼层分为地下、低层、中层、高层
# Floor df['ceng']=df.apply(lambda x: x['number of Floors'][0:2], axis=1)# 定义一个函数,将楼层信息转换为“下层” deftransform_floor(floor): if ' Total' in Floor: return ' lower Floor' else: return Floor# 使用apply 方法应用函数df['ceng']=df['ceng'].apply(transform_floor) 并指定数据类型和缺失值。
特征值为房屋类型、城市、方向、面积、单价、层数、型号年份。
可视化分析在建立二手房价格预测模型之前,进行相关性分析非常重要。相关性分析可帮助您了解数据之间的关系,从而更深入地了解您的数据,并为后续模型构建提供指导。二手房价直方图
二手房屋平面图统计
二手房面积价格散点图
二手房总楼面价箱线图
二手房总价箱线图
二手房容积率饼图
二手房相关系数热图
按类型和方向划分的已用住房总量箱线图
各地区平均房价地图
模型构建#预测# 将数据拆分为输入集和结果集Xy_reg=df['total saleprice']# 拆分训练集和测试集Random_state 是用于拆分数据集的随机种子。在本文中,随机种子必须保持一致。 x_train, x_test, y_train, y_test=train_test_split (X, y_reg, test_size=0.2, random_state=42)params: {'bootstrap': True, 'ccp_alpha': 0.0, 'criterion': ' squared_error', 'max_Depth': 无, 'max_features': 1.0,'max_leaf_nodes': 无,'max_samples': 无,'min_impurity_decrease': 0.0,'min_samples_leaf': 1,'min_samples_split'33 360 2,'min_weight_fraction_leaf'333 60 0.0 , 'n_estimators': 100, 'n_jobs'3 3360 None, 'oob_score' : False .均方根误差: 18.42 数据预测#[' Chengshi',' room', 'hall', 'wei', 'mianji', 'chaoxiang', 'louceng' ,'jianzao','danjia']dict1={'city':'banan','shi':3,'ting':2,'wei':1,'mianji':92,'朝祥':'西南','楼城':4,'jianzao':2018}lst=[cs[dict1['程氏']],dict1['shi'],dict1['ting'],dict1['wei'],dict1['面吉'],cx [dict1['chaoxiang']],dict1['louceng'],dict1['jianzao']]# 对于特征数据,进行归一化#tt=scaler.transform([lst])apply=np .array (lst). reshape(1, -1)applyy_pred1=model_rfr.predict(apply)# # 计算R2 幂# r2=r2_score( apply, y_pred1)# print(r2)print(round(model_rfr.predict(apply ) )[0], 2 ))result['price']=round(model_rfr.predict(apply)[0], 2) 网站建设搭建django web 服务器
主页面展示清理后的二手房数据,可以进行页面划分和过滤,采用JS语言实现。
预测页面。用户可以输入相关信息进行预测
预测结果显示:
总价格直方图。您可以选择全部数据,也可以选择城市单独查看数据
房屋类型统计表
走向箱线图
容积率表
相关系数热图
按地区划分的房价图
文件结构
以上是项目的整体介绍,如果您有任何意见或建议,请联系我们。