机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测

科技   科技   2024-11-15 08:11   天津  
点击上方"蓝字",关注"Python当打之年"
后台回复"1",领取众多Python学习资料
大家好,我是欧K~
本期利用Lasso回归和随机森林模型对上海链家二手房数据进行分析与预测看看哪些特征对上海二手房房价影响比较大、不同算法模型对房价预测准确度如何等,希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

期:Pandas+Pyecharts | 上海链家二手房数据分析可视化

1. 导入模块

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split


2. Pandas数据处理

2.1 读取数据 

df = pd.read_excel('./上海链家二手房数据.xlsx')

2.2 查看数据信息

df.info()

  • 一共有 28201 条数据
  • 包含小区名称、户型、面积、区域、楼层、朝向、价格、单价、建筑时间等字段

2.3 去除重复数据

df1 = df.drop_duplicates()

2.4 去除缺失数据

df1 = df1.dropna()

2.5 面积、价格、单价、楼层、建筑时间数据提取

df1['面积'] = pd.to_numeric(df1['面积'].str.extract(r'(\d+\.?\d+)', expand=False))
df1['价格'] = pd.to_numeric(df1['价格'].str.extract(r'(\d+)', expand=False))
df1['单价'] = pd.to_numeric(df1['单价'].str.extract(r'(\d+)', expand=False))
df1['楼层'] = pd.to_numeric(df1['楼层'].str.extract(r'(\d+)', expand=False))
df1['建筑时间'] = pd.to_numeric(df1['建筑时间'].str.replace('年建',''))
2.6 朝向数据处理

df1['朝向'] = df1['朝向'].str.replace('朝','')
df1['朝向'] = df1['朝向'].str.replace('(进门) ','')
df1['朝向'] = df1['朝向'].str.replace('(进门)','')
df1 = df1[df1['朝向'] != '']

2.7 户型数据处理

df1[['户型','室','厅']] = df1['户型'].str.extract(r'((\d+)室(\d+)厅)', expand=True)
df1['室'] = df1['室'].astype('int')
df1['厅'] = df1['厅'].astype('int')


3. 特征分析

3.1 二手房面积分析
def get_area_analyze():
    plt.figure(figsize=(12, 6), dpi=80)
    plt.subplot(1, 2, 1)
    sns.boxplot(df1['面积'],color=range_color[0])
    plt.title('面积分布箱线图')
    plt.xlabel('面积(㎡)')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
    plt.subplot(1, 2, 2)
    sns.histplot(df1['面积'], kde=True, bins=50,color=range_color[1])
    plt.title('面积分布直方图')
    plt.xlabel('面积(㎡)')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)

根据面积分布可以看出,大部分面积在200㎡以下,少部分在200㎡以上,所以过滤面积200㎡以下的数据

3.2 二手房建筑时间分析

根据建筑时间分布可以看出,大部分二手房建筑时间在1980年以后,所以过滤建筑时间1980年以后的数据

3.3 二手房楼层分析
def get_floor_analyze():
    plt.figure(figsize=(12, 6), dpi=80)
    plt.subplot(1, 2, 1)
    sns.boxplot(df1['楼层'],color=range_color[2])
    plt.title('楼层分布箱线图')
    plt.xlabel('楼层')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
    plt.subplot(1, 2, 2)
    sns.histplot(df1['楼层'], kde=True, bins=50,color=range_color[3])
    plt.title('楼层分布直方图')
    plt.xlabel('楼层')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)

根据楼层分布可以看出,大部分二手房楼层在30层以下,所以过滤楼层30层以下的数据
3.4 二手房价格分析

根据二手房价格分布可以看出,大部分二手房价格在1000万以下,所以过滤价格1000万以下的数据

4. 模型分析

筛选需要用到的列数据:
df_model = df1[['面积', '区域', '楼层', '朝向', '建筑时间', '室', '厅', '价格']]
各特征相关性:
corrdf = df_model.corr()
plt.figure(figsize=(12, 12), dpi=80)
sns.heatmap(corrdf, annot=True,cmap="rainbow", linewidths=0.05,square=True,annot_kws={"size":8}, cbar_kws={'shrink': 0.8})
plt.title("各特征相关性热图",size=16)
4.1 Lasso回归
# 建立模型
model = Lasso()
# 训练模型
model.fit(X_train, y_train)
print(f'训练集得分:{round(model.score(X_train, y_train), 2)}')
print(f'测试集得分:{round(model.score(X_test, y_test), 2)}')
# 预测
y_predict = model.predict(X_test)
# 评估
R_square = model.score(X_test, y_test)
print('模型决定系数: ', round(R_square,2))

训练集得分:0.77

测试集得分:0.77

模型决定系数:0.77

真实值预测值对比图

