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

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

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,6))
sns.boxplot(x='城区',y='房价',hue='是否学区房',data=new_data)

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


4.3.4地铁对房价的影响

# 分析各城区的房价分布情况
plt.figure(figsize=(8,6))
sns.boxplot(x='城区',y='房价',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:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,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:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,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,2,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:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,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',fontdict={'weight': 'normal', 'size': 15})
plt.show()

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


5.实验总结

心得与体会:


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


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


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


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


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


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


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


目录
相关文章
|
4月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
5月前
|
存储 SQL 分布式计算
终于!大数据分析不用再“又要快又要省钱”二选一了!Dataphin新功能太香了!
Dataphin推出查询加速新功能,支持用StarRocks等引擎直连MaxCompute或Hadoop查原始数据,无需同步、秒级响应。数据只存一份,省成本、提效率,权限统一管理,打破“又要快又要省”的不可能三角,助力企业实现分析自由。
297 49
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
5月前
|
数据采集 数据可视化 关系型数据库
基于python大数据的电影数据可视化分析系统
电影分析与可视化平台顺应电影产业数字化趋势,整合大数据处理、人工智能与Web技术,实现电影数据的采集、分析与可视化展示。平台支持票房、评分、观众行为等多维度分析,助力行业洞察与决策,同时提供互动界面,增强观众对电影文化的理解。技术上依托Python、MySQL、Flask、HTML等构建,融合数据采集与AI分析,提升电影行业的数据应用能力。
|
4月前
|
传感器 人工智能 监控
拔俗多模态跨尺度大数据AI分析平台:让复杂数据“开口说话”的智能引擎
在数字化时代,多模态跨尺度大数据AI分析平台应运而生,打破数据孤岛,融合图像、文本、视频等多源信息,贯通微观与宏观尺度,实现智能诊断、预测与决策,广泛应用于医疗、制造、金融等领域,推动AI从“看懂”到“会思考”的跃迁。
397 0
|
5月前
|
机器学习/深度学习 传感器 分布式计算
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
418 14
|
7月前
|
数据采集 分布式计算 DataWorks
ODPS在某公共数据项目上的实践
本项目基于公共数据定义及ODPS与DataWorks技术,构建一体化智能化数据平台,涵盖数据目录、归集、治理、共享与开放六大目标。通过十大子系统实现全流程管理,强化数据安全与流通,提升业务效率与决策能力,助力数字化改革。
269 4
|
6月前
|
机器学习/深度学习 运维 监控
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
438 0