南宁网站制作公司哪家好,住房和城乡建设部网站预售证,上海百度研发中心,东莞网络科技有限公司#x1f935;♂️ 个人主页#xff1a;艾派森的个人主页 ✍#x1f3fb;作者简介#xff1a;Python学习者 #x1f40b; 希望大家多多支持#xff0c;我们一起进步#xff01;#x1f604; 如果文章对你有帮助的话#xff0c; 欢迎评论 #x1f4ac;点赞#x1f4… ♂️ 个人主页艾派森的个人主页 ✍作者简介Python学习者 希望大家多多支持我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 写在前面
最近有粉丝问我“什么 AI 工具好”其实还是得看自己的使用场景很难说有最好用只有最合自己胃口的。对我来说好用的 AI 工具满足几个标准
使用方便。用的时候不要太麻烦最好一键就能启用功能丰富。这样可以覆盖绝大多数的使用场景性能一流。决定上限价格实惠。这很重要
以前我用 ChatGPT 最多主要是当时没别的可选就它最厉害但现在大模型之间的性能差距越来越小所以慢慢地其他工具就一块用了比如 Claude、KimiAI 搜索的 Perplexity综合起来看我目前用得频率最高、也是最顺手的 AI 工具反而是一个浏览器插件“灵办 AI”。功能挺多该有的都有比如
AI 对话翻译阅读网页文档联网搜索AI 写作..... 感兴趣的小伙伴点击下方链接即可免费注册使用推荐使用电脑
https://ilingban.com/browser_extension/?fromaps 目录
1.项目背景
2.数据集介绍
3.技术工具
4.实验过程
4.1导入数据
4.2数据预处理
4.3数据可视化
4.4特征工程
4.5构建模型
4.6特征重要性
4.7模型预测
源代码 1.项目背景 在当今数字化快速发展的时代数据已成为驱动决策和预测未来的重要力量。房地产市场作为国民经济的重要组成部分其价格的波动不仅直接影响着居民的生活水平也反映了国家宏观经济的运行状况。长沙市作为湖南省的省会城市近年来随着经济的快速发展和城市化进程的加速租房市场也呈现出蓬勃发展的态势。 然而租房价格的波动受到多种因素的影响包括供求关系、地理位置、房屋类型、装修状况、交通便捷性、周边设施等。这些因素之间相互交织形成了复杂的动态系统使得租房价格的预测变得尤为困难。传统的预测方法如基于经验或简单统计的预测往往难以准确反映市场变化且难以适应复杂多变的市场环境。 为了更准确地预测长沙市租房价格本研究将采用基于Python爬虫和机器学习的方法。Python爬虫技术可以从互联网上大量抓取相关的租房数据包括房源信息、价格、地理位置、房屋类型等为后续的机器学习模型提供丰富的数据基础。而机器学习技术则可以通过对大量数据的分析和学习自动发现数据中的规律和模式从而实现对租房价格的准确预测。 具体来说本研究将分为以下几个步骤首先利用Python爬虫技术从各大租房网站和平台上抓取相关的租房数据其次对抓取的数据进行清洗、预处理和特征工程提取出与租房价格相关的关键特征然后选择合适的机器学习算法如线性回归、决策树、随机森林、神经网络等构建租房价格预测模型最后通过模型训练和验证不断优化模型参数提高预测精度。 本研究旨在通过Python爬虫和机器学习技术的结合实现对长沙市租房价格的准确预测为政府决策、房地产开发商、租赁企业和租户等提供有价值的参考信息。同时本研究也将为机器学习在房地产价格预测领域的应用提供新的思路和方法具有一定的理论意义和实践价值。
2.数据集介绍 本实验数据集来源于房天下官网通过使用python爬虫获取了长沙市的租房数据 获取了房屋租金、交付方式、房屋户型、房屋面积、装修情况、校区、地址、配套设施、房源亮点等字段信息具体如下图所示。 3.技术工具
Python版本:3.9
代码编辑器jupyter notebook
4.实验过程
4.1导入数据
导入数据分析的第三方库并加载数据集 查看数据大小 查看数据基本信息 查看数据描述性统计 4.2数据预处理
统计缺失值情况 发现个别变量存在少量或大量缺失值
这里我们先直接删除“楼层”和“距地铁距离”这两个变量因为这两个变量缺失值较多最后统一删除缺失值 处理“房屋租金”变量只提取出金额数值 处理房屋面积只提取出数值 4.3数据可视化 自定义一个画词云图的函数 做出房源亮点词云图 做出配套设施词云图 4.4特征工程
筛选特征 对非数值变量进行编码处理 准备建模所需数据即特征变量X和目标变量y接着拆分数据集为训练集和测试集其中测试集比例为0.2 4.5构建模型
定义一个训练模型并输出模型的评估指标 构建多元回归模型 构建KNN模型 从上面构建的模型中XGBoost模型的准确率最高为0.98 故我们选择其作为最终模型。
4.6特征重要性
获取模型特征重要性并排序打印输出最后进行可视化展示 4.7模型预测 将预测结果可视化展示 源代码
import matplotlib.pylab as plt
import numpy as np
import seaborn as sns
import pandas as pd
plt.rcParams[font.sans-serif] [SimHei] #解决中文显示
plt.rcParams[axes.unicode_minus] False #解决符号无法显示
sns.set(fontSimHei)
import warnings
warnings.filterwarnings(ignore)df pd.read_csv(长沙租房数据.csv) # 导入数据
df.head() # 查看数据前五行
df.shape # 查看数据大小
df.info() # 查看数据基本信息
df.describe().T # 查看数据描述性统计
df.isnull().sum() # 统计缺失值情况
df.drop([距地铁距离,楼层],axis1,inplaceTrue)
df.dropna(inplaceTrue)
df[房屋租金] df[房屋租金].apply(lambda x:int(x.split(元)[0]))
df[房屋租金]
df[房屋面积] df[房屋面积].apply(lambda x:int(x[:-2]))
df[房屋面积]
sns.boxplot(datadf,x房屋租金)
plt.show()
sns.histplot(datadf,x房屋租金,kdeTrue)
plt.show()
sns.boxplot(datadf,y房屋面积)
plt.show()
sns.histplot(datadf,x房屋面积,kdeTrue)
plt.show()
plt.scatter(xdf[房屋面积],ydf[房屋租金])
plt.show()
sns.countplot(datadf,x交付方式)
plt.show()
df[出租方式].value_counts().plot(kindpie,autopct%.2f%%)
plt.show()
sns.boxplot(datadf,y房屋租金,x交付方式)
plt.show()
sns.boxplot(datadf,y房屋租金,x出租方式)
plt.show()
df[房屋朝向].value_counts().plot(kindpie,autopct%.2f%%)
plt.show()
sns.barplot(datadf,x房屋朝向,y房屋租金)
plt.show()
df[房屋装修].value_counts().plot(kindpie,autopct%.2f%%)
plt.show()
sns.barplot(datadf,x房屋装修,y房屋租金)
plt.show()
# 相关性分析
sns.heatmap(df.corr(),vmax1,annotTrue,linewidths0.5,cbarFalse,cmapYlGnBu,annot_kws{fontsize:18})
plt.xticks(fontsize20)
plt.yticks(fontsize20)
plt.title(各个因素之间的相关系数,fontsize20)
plt.show()
import jieba
import collections
import re
import stylecloud
from PIL import Imagedef draw_WorldCloud(df,pic_name,colorblack):data .join([item for item in df])# 文本预处理 去除一些无用的字符只提取出中文出来new_data re.findall([\u4e00-\u9fa5], data, re.S)new_data .join(new_data)# 文本分词seg_list_exact jieba.cut(new_data, cut_allTrue)result_list []with open(停用词库.txt, encodingutf-8) as f: #可根据需要打开停用词库然后加上不想显示的词语con f.readlines()stop_words set()for i in con:i i.replace(\n, ) # 去掉读取每一行数据的\nstop_words.add(i)for word in seg_list_exact:if word not in stop_words and len(word) 1:result_list.append(word)word_counts collections.Counter(result_list)# 词频统计获取前100最高频的词word_counts_top word_counts.most_common(100)print(word_counts_top)# 绘制词云图stylecloud.gen_stylecloud(text .join(result_list[:500]), # 提取500个词进行绘图collocationsFalse, # 是否包括两个单词的搭配二字组font_pathrC:\Windows\Fonts\msyh.ttc, #设置字体参考位置为 C:\Windows\Fonts\ 根据里面的字体编号来设置size800, # stylecloud 的大小palettecartocolors.qualitative.Bold_7, # 调色板调色网址 https://jiffyclub.github.io/palettable/background_colorcolor, # 背景颜色icon_namefas fa-circle, # 形状的图标名称 蒙版网址https://fontawesome.com/icons?dgalleryp2cchat,shopping,travelmfreegradienthorizontal, # 梯度方向max_words2000, # stylecloud 可包含的最大单词数max_font_size150, # stylecloud 中的最大字号stopwordsTrue, # 布尔值用于筛除常见禁用词output_namef{pic_name}.png) # 输出图片# 打开图片展示imgImage.open(f{pic_name}.png)img.show()
draw_WorldCloud(df[房源亮点],房源亮点词云图) # 词云图可视化
draw_WorldCloud(df[配套设施],配套设施词云图) # 词云图可视化
# 编码处理
df[交付方式].replace({押一付三:0,押一付一:1,面议:2,押一付二:3,年付:4,半年付:5},inplaceTrue)
df[房屋朝向].replace({东:0,南:1,西:2,北:3,南北:4,东南:5,东西:6,西北:7,不限:8},inplaceTrue)
df[房屋装修].replace({毛坯:0,简装修:1,精装修:2,豪华装修:3},inplaceTrue)
# 特征筛选
new_df df[[房屋租金, 交付方式, 房屋面积, 房屋朝向,房屋装修,]]
new_df
from sklearn.model_selection import train_test_split
# 准备数据
X new_df.drop(房屋租金,axis1)
y new_df[房屋租金]
# 划分数据集
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state42)
print(训练集大小:,X_train.shape[0])
print(测试集大小:,X_test.shape[0])
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
# 定义一个训练模型并输出模型的评估指标
def train_model(ml_model):print(Model is: , ml_model)model ml_model.fit(X_train, y_train)print(Training score: , model.score(X_train,y_train))predictions model.predict(X_test)r2score r2_score(y_test, predictions)print(r2 score is: , r2score)print(MAE:, mean_absolute_error(y_test,predictions))print(MSE:, mean_squared_error(y_test,predictions))print(RMSE:, np.sqrt(mean_squared_error(y_test,predictions)))# 真实值和预测值的差值sns.distplot(y_test - predictions)
# 构建多元线性回归
from sklearn.linear_model import LinearRegression
lg LinearRegression()
train_model(lg)
# 构建knn回归
from sklearn.neighbors import KNeighborsRegressor
knn KNeighborsRegressor()
train_model(knn)
# 构建决策树回归
from sklearn.tree import DecisionTreeRegressor
tree DecisionTreeRegressor()
train_model(tree)
# 构建随机森林回归
from sklearn.ensemble import RandomForestRegressor
forest RandomForestRegressor()
train_model(forest)
# GBDT回归
from sklearn.ensemble import GradientBoostingRegressor
gbdt GradientBoostingRegressor()
train_model(gbdt)
# 构建xgboost回归模型
from xgboost import XGBRegressor
xgb XGBRegressor()
train_model(xgb)
# 特征重要性评分
feat_labels X_train.columns[0:]
importances xgb.feature_importances_
indices np.argsort(importances)[::-1]
index_list []
value_list []
for f,j in zip(range(X_train.shape[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(fontsize12)
plt.title(各特征重要程度排序,fontsize14)
plt.show()
# 模型预测
y_pred xgb.predict(X_test)
result_df pd.DataFrame()
result_df[真实值] y_test
result_df[预测值] y_pred
result_df.head(10)
# 模型预测可视化
plt.figure(figsize(10,6))
plt.plot(range(len(y_test))[:200],y_pred[:200],b,labelpredict)
plt.plot(range(len(y_test))[:200],y_test[:200],r,labeltest)
plt.legend(locupper right,fontsize15)
plt.xlabel(the number of house,fontdict{weight: normal, size: 15})
plt.ylabel(value of Price,fontdict{weight: normal, size: 15})
plt.show()
import joblib
joblib.dump(xgb,model.pkl)
new_df
x_data pd.DataFrame(data[[面议,141,南,简装修]],columns[交付方式,房屋面积,房屋朝向,房屋装修])
x_data
# 编码处理
x_data[交付方式].replace({押一付三:0,押一付一:1,面议:2,押一付二:3,年付:4,半年付:5},inplaceTrue)
x_data[房屋朝向].replace({东:0,南:1,西:2,北:3,南北:4,东南:5,东西:6,西北:7,不限:8},inplaceTrue)
x_data[房屋装修].replace({毛坯:0,简装修:1,精装修:2,豪华装修:3},inplaceTrue)
x_data
model joblib.load(model.pkl)
result model.predict(x_data)[0]
result资料获取更多粉丝福利关注下方公众号获取