Loss预测:
# 特征参数
mj = 99     # 面积(㎡)
lc = 3      # 楼层
sj = 1999   # 建筑时间
ws = 3      # 卧室数量
kt = 3      # 客厅数量
xzq = '闵行区'# 行政区
cx = '南北'   # 朝向
get_price()
闵行区、1999年、南北朝向、3室3厅、3层、99平米二手房预测价格:535万
4.2 随机森林

训练集得分:0.98

测试集得分:0.84

模型决定系数:0.84

真实值预测值对比图

随机森林预测:
# 特征参数
mj = 99     # 面积(㎡)
lc = 3      # 楼层
sj = 1999   # 建筑时间
ws = 3      # 卧室数量
kt = 3      # 客厅数量
xzq = '闵行区'# 行政区
cx = '南北'   # 朝向
get_price()
闵行区、1999年、南北朝向、3室3厅、3层、99平米二手房预测价格:458万
4.3 总结
  • Loss回归与随机森林模型相比,随机森林在测试集和训练集上的表现均优于Loss回归

  • Loss回归与随机森林预测的结果相差比较大,可采用多组数据进行预测对比。


5. 更多可视化源码
👉 公众号后台回复【可视化项目源码】获取更多可视化代码+数据
在线运行地址:
https://www.heywhale.com/home/column/60e2740e3aeb9c0017b967a2
END

以上就是本期为大家整理的全部内容了,喜欢的朋友可以点赞、点在看也可以分享让更多人知道。

 往期推荐 

源码下载 | Python可视化系列文章资源(源码+数据)

爬虫 | Python爬取某平台杭州二手房数据

爬虫 | Python搞定软科中国大学排名

爬虫 | Python爬取胡润百富榜数据

爬虫 | Python爬取微博实时热搜榜信息

爬虫 | Python爬取B站榜排行榜信息

可视化 | Flask+Mysql+Echarts 豆瓣电影Top250数据分析系统

Pandas+Pyecharts | 上海链家二手房数据分析可视化

机器学习 | 基于KNN近邻和随机森林模型对用户转化进行分析与预测

Pandas+Pyecharts | 全国热门旅游景点数据分析可视化

Pandas+Pyecharts | 深圳市共享单车数据分析可视化

Pandas+Pyecharts | 暑期档电影票房数据分析可视化

Pandas+Pyecharts | 平均预期寿命数据可视化

Pandas+Pyecharts | 杭州二手房数据分析可视化

Pandas+Pyecharts | 当当网畅销图书榜单数据分析可视化

Pandas+Pyecharts | 海南旅游攻略数据分析可视化

Pandas+Pyecharts | 全国海底捞门店数据分析可视化

Pandas+Pyecharts | 京东某商品销量数据分析可视化

Pandas+Pyecharts | 第七次人口普查数据分析可视化

Pandas+Pyecharts | 快手APP全国大学生用户数据分析可视化

Pandas+Pyecharts | 奥迪汽车销量数据分析可视化

Pandas+Pyecharts | 剧荒了?用Python找找最近的热播好剧!

Pandas+Pyecharts | 2023年胡润百富榜数据分析可视化

Pandas+Pyecharts | 2023软科中国大学排名分析可视化

Pandas+Pyecharts | 成都大运会奖牌数据分析可视化

Pandas+Pyecharts | 电子产品销售数据分析可视化+用户RFM画像

Pandas+Pyecharts | 北京近五年历史天气数据可视化

Pandas+Pyecharts | 中国高校及专业数据分析可视化

Pandas+Pyecharts | 新冠疫情数据动态时序可视化

Pandas+Pyecharts | 全国吃穿住行消费排行榜,最‘抠门’的地区居然是北京!!!

Pandas+Pyecharts | 2022世界500强数据分析可视化

Pandas+Pyecharts | 上海市餐饮数据分析可视化

Pandas+Pyecharts | 山东省高考考生数据分析可视化

Pandas+Pyecharts | 20000+天猫订单数据可视化

Pandas+Pyecharts | 40000+汽车之家数据分析可视化

Pandas+Pyecharts | 广州市已成交房源信息数据可视化

Pandas+Pyecharts | 某直聘平台招聘信息数据可视化

可视化 | 再分享一套Flask+Pyecharts可视化模板二

可视化 | 分享一套Flask+Pyecharts可视化模板

可视化 | Python直观展示中国代表团冬奥会荣耀时刻

用Python分析了3W+《独行月球》影评数据,看看观众们怎么说~

Matplotlib | 世界足球俱乐部排名可视化

40000+条考研信息数据可视化(学校、专业分数分布)


【在看】的您又变好看了呢

Python当打之年
当打之年,专注于各领域Python技术,量的积累,质的飞跃。后台回复:【可视化项目源码】可获取可视化系列文章源码和数据
 最新文章