大数据分析案例-基于随机森林模型对北京房价进行预测

目录

1.项目背景

2.项目简介

2.1数据说明

 2.2技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.2.1缺失值处理

4.2.2重复值处理 

4.2.3异常值处理

4.3探索性数据分析

4.3.1城区数量分布情况

4.3.2城区房价情况

4.3.3学区房对房价的影响

4.3.4地铁对房价的影响

4.3.5各特征的相关性

4.4特征工程

4.5模型构建

4.6参数调优

4.7模型预测

5.实验总结


1.项目背景

        自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬勃起来。同时,随着社会经济的快速开展,居民的经济条件越来越好,住房条件也在不断地提升。而住房是人民根本生活的保障,也是-一个家庭最重要的资产,从一定的层面.上反映了一个家庭整体的生活水王,多方面的因素使得房地产行业在短时间开展成为我国的支柱产业之一;成为了切实关乎人民生活和利益的重要产业。然而,随着房地产行业的开展,问题也慢慢突显出来,房价一直居高不下成为了一个大问题。

        作为国家的支柱产业,房地产的稳定发展关乎国计民生。近几年,房地产价格飞速上涨,连创新高。在这种状况下探讨房价的影响因素,具有重要的理论和现实意义。

2.项目简介

2.1数据说明

本次项目的数据集来自北京市的几个区的房价数据。

主要字段信息如下:

字段名 描述
城区 ['丰台','海淀','朝阳','东城','西城','石景山']
卧室数

整数类型 范围1-5

客厅数 整数类型  范围0-3
面积 浮点数类型
楼层 low,middle,high三种类型
是否靠近地铁 是、否
是否学区房 是、否
房价 浮点数类型,单位万每平方米

 2.2技术工具

python3.9

vscode编辑器

3.算法原理

多元线性回归算法可以参考Python实现线性回归和梯度下降算法

随机森林算法可以参考随机森林算法原理及使用

4.项目实施步骤

4.1理解数据

首先,导入数据

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示

data = pd.read_excel('House_sample.xlsx',sheet_name=1)
data.head()

查看数据大小

 

数据集共有803行,8列

查看数据描述性统计信息

 从结果可以看出卧室数、客厅数、面积、房价这些数据的均值、方差、最大最小、四分位数等信息。

查看数据基本信息

 从数据基本信息中,我们可以看出每个特征的缺失值情况以及数据类型。

4.2数据预处理

4.2.1缺失值处理

首先,先查看数据是否存在缺失值

我们发现数据没有缺失值,所有不需要处理。

4.2.2重复值处理 

 借助any()函数,我们可以检测数据是否存在重复值,存在则返回结果为True,不存在返回False,所有本数据也不存在重复值,不需要处理。

4.2.3异常值处理

先通过可视化看看我们的数值型数据是否存在异常值

# 查看是否存在异常值
cols = data.describe().columns.to_list()
plt.figure(figsize=(12,12))
for index,col in enumerate(cols,1):
    plt.subplot(2,2,index)
    sns.boxplot(f'{col}',data=data)
plt.show()

从可视化结果中看出,卧室数存在一个明显的异常值,客厅数不存在异常值,面积存在一定的异常值,房价也存在少量的异常值。

接着开始对存在异常值的特征进行筛选处理

# 筛选出异常值
new_data = data[(data['卧室数']<4.5) & (data['面积']<200) & (data['房价']<12)]
new_data.shape

 

从数据大小中,我们看出已经将异常值剔除了。 

4.3探索性数据分析

4.3.1城区数量分布情况

# 各城区的数量
new_data['城区'].value_counts().plot(kind='barh')
plt.xlabel('数量')
plt.ylabel('城区')
plt.title('各城区的数量')
plt.show()

 从分布结果来看,各城区数量差距不大,其中丰台最多,石景山最少。

4.3.2城区房价情况

# 分析各城区的房价分布情况
plt.figure(figsize=(8,6))
sns.boxplot(x='城区',y='房价',data=new_data)

 从箱线图我们可以看出,西城的房价普遍较高,丰台和石景山的房价则相对较低。

4.3.3学区房对房价的影响

