当前位置: 首页 > news >正文

杭州网络推广公司扬中企业网站优化哪家好

杭州网络推广公司,扬中企业网站优化哪家好,邯郸广告设计招聘,老房装修改造哪家好引言 随着城市化进程的加速#xff0c;人口流动日益频繁#xff0c;租房市场作为城市生活的重要组成部分#xff0c;其价格波动对居民生活质量和城市经济发展具有显著影响。成都市#xff0c;作为中国西部地区的经济、文化、交通和科技中心#xff0c;近年来吸引了大量人…引言 随着城市化进程的加速人口流动日益频繁租房市场作为城市生活的重要组成部分其价格波动对居民生活质量和城市经济发展具有显著影响。成都市作为中国西部地区的经济、文化、交通和科技中心近年来吸引了大量人才和企业租房需求持续增长。然而租房价格的不确定性给租户和房东带来了诸多不便。为了更好地理解租房市场的动态预测租房价格成为一项重要的研究课题。 研究方法 本文将采用多种数据分析方法包括统计分析、机器学习等以确保模型的准确性和可靠性。 研究目标 本文旨在通过构建基于成都市各区市县的租房价格预测模型分析影响租房价格的关键因素。 数据信息 数据源自某租房平台网站数据为公开数据通过整合形成表格本数据需要进行清洗没有国外数据好用。 过程…… 读入数据 import matplotlib.pylab as plt import re import numpy as np import seaborn as sns import pandas as pd plt.rcParams[font.sans-serif] [SimHei] #解决中文显示 plt.rcParams[axes.unicode_minus] False #解决符号无法显示 import warnings warnings.filterwarnings(ignore) # 导入plotly库这是一个基于Web的交互式图表库允许创建丰富的、交互式的数据可视化图表。 import plotly as py # 导入cufflinks库这是一个用于Pandas DataFrame的Plotly绘图接口可以让Pandas DataFrame直接通过cufflinks的API绘制Plotly图表。 import plotly.express as px import plotly.graph_objects as go df pd.read_csv(成都.csv) df.tail()原始数据长下面这样显示后5行 我们先看下数据信息、重复值、缺失值情况 有4列存在缺失值情况181行数据重复。 # 删除缺失值 df.dropna(inplaceTrue) # 删除重复值 df.drop_duplicates(inplaceTrue) df.shape删完剩余2786行, 8列。 数据清洗 # 定义一个函数用于从字符串中提取括号前的中文部分 def extract_chinese_before_brackets(s): # 检查传入的参数s是否为字符串类型 if isinstance(s, str): # 使用正则表达式搜索字符串s查找从开头到第一个全角左括号之前的所有内容 match re.search(r^(.*?), s) # 如果找到了匹配项 if match: # 返回匹配到的内容即括号前的所有字符 return match.group(1) else: # 如果没有找到匹配项即没有括号或括号前没有内容返回空字符串 return else: # 如果传入的参数s不是字符串类型直接返回空字符串 return # 应用上面定义的函数到DataFrame的楼层列 # 使用apply方法将函数应用于楼层列的每一个元素 # 并将函数的返回值即每个元素括号前的中文部分存储在新的列楼层类型中 df[楼层类型] df[楼层].apply(extract_chinese_before_brackets) df.tail()上面定义一个函数用于提取“楼层”列最左边的中文文字存储于新建列“楼层类型”列并显示后5行详见下图 # 使用str.extract方法从楼层列的每个字符串中提取括号内的数字\d # 这里的正则表达式(\d)层用于匹配全角左括号后跟着一个或多个数字\d然后是全角右括号和层字 # 提取的数字即括号内的内容将被存储在新的列楼房层数中 df[楼房层数] df[楼层].str.extract(r(\d)层) # 使用drop方法删除原始的楼层列 # 参数columns楼层指定了要删除的列名 # inplaceTrue表示在原地修改DataFrame而不是返回一个新的DataFrame df.drop(columns楼层, inplaceTrue) # 使用head方法查看修改后的DataFrame的前几行默认是前5行 # 这有助于验证楼房层数列是否已正确添加并且楼层列是否已被删除 df.head()再利用正则表达式提取出括号内的数字也就是楼层并存储于新列显示前5行数据详见下图 # 提取的结果将被分配到新的列卧室间数、客厅间数和卫生间数 df[[卧室间数, 客厅间数, 卫生间数]] df[户型].str.extract(r(\d)室(\d)厅(\d)卫, expandTrue) df.drop(columns户型, inplaceTrue) df.head()新建三列’卧室间数’, ‘客厅间数’, 卫生间数’用于存储户型内的如“3室1厅2卫 ”便于后续的机器学习还是利用正则表达式提取详见下图 df[[区市县, 地域, 楼盘名称]] df[位置].str.split(-, expandTrue, n2) df.drop(columns位置, inplaceTrue) df.head()新建’区市县’, ‘地域’, 楼盘名称’三列用于存储“位置”列如“青羊-外光华-凯德风尚 ”用于后续的数据分析详见下图 现在我们来看看“朝向”列有哪些不重复的唯一值 可以看到国内的数据很乱现在要做的是有“东”或“西”字眼的我们统一把他替换为“东西”有“南”或“北”字眼的我们统一把他替换为“南北”。继续写个函数来处理数据。 # 定义转换函数 def transform_direction(direction): if pd.isna(direction): # 检查是否为 NaN return np.nan # 或者你可以选择返回其他默认值如 未知 if isinstance(direction, str): # 确保是字符串类型 if 东 in direction or 西 in direction: return 东西 elif 南 in direction or 北 in direction: return 南北 else: return direction # 返回原始字符串这里可能包含未知等 else: return np.nan # 如果不是字符串类型返回 NaN或其他默认值 # 将 朝向 列转换为字符串类型并处理 NaN 值 df[朝向] df[朝向].astype(str) # 应用转换函数到 Series 的每个元素 df[朝向] df[朝向].apply(transform_direction) df.tail()处理完成显示后5行详见下图 再看下其他列有没有问题 没啥问题现在将数字类型的列转为相对应的类型 df df.astype({金额: int,楼房层数: int,卧室间数: int,客厅间数: int,卫生间数: int}) # 指定字段转指定类型 df.info()搞定进入下一阶段内容。 探索性分析EDA # 使用Plotly绘制箱型图 fig go.Figure(data[go.Box( ydf[金额], # 这里y轴对应你的租金数据 name房屋租金 # 图例名称 )]) # 自定义图表标题和轴标签 fig.update_layout(title房屋租金——箱型图, yaxis_title租金, xaxis_title) # 箱型图通常不需要x轴标题除非你有多个箱型图并列 # 显示图表 fig.show()从上图可以看出大部分房屋月租金都比较集中成都市最高的租金为45000元/月最小的为500元/月中位数为2500元/月还有四分位距、决策边界等内容。 # 对DataFrame按区市县进行分组并获取每个组的房屋租金数据 grouped df.groupby(区市县)[金额] # 创建一个空的图表对象 fig go.Figure() # 遍历每个组为每个组添加一个箱型图轨迹 for name, group in grouped: fig.add_trace(go.Box( ygroup, namename, boxpointsall, # 显示所有点 jitter0.3, # 点的抖动量以防重叠 pointpos-1.8 # 点的位置 )) # 自定义图表布局 fig.update_layout( title按区市县分组的房屋租金——箱型图, yaxis_title租金, xaxis_title, xaxisdict( typecategory, # 设置x轴为类别轴 categoryorderarray, # 自定义类别顺序 categoryarraylist(grouped.groups.keys()) # 将dict_keys转换为列表 ) ) # 显示图表 fig.show()分区县绘制的箱型图我们重点关注一下“三遗”之城都江堰最高的房租为6000元/月。 from scipy.stats import gaussian_kde # 假设df是你的DataFrame且包含房屋面积列 # 提取房屋面积数据 x df[房子大小].values # 计算KDE kde gaussian_kde(x) # 生成KDE曲线的x轴数据点这里假设你想要覆盖的范围是x的最小值到最大值步长为0.1 x_kde np.linspace(x.min(), x.max(), 300) # 计算KDE曲线在这些点上的y值 y_kde kde(x_kde) # 绘制直方图 fig go.Figure() fig.add_trace(go.Histogram( xx, histnormprobability density, # 使得直方图的面积等于1与KDE曲线可比较 name直方图 )) # 绘制KDE曲线 fig.add_trace(go.Scatter( xx_kde, yy_kde, modelines, nameKDE曲线 )) # 自定义图表布局 fig.update_layout( title房屋面积分布直方图KDE, xaxis_title房屋面积, yaxis_title概率密度 ) # 显示图表 fig.show()要解读这种图表需要观察直方图中条形的高度和KDE曲线的形状。如果直方图的条形较高表示在相应的面积区间内房屋较多KDE曲线的峰值则表示最可能的房屋面积。通过比较直方图和KDE曲线可以分析房屋面积的分布模式例如是否存在一个或多个常见的面积区间或者面积分布是否均匀。 # 创建一个散点图 fig go.Figure(datago.Scatter( xdf[房子大小], ydf[金额], modemarkers, # 设置为散点图 markerdict( size10, # 散点大小 colorblue,# 散点颜色 opacity0.8 # 散点透明度 ) )) # 自定义图表布局 fig.update_layout( title房屋面积与租金——散点图, xaxis_title房屋面积, yaxis_title房屋租金 ) # 显示图表 fig.show()散点图主要是解释相关性的图表不懂的可以点击链接转到我的博客详细查看。蓝色框框内左边的数字是面积右边是房租。 上图实际就是一个坐标轴分x和y轴每个点代表每个数值单个数据叫标量一组数据叫向量坐标轴内可以视作向量空间。 # 计算每个出租方式的计数 value_counts df[类型].value_counts() # 创建饼图数据 labels value_counts.index.tolist() # 获取标签出租方式 values value_counts.values.tolist() # 获取计数 # 绘制饼图 fig go.Figure(data[go.Pie(labelslabels, valuesvalues, hole0.3, textinfolabelpercent, insidetextorientationradial)]) # 自定义图表布局 fig.update_layout( title出租方式分布——饼图, font_size12, # 你可以根据需要调整字体大小 legend_title_text出租方式 # 如果你需要图例对于饼图通常不需要但这里作为示例 ) # 注意饼图通常不需要图例因为每个切片都直接标记了标签和百分比 # 如果你确实需要图例尽管这在饼图中不常见你可能需要以一种不同的方式来实现它 # 显示图表 fig.show()从上图可以看出整租占比达到80.7%。 # 创建箱形图数据 fig go.Figure() # 遍历出租方式的唯一值为每个类别绘制一个箱形图 for category in df[类型].unique(): subset df[df[类型] category] fig.add_trace(go.Box( ysubset[金额], namecategory, markerdict( colorrgb(0, 0, 0), # 箱体的颜色 outliercolorrgba(219, 64, 82, 0.6), # 异常值的颜色 linedict( colorrgb(0,0,0), width1.5 ) ), boxmeansd # sd表示使用标准差标记平均值你也可以设置为mean来直接使用平均值 )) # 自定义图表布局 fig.update_layout( title按出租方式分组的房屋租金——箱形图, yaxis_title房屋租金, xaxis_title出租方式, boxmodegroup # 箱形图的显示模式group表示每个类别的箱形图并排显示 ) # 显示图表 fig.show()从上图可以看出整租的租金浮动较大而合租的租金区间很小。合租的租金价格在2100元/月以下区间仅有1个房屋租金是2100元/月其余都往下在走。 sns.barplot(datadf,x朝向,y金额) plt.show()南北朝向的房子明显租金更高。 # 计算每个楼层的计数 floor_counts df[楼层类型].value_counts() # 创建饼图数据 fig go.Figure(data[go.Pie( labelsfloor_counts.index, # 标签是楼层的唯一值 valuesfloor_counts.values, # 值是每个楼层的计数 hole0.3, # 设置饼图的中心空洞大小 textinfolabelpercent, # 在饼图上显示标签和百分比 insidetextorientationradial # 文本方向为径向 )]) # 更新图表的布局 fig.update_layout( title楼层分布——饼图, # 设置图表的标题 annotations[dict(textstr(round(value, 2))%, x0.5, y0.5, xrefpaper, yrefpaper, showarrowFalse, fontdict(size10), textangle0 if i 0 else i*360/len(floor_counts)) for i, value in enumerate(floor_counts.values)], # 注释文本的位置需要手动调整这里使用了一种简单的方法但可能需要根据实际情况调整 ) # 显示图表 fig.show() 上图展示了成都市楼层分布情况。 sns.barplot(datadf,x楼层类型,y金额) plt.show()低楼层租金略微高于中楼层中楼层租金略微高于高楼层。 # 相关性分析 numeric_columns_simplified df.select_dtypes(includenumber) sns.heatmap(numeric_columns_simplified.corr(),vmax1,annotTrue,linewidths0.5,cbarFalse,cmapYlGnBu,annot_kws{fontsize:12}) plt.xticks(fontsize10) plt.yticks(fontsize10) plt.title(房屋特征皮尔逊相关系数矩阵——热力图,fontsize17) plt.show()跟房租最相关的是他自己1也就是100%相关第二相关的是房子大小68%需要注意的是楼房层数是负相关也就是楼层越高房屋租金越低。 from wordcloud import WordCloud # 将楼层信息列中的所有文本合并成一个长字符串 text .join(df[楼盘名称].astype(str)) font_path /Library/Fonts/Arial Unicode.ttf # macOS上的示例路径 # 创建词云对象并指定中文字体 wordcloud WordCloud(width800, height400, background_colorblack, font_pathfont_path).generate(text) # 使用matplotlib显示词云 plt.figure(figsize(10, 5)) plt.imshow(wordcloud, interpolationbilinear) plt.axis(off) # 不显示坐标轴 plt.show()根据楼盘名称绘制的词云图可以看出“保利天悦”出现的频率很高。 机器学习 特征工程 # 特征筛选 new_df df[[金额, 区市县, 类型, 朝向, 楼层类型, 房子大小, 楼房层数, 卧室间数, 客厅间数, 卫生间数]] new_df new_df.astype(str) new_df选取以下内容作为特征 很多中文我们需要把他转为数字变成计算机熟悉的分类数据 from sklearn.preprocessing import LabelEncoder # 定义一个函数用于对pandas Series进行标签编码 def label_encode(series): # 创建一个LabelEncoder实例 le LabelEncoder() # 使用LabelEncoder的fit_transform方法对Series进行拟合和转换 # 这将Series中的类别通常是字符串转换为从0到n_classes-1的整数 transformed_series le.fit_transform(series) # 返回转换后的Series return transformed_series # 假设new_df是一个已经存在的DataFrame # 使用apply函数将label_encode函数应用到DataFrame的每一列上 # axis0表示函数沿着列垂直方向应用即每一列被视为一个Series进行处理 # 注意这里直接使用apply可能会导致一些问题特别是如果DataFrame包含非对象类型的列 # 因为LabelEncoder只能用于对象类型如字符串的列 # 但为了注释的目的我们假设所有列都是对象类型 new_df new_df.apply(label_encode, axis0) 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 # 导入sklearn库中用于评估模型性能的三个指标R^2分数、平均绝对误差(MAE)、均方误差(MSE) # 定义一个训练模型并输出模型的评估指标的函数 def train_model(ml_model): # 打印传入的模型类型或实例 print(模型名称: , ml_model) # 使用训练数据拟合模型。这里假设X_train和y_train是全局变量或已在此函数外部定义 model ml_model.fit(X_train, y_train) # 在训练数据上评估模型的性能这一步主要用于调试或查看过拟合情况通常不用训练集评估模型最终性能 print(模型预测准确率: , model.score(X_train, y_train)) # 使用训练好的模型对测试集进行预测 predictions model.predict(X_test) # 计算并打印R^2分数评估模型的预测性能 r2score r2_score(y_test, predictions) print(R方: , r2score) # 计算并打印平均绝对误差(MAE)衡量预测值与真实值之间差异的平均绝对值 print(平均绝对误差MAE:, mean_absolute_error(y_test,predictions)) # 计算并打印均方误差(MSE)衡量预测值与真实值之间差异的平方的平均值 print(均方误差MSE:, mean_squared_error(y_test,predictions)) # 计算并打印均方根误差(RMSE)是MSE的平方根与预测值的尺度相同便于理解 print(均方根误差RMSE:, np.sqrt(mean_squared_error(y_test,predictions))) # 真实值和预测值的差值(绘制残差分布图)sns.distplot(y_test - predictions)构建线性回归模型 # 导入LinearRegression类 from sklearn.linear_model import LinearRegression # 创建LinearRegression的实例 lg LinearRegression() # 调用train_model函数传入LinearRegression实例作为参数 train_model(lg)构建决策树模型 # 构建决策树回归 from sklearn.tree import DecisionTreeRegressor # 初始化DecisionTreeRegressor并设置防止过拟合的参数 tree DecisionTreeRegressor() train_model(tree)构建xgboost模型 # 构建xgboost回归模型 from xgboost import XGBRegressor xgb XGBRegressor(learning_rate1.4, n_estimators1000) train_model(xgb)计算各特征重要程度 # 首先定义特征标签列表这里假设X_train是一个DataFrame其列名即为特征名 feat_labels X_train.columns[0:] # 获取X_train的所有列名作为特征标签 # 注意这里假设xgb是一个已经训练好的XGBoost模型实例该模型具有feature_importances_属性 # feature_importances_属性包含了模型中每个特征的重要性评分 # importances xgb.feature_importances_ importances tree.feature_importances_ # 使用argsort函数对重要性评分进行排序并通过[::-1]反转数组以得到重要性从高到低的索引 # 这样indices数组中的第一个索引对应最重要的特征 indices np.argsort(importances)[::-1] # 初始化两个列表用于存储特征和它们对应的重要性评分 index_list [] value_list [] # 遍历排序后的索引和特征数量X_train.shape[1]将特征和重要性评分添加到列表中 # 注意range(X_train.shape[1])实际上生成的是从0到特征数-1的索引但在这里我们将其与indices结合使用 # 并在打印时添加了1以便特征编号从1开始显示如果偏好从0开始则可以去掉f1 for f, j in zip(range(X_train.shape[1]), indices): index_list.append(feat_labels[j]) # 将特征名添加到index_list value_list.append(importances[j]) # 将重要性评分添加到value_list print(f 1, feat_labels[j], importances[j]) # 打印特征编号、名称和重要性评分 # 使用matplotlib的pyplot模块创建一个图形 plt.figure(figsize(10,6)) # 设置图形的大小为10x6英寸 # 绘制水平条形图展示特征的重要性评分 # 注意这里使用了[::-1]来反转列表因为matplotlib默认是从下到上绘制条形图 # 但我们想要从最重要的特征开始即从图形顶部开始绘制 plt.barh(index_list[::-1], value_list[::-1]) # 设置y轴刻度标签的字体大小 plt.yticks(fontsize12) # 设置图形的标题和字体大小 plt.title(各特征重要程度排序, fontsize14) # 显示图形 plt.show()从下图可以看出影响房屋租金特征排序最高的是房子大小接着是楼房层数详见下图 # 模型预测 y_pred tree.predict(X_test) result_df pd.DataFrame() result_df[真实值] y_test result_df[预测值] y_pred result_df.sample(2)随机选择两个真实值和预测值对比对了1个感觉模型有些过拟合了想要再准点还需要对模型调超参数由于比较复杂今天就不展示了。 还有一个知识点需要给大家讲下面其实是一个错误示范之前中文转数字对数据进行了标准化但在预测时未对y_pred进行相应的逆变换预测值看起来比原始数据房屋租金小了很多所以下面的数值是标准化后的数值并不是原始数据。 数据可视化真实值和预测值对比 # 创建一个新的图形并设置其大小为10x6英寸 plt.figure(figsize(10,6)) # 绘制预测值。这里只取前200个预测值y_pred[:200]和对应的索引range(len(y_test))[:200] # 使用蓝色(b)线条表示预测值并设置图例标签为predict plt.plot(range(len(y_test))[:200], y_pred[:200], b, label预测值) # 绘制测试集的真实值。同样只取前200个真实值y_test[:200]和对应的索引 # 使用红色(r)线条表示真实值并设置图例标签为test plt.plot(range(len(y_test))[:200], y_test[:200], r, label真实值) # 添加图例并设置其位置在图形的右上角字体大小为15 plt.legend(locupper right, fontsize15) # 设置x轴的标签为the number of house并通过fontdict字典设置其字体权重和大小 plt.xlabel(the number of house, fontdict{weight: normal, size: 15}) # 设置y轴的标签为value of Price同样通过fontdict字典设置其字体权重和大小 plt.ylabel(value of Price, fontdict{weight: normal, size: 15}) # 显示图形 plt.show()本文数据集可以点击本文上方下载创作不易点赞、评论、收藏是我创作的动力
http://www.w-s-a.com/news/393848/