# 分析各城区的房价分布情况
plt.figure(figsize=(8,hue='是否学区房',data=new_data)

 从结果看出,除了石景山,其他城区普遍都是学区房的价格高于不是学区房,其中丰台虽然价格低,但是这个现象更为明显。

4.3.4地铁对房价的影响

# 分析各城区的房价分布情况
plt.figure(figsize=(8,hue='是否靠近地铁',data=new_data)

 

从结果我们看出,除了西城,其他城区的靠近地铁的房价都高于没有靠近地铁的,其中朝阳和海淀这两个区的趋势更为明显。至于西城,可能是因为地理位置比较好,处于市中心地带,房价普遍较高,所有靠不靠进地铁其实影响不大。

4.3.5各特征的相关性

fig = plt.figure(figsize=(8,8))
sns.heatmap(new_data.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('各个因素之间的相关系数',fontsize=20)
plt.show()

 

从图中,我们可以看出各个数值型特征之间的皮尔曼相关系数,其中面积与客厅数和卧室数,成正相关,这也符合常理。 

4.4特征工程

首先要对字符型数据进行转换处理,为后面建模做铺垫

new_data['城区'] = new_data['城区'].map({'丰台':0,'海淀':1,'朝阳':2,'东城':3,'西城':4,'石景山':5})
new_data['楼层'] = new_data['楼层'].map({'high':0,'middle':1,'low':2})
new_data['是否靠近地铁'] = new_data['是否靠近地铁'].map({'是':1,'否':0})
new_data['是否学区房'] = new_data['是否学区房'].map({'是':1,'否':0})
new_data.head()

接着,我们需要对数据集进行拆分训练集和测试集

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X = new_data.drop('房价',axis=1)
y = new_data['房价']
# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=666)

4.5模型构建

首先使用多元线性回归模型

from sklearn.linear_model import LinearRegression
lg = LinearRegression()
lg.fit(x_train,y_train)
y_train_pred = lg.predict(x_train)
y_test_pred = lg.predict(x_test)
print('训练集mse:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,y_test_pred))

接着使用随机森林模型

# 随机森林
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state=0)
rfr.fit(x_train,y_train)
y_train_pred = rfr.predict(x_train)
y_test_pred = rfr.predict(x_test)
print('训练集mse:',y_test_pred))

 

最后使用神经网络模型

# 神经网络
from sklearn.neural_network import MLPRegressor
mlp = MLPRegressor()
mlp.fit(x_train,y_train)
y_train_pred = mlp.predict(x_train)
y_test_pred = mlp.predict(x_test)
print('训练集mse:',y_test_pred))

 

通过三个模型的mse值对比,这里我们主要看的是测试集上的mse,其中随机森林模型的mse最低,于是我们使用随机森林模型建模。 

4.6参数调优

这里我们使用网格搜索进行最优参数的选取

# 利用网格搜索进行最优参数的选取
from sklearn.model_selection import GridSearchCV
param_grid = {
    'n_estimators':[i*50 for i in range(1,15)],'min_samples_split':[2,3,5],'min_samples_leaf':[1,3]
}
grid_seach_rf = GridSearchCV(estimator=RandomForestRegressor(random_state=0),param_grid=param_grid,scoring='neg_mean_squared_error',cv=5)
grid_seach_rf.fit(x_train,y_train)
print(grid_seach_rf.best_params_)

通过参数搜索,我们找到了最优参数,于是对原始模型进行拟合

# 经过参数优化后的随机森林
rfr_ = RandomForestRegressor(n_estimators=100,min_samples_leaf=3,min_samples_split=2,random_state=666)
rfr_.fit(x_train,y_train)
y_train_pred = rfr_.predict(x_train)
y_test_pred = rfr_.predict(x_test)
print('训练集mse:',y_test_pred))

 

 我们看出在测试集上的mse减小了,虽然训练集上增大了,但是这个影响不大,毕竟我们追求的是在测试集上准确率能高点。

最后,我们还可以打印出特征重要性并可视化

#打印特征重要性评分
feat_labels = x_train.columns[0:]
importances = rfr.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(x_train.shape[1]-1),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1,feat_labels[j],importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()

 通过特征重要程度,我们可以看出,是否为学区房、面积、城区对房价预测模型的影响程度较大。