相关文章:

  • 徐州网站无障碍建设wordpress证书
  • c语言可以做网站吗请人做网站收费多少
  • 中英双语网站怎么做网站为什么做静态
  • 毕业设计做音乐网站可以吗网站运营方案
  • windos 下做网站工具网站右侧返回顶部
  • 点餐网站怎么做济源网站建设济源
  • 嘉兴公司网站制作文明网站的建设与管理几点思考
  • 扬州公司做网站徐州网站建设优化
  • 手机网站弹出层插件有哪些wordpress 文章标签
  • 网站建设详细合同范本长沙注册公司流程与费用
  • 搜索引擎网站录入wordpress怎么修改导航
  • 业务接单网站重庆网站制
  • 绿色农产品网站景区网站建设策划方案
  • 服务器做ssr后还可以做网站吗品牌形象设计公司
  • 太原网站制作计划wordpress创建文章
  • 网站优化要怎么做seo网站关键词优化报价
  • 公司网站友情链接怎么做副链华为荣耀手机官网
  • 一条龙做网站旅游网页设计模板图凡科
  • 中山网站建设哪家便宜在中国做外国网站怎么收钱
  • 网站优化大计孝感注册公司
  • 设计接单app平台有哪些在线网站seo诊断
  • 兰州网站建设推广现代营销手段有哪些
  • 郴州网站seo优化网络安全哪个培训班比较好
  • 做网站需要记哪些代码企业网站建设思路
  • 重庆自助建站模板网络服务器配置与管理
  • 外贸网站怎样做小程序买量平台
  • 中山精品网站建设机构海外留学网站建设方案
  • 长春网站建设工作如何取消wordpress页脚
  • 忻府网站建设排名网络管理系统官网
  • 张家港外贸网站建设国医堂网站平台建设