4.7模型预测

最后,我们使用模型来进行预测,这里我们选取了测试集中的前50条数据进行预测并可视化

# 模型评价  
import matplotlib.pyplot as plt  
plt.figure(figsize=(8,6))  
plt.plot(range(len(y_test_pred))[:50],y_test_pred[:50],'b',label='predict')
plt.plot(range(len(y_test_pred))[:50],y_test[:50],'r',label='test')
plt.legend(loc='upper right')
plt.xlabel('the number of house_price',fontdict={'weight': 'normal','size': 15})
plt.ylabel('value of house_price','size': 15})
plt.show()

通过模型预测可视化结果来看,模型预测的还算可以。 

5.实验总结

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

原文地址:https://blog.csdn.net/m0_64336780" target="_blank" rel="noopener" title="艾派森">艾派森</a> <img class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/p

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读5.3k次,点赞10次,收藏39次。本章详细写了mysql的安装,环境的搭建以及安装时常见的问题和解决办法。_mysql安装及配置超详细教程
文章浏览阅读1.8k次,点赞50次,收藏31次。本篇文章讲解Spark编程基础这门课程的期末大作业,主要围绕Hadoop基本操作、RDD编程、SparkSQL和SparkStreaming编程展开。_直接将第4题的计算结果保存到/user/root/lisi目录中lisipi文件里。
文章浏览阅读7.8k次,点赞9次,收藏34次。ES查询常用语法目录1. ElasticSearch之查询返回结果各字段含义2. match 查询3. term查询4. terms 查询5. range 范围6. 布尔查询6.1 filter加快查询效率的原因7. boosting query(提高查询)8. dis_max(最佳匹配查询)9. 分页10. 聚合查询【内含实际的demo】_es查询语法
文章浏览阅读928次,点赞27次,收藏18次。
文章浏览阅读1.1k次,点赞24次,收藏24次。作用描述分布式协调和一致性协调多个节点的活动,确保一致性和顺序。实现一致性、领导选举、集群管理等功能,确保系统的稳定和可靠性。高可用性和容错性Zookeeper是高可用的分布式系统,通过多个节点提供服务,容忍节点故障并自动进行主从切换。作为其他分布式系统的高可用组件,提供稳定的分布式协调和管理服务,保证系统的连续可用性。配置管理和动态更新作为配置中心,集中管理和分发配置信息。通过订阅机制,实现对配置的动态更新,以适应系统的变化和需求的变化。分布式锁和并发控制。
文章浏览阅读1.5k次,点赞26次,收藏29次。为贯彻执行集团数字化转型的需要,该知识库将公示集团组织内各产研团队不同角色成员的职务“职级”岗位的评定标准;
文章浏览阅读1.2k次,点赞26次,收藏28次。在安装Hadoop之前,需要进行以下准备工作:确认操作系统:Hadoop可以运行在多种操作系统上,包括Linux、Windows和Mac OS等。选择适合你的操作系统,并确保操作系统版本符合Hadoop的要求。安装Java环境:Hadoop是基于Java开发的,因此需要先安装和配置Java环境。确保已经安装了符合Hadoop版本要求的Java Development Kit (JDK),并设置好JAVA_HOME环境变量。确认硬件要求:Hadoop是一个分布式系统,因此需要多台计算机组成集群。
文章浏览阅读974次,点赞19次,收藏24次。# 基于大数据的K-means广告效果分析毕业设计 基于大数据的K-means广告效果分析。
文章浏览阅读1.7k次,点赞6次,收藏10次。Hadoop入门理论
文章浏览阅读1.3w次,点赞28次,收藏232次。通过博客和文献调研整理的一些农业病虫害数据集与算法。_病虫害数据集
文章浏览阅读699次,点赞22次,收藏7次。ZooKeeper使用的是Zab(ZooKeeper Atomic Broadcast)协议,其选举过程基于一种名为Fast Leader Election(FLE)的算法进行。:每个参与选举的ZooKeeper服务器称为一个“Follower”或“Candidate”,它们都有一个唯一的标识ID(通常是一个整数),并且都知道集群中其他服务器的ID。总之,ZooKeeper的选举机制确保了在任何时刻集群中只有一个Leader存在,并通过过半原则保证了即使部分服务器宕机也能维持高可用性和一致性。
文章浏览阅读10w+次,点赞62次,收藏73次。informatica 9.x是一款好用且功能强大的数据集成平台,主要进行各类数据库的管理操作,是使用相当广泛的一款ETL工具(注: ETL就是用来描述将数据从源端经过抽取(extract)、转换(transform)、加载(load)到目的端的过程)。本文主要为大家图文详细介绍Windows10下informatica powercenter 9.6.1安装与配置步骤。文章到这里就结束了,本人是在虚拟机中装了一套win10然后在此基础上测试安装的这些软件,因为工作学习要分开嘛哈哈哈。!!!!!_informatica客户端安装教程
文章浏览阅读7.8w次,点赞245次,收藏2.9k次。111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例
文章浏览阅读1.9k次,点赞61次,收藏64次。TDH企业级一站式大数据基础平台致力于帮助企业更全面、更便捷、更智能、更安全的加速数字化转型。通过数年时间的打磨创新,已帮助数千家行业客户利用大数据平台构建核心商业系统,加速商业创新。为了让大数据技术得到更广泛的使用与应用从而创造更高的价值,依托于TDH强大的技术底座,星环科技推出TDH社区版(Transwarp Data Hub Community Edition)版本,致力于为企业用户、高校师生、科研机构以及其他专业开发人员提供更轻量、更简单、更易用的数据分析开发环境,轻松应对各类人员数据分析需求。_星环tdh没有hive
文章浏览阅读836次,点赞21次,收藏19次。
文章浏览阅读1k次,点赞21次,收藏15次。主要介绍ETL相关工作的一些概念和需求点
文章浏览阅读1.4k次。本文以Android、java为开发技术,实现了一个基于Android的博物馆线上导览系统 app。基于Android的博物馆线上导览系统 app的主要使用者分为管理员和用户,app端:首页、菜谱信息、甜品信息、交流论坛、我的,管理员:首页、个人中心、用户管理、菜谱信息管理、菜谱分类管理、甜品信息管理、甜品分类管理、宣传广告管理、交流论坛、系统管理等功能。通过这些功能模块的设计,基本上实现了整个博物馆线上导览的过程。
文章浏览阅读897次,点赞19次,收藏26次。1.背景介绍在当今的数字时代,数据已经成为企业和组织中最宝贵的资源之一。随着互联网、移动互联网和物联网等技术的发展,数据的产生和收集速度也急剧增加。这些数据包括结构化数据(如数据库、 spreadsheet 等)和非结构化数据(如文本、图像、音频、视频等)。这些数据为企业和组织提供了更多的信息和见解,从而帮助他们做出更明智的决策。业务智能(Business Intelligence,BI)...
文章浏览阅读932次,点赞22次,收藏16次。也就是说,一个类应该对自己需要耦合或调用的类知道的最少,类与类之间的关系越密切,耦合度越大,那么类的变化对其耦合的类的影响也会越大,这也是我们面向对象设计的核心原则:低耦合,高内聚。优秀的架构和产品都是一步一步迭代出来的,用户量的不断增大,业务的扩展进行不断地迭代升级,最终演化成优秀的架构。其根本思想是强调了类的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会波及有关系的类。缓存,从操作系统到浏览器,从数据库到消息队列,从应用软件到操作系统,从操作系统到CPU,无处不在。
文章浏览阅读937次,点赞22次,收藏23次。大数据可视化是关于数据视觉表现形式的科学技术研究[9],将数据转换为图形或图像在屏幕上显示出来,并进行各种交互处理的理论、方法和技术。将数据直观地展现出来,以帮助人们理解数据,同时找出包含在海量数据中的规律或者信息,更多的为态势监控和综合决策服务。数据可视化是大数据生态链的最后一公里,也是用户最直接感知数据的环节。数据可视化系统并不是为了展示用户的已知的数据之间的规律,而是为了帮助用户通过认知数据,有新的发现,发现这些数据所反映的实质。大数据可视化的实施是一系列数据的转换过程。