【人工智能】—基于成都市各区(市)县租房价格预测建模研究
引言
随着城市化进程的加速,人口流动日益频繁,租房市场作为城市生活的重要组成部分,其价格波动对居民生活质量和城市经济发展具有显著影响。成都市,作为中国西部地区的经济、文化、交通和科技中心,近年来吸引了大量人才和企业,租房需求持续增长。然而,租房价格的不确定性给租户和房东带来了诸多不便。为了更好地理解租房市场的动态,预测租房价格成为一项重要的研究课题。
研究方法
本文将采用多种数据分析方法,包括统计分析、机器学习等,以确保模型的准确性和可靠性。
研究目标
本文旨在通过构建基于成都市各区(市)县的租房价格预测模型,分析影响租房价格的关键因素。
数据信息
数据源自某租房平台网站,数据为公开数据,通过整合形成表格,本数据需要进行清洗,没有国外数据好用。
过程……
读入数据:
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(inplace=True)
# 删除重复值
df.drop_duplicates(inplace=True)
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='楼层'指定了要删除的列名
# inplace=True表示在原地修改DataFrame,而不是返回一个新的DataFrame
df.drop(columns='楼层', inplace=True)
# 使用head方法查看修改后的DataFrame的前几行(默认是前5行)
# 这有助于验证'楼房层数'列是否已正确添加,并且'楼层'列是否已被删除
df.head()
再利用正则表达式,提取出括号内的数字,也就是楼层并存储于新列,显示前5行数据,详见下图:
# 提取的结果将被分配到新的列'卧室间数'、'客厅间数'和'卫生间数'
df[['卧室间数', '客厅间数', '卫生间数']] = df['户型'].str.extract(r'(\d+)室(\d+)厅(\d+)卫', expand=True)
df.drop(columns='户型', inplace=True)
df.head()
新建三列’卧室间数’, ‘客厅间数’, '卫生间数’用于存储户型内的如“3室1厅2卫 ”便于后续的机器学习,还是利用正则表达式提取,详见下图:
df[['区(市)县', '地域', '楼盘名称']] = df['位置'].str.split('-', expand=True, n=2)
df.drop(columns='位置', inplace=True)
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( y=df['金额'], # 这里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( y=group, name=name, boxpoints='all', # 显示所有点 jitter=0.3, # 点的抖动量,以防重叠 pointpos=-1.8 # 点的位置 )) # 自定义图表布局
fig.update_layout( title='按区(市)县分组的房屋租金——箱型图', yaxis_title='租金', xaxis_title='', xaxis=dict( type='category', # 设置x轴为类别轴 categoryorder='array', # 自定义类别顺序 categoryarray=list(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( x=x, histnorm='probability density', # 使得直方图的面积等于1,与KDE曲线可比较 name='直方图'
)) # 绘制KDE曲线
fig.add_trace(go.Scatter( x=x_kde, y=y_kde, mode='lines', name='KDE曲线'
)) # 自定义图表布局
fig.update_layout( title='房屋面积分布(直方图+KDE)', xaxis_title='房屋面积', yaxis_title='概率密度'
) # 显示图表
fig.show()
要解读这种图表,需要观察直方图中条形的高度和KDE曲线的形状。如果直方图的条形较高,表示在相应的面积区间内房屋较多;KDE曲线的峰值则表示最可能的房屋面积。通过比较直方图和KDE曲线,可以分析房屋面积的分布模式,例如是否存在一个或多个常见的面积区间,或者面积分布是否均匀。
# 创建一个散点图
fig = go.Figure(data=go.Scatter( x=df['房子大小'], y=df['金额'], mode='markers', # 设置为散点图 marker=dict( size=10, # 散点大小 color='blue',# 散点颜色 opacity=0.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(labels=labels, values=values, hole=0.3, textinfo='label+percent', insidetextorientation='radial')]) # 自定义图表布局
fig.update_layout( title='出租方式分布——饼图', font_size=12, # 你可以根据需要调整字体大小 legend_title_text='出租方式' # 如果你需要图例(对于饼图通常不需要,但这里作为示例)
) # 注意:饼图通常不需要图例,因为每个切片都直接标记了标签和百分比
# 如果你确实需要图例(尽管这在饼图中不常见),你可能需要以一种不同的方式来实现它 # 显示图表
fig.show()
从上图可以看出,整租占比达到80.7%。
# 创建箱形图数据
fig = go.Figure() # 遍历'出租方式'的唯一值,为每个类别绘制一个箱形图
for category in df['类型'].unique(): subset = df[df['类型'] == category] fig.add_trace(go.Box( y=subset['金额'], name=category, marker=dict( color='rgb(0, 0, 0)', # 箱体的颜色 outliercolor='rgba(219, 64, 82, 0.6)', # 异常值的颜色 line=dict( color='rgb(0,0,0)', width=1.5 ) ), boxmean='sd' # 'sd'表示使用标准差标记平均值,你也可以设置为'mean'来直接使用平均值 )) # 自定义图表布局
fig.update_layout( title='按出租方式分组的房屋租金——箱形图', yaxis_title='房屋租金', xaxis_title='出租方式', boxmode='group' # 箱形图的显示模式,'group'表示每个类别的箱形图并排显示
) # 显示图表
fig.show()
从上图可以看出,整租的租金浮动较大,而合租的租金区间很小。合租的租金价格在2100元/月以下区间,仅有1个房屋租金是2100元/月,其余都往下在走。
sns.barplot(data=df,x='朝向',y='金额')
plt.show()
南北朝向的房子明显租金更高。
# 计算每个楼层的计数
floor_counts = df['楼层类型'].value_counts() # 创建饼图数据
fig = go.Figure(data=[go.Pie( labels=floor_counts.index, # 标签是楼层的唯一值 values=floor_counts.values, # 值是每个楼层的计数 hole=0.3, # 设置饼图的中心空洞大小 textinfo='label+percent', # 在饼图上显示标签和百分比 insidetextorientation='radial' # 文本方向为径向
)]) # 更新图表的布局
fig.update_layout( title='楼层分布——饼图', # 设置图表的标题 annotations=[dict(text=str(round(value, 2))+'%', x=0.5, y=0.5, xref='paper', yref='paper', showarrow=False, font=dict(size=10), textangle=0 if i == 0 else i*360/len(floor_counts)) for i, value in enumerate(floor_counts.values)], # 注释文本的位置需要手动调整,这里使用了一种简单的方法,但可能需要根据实际情况调整
) # 显示图表
fig.show()
上图展示了成都市楼层分布情况。
sns.barplot(data=df,x='楼层类型',y='金额')
plt.show()
低楼层租金略微高于中楼层,中楼层租金略微高于高楼层。
# 相关性分析
numeric_columns_simplified = df.select_dtypes(include='number')
sns.heatmap(numeric_columns_simplified.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':12})
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.title('房屋特征皮尔逊相关系数矩阵——热力图',fontsize=17)
plt.show()
跟房租最相关的是他自己,1也就是100%相关,第二相关的是房子大小68%,需要注意的是楼房层数是负相关,也就是楼层越高房屋租金越低。
from wordcloud import WordCloud
# 将'楼层信息'列中的所有文本合并成一个长字符串
text = ' '.join(df['楼盘名称'].astype(str)) font_path = '/Library/Fonts/Arial Unicode.ttf' # macOS上的示例路径 # 创建词云对象,并指定中文字体
wordcloud = WordCloud(width=800, height=400, background_color='black', font_path=font_path).generate(text) # 使用matplotlib显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
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的每一列上
# axis=0表示函数沿着列(垂直方向)应用,即每一列被视为一个Series进行处理
# 注意:这里直接使用apply可能会导致一些问题,特别是如果DataFrame包含非对象类型的列
# 因为LabelEncoder只能用于对象类型(如字符串)的列
# 但为了注释的目的,我们假设所有列都是对象类型
new_df = new_df.apply(label_encode, axis=0)
new_df
上图已经全部为了数字。
划分训练集和测试集:
from sklearn.model_selection import train_test_split
# 准备数据
X = new_df.drop('金额',axis=1)
y = new_df['金额']
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
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_rate=1.4, n_estimators=1000)
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开始,则可以去掉f+1)
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(fontsize=12) # 设置图形的标题和字体大小
plt.title('各特征重要程度排序', fontsize=14) # 显示图形
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(loc='upper right', fontsize=15)
# 设置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()
本文数据集可以点击本文上方下载,创作不易,点赞、评论、收藏是我创作的动力!
相关文章:

【人工智能】—基于成都市各区(市)县租房价格预测建模研究
引言 随着城市化进程的加速,人口流动日益频繁,租房市场作为城市生活的重要组成部分,其价格波动对居民生活质量和城市经济发展具有显著影响。成都市,作为中国西部地区的经济、文化、交通和科技中心,近年来吸引了大量人…...
3213. 最小代价构造字符串
Powered by:NEFU AB-IN Link 文章目录 3213. 最小代价构造字符串题意思路代码 3213. 最小代价构造字符串 题意 给你一个字符串 target、一个字符串数组 words 以及一个整数数组 costs,这两个数组长度相同。 设想一个空字符串 s。 你可以执行以下操作任意次数&a…...

提取重复数据
直接上控制台代码: Module Module1Sub Main()Console.WriteLine("请输入数据,以"",""相隔:")Dim str As String Console.ReadLineDim result From x In str.Split(",")Group By x Int…...
Go语言标准库之log和三方库zap
一、Log 1.1 logger基本使用 Go语言内置的log包实现了简单的日志服务。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来…...

Linux:进程终止和进程替换
Linux:Linux:进程终止和进程替换 一、进程终止1.1 进程退出场景和创建退出方式 1.2 exit 和 _exit区别二、进程程序替换2.1 进程替换函数2.2 函数解释及命名解释函数解释命名解释 2.3 单进程程序替换(无子进程)2.3.1 带l函数进程替…...
使用Java实现异步消息处理与队列消费
使用Java实现异步消息处理与队列消费 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代软件系统中,处理异步消息和队列消费是常见的需求。通过…...

使用C++实现ATM系统,谈谈思路及代码实现
🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…...

相机光学(二十四)——CRA角度
CRA角度 0.参考资料1.什么是CRA角度2.为什么 CRA 会导致luma shading3.为什么 CRA 会导致color shading4.CRA相差过大的具体表现5.CRA Matching6.怎样选择sensor的CRA 0.参考资料 1.芯片CRA角度与镜头的匹配关系(一) 2.芯片CRA角度与镜头选型的匹配关…...

python函数和c的区别有哪些
Python有很多内置函数(build in function),不需要写头文件,Python还有很多强大的模块,需要时导入便可。C语言在这一点上远不及Python,大多时候都需要自己手动实现。 C语言中的函数,有着严格的顺…...

速看!这主食冻干评测极可能被商家恶意举报~PR、希喂和SC真实测评
我是一名专注于宠物健康的营养师,日常大部分时间都在与猫咪和狗狗为伴,对它们入店时的身体状况往往能迅速做出初步判断。当前,多数家养猫咪面临的肥胖和肝损伤问题尤为突出,尽管医疗干预能缓解病情,但要从根本上解决还…...

股票数据分析(K线图、均值图、MACD图、RSI图)--股票日数据
数据 数据是上证指数日行情数据,股票代码000002.sz,原始数据shdata示例如下: 读取数据: import numpy as np import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt from datetime import datetime imp…...
重写equals()方法为什么同时要重写hashcode()
equals()方法 equals()方法是Object类中的一个方法,在Object类中,equals等同于。 在不同的类中,往往会对equals()按需求进行重写。重写的目的都是:用于比较两个对象是否 "相等"。如果两个对象的内容相同,那…...

安全及应用(更新)
一、账号安全 1.1系统帐号清理 #查看/sbin/nologin结尾的文件并统计 [rootrootlocalhost ~]# grep /sbin/nologin$ /etc/passwd |wc -l 40#查看apache登录的shell [rootrootlocalhost ~]# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改变…...

Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统
Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈😁有兴趣的小伙伴可以去看看原著😊 第三章 Hadoop分布式文件系统 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分…...
Rust入门实战 编写Minecraft启动器#2建立资源模型
首发于Enaium的个人博客 我们需要声明几个结构体来存储游戏的资源信息,之后我们需要将json文件解析成这几个结构体,所以我们需要添加serde依赖。 serde { version "1.0", features ["derive"] }资源相关asset.rs use serde::De…...

小白学C++(第一天)基础入门
温馨提醒:本篇文章,请各位c基础不行的童鞋不要贸然观看 C的第一个程序 第一个关键字namespace namespace 是定义空间的名字的关键字,使用格式格式如下: namespace 空间名 { } 其中{ }内的命名空间的成员,可以定义…...

谷歌正在试行人脸识别办公室安全系统
内容提要: 🧿据美国消费者新闻与商业频道 CNBC 获悉,谷歌正在为其企业园区安全测试面部追踪技术。 🧿测试最初在华盛顿州柯克兰的一间办公室进行。 🧿一份内部文件称,谷歌的安全和弹性服务 (GSRS) 团队将…...

【CSS01】CSS概述,使用样式的必要性,CSS语法及选择器
文章目录 一、什么是样式二、使用样式的必要性三、使用样式的几种方式四、CSS基本语法:五、CSS的注释六、CSS选择器——重点相关单词 一、什么是样式 概念: Cascade [kˈskeɪd] Style Sheet [ʃiːt] 级联样式单/表,层叠样式表 CSS有化腐…...
PostgreSQL的pg_bulkload工具
PostgreSQL的pg_bulkload工具 pg_bulkload 是一个针对 PostgreSQL 提供高性能批量数据加载的工具。相较于内置的 COPY 命令,pg_bulkload 更加灵活并且在许多情况下性能更高。它支持数据的强制加载、数据过滤、数据转换以及错误处理等多种功能,非常适合需…...

【Java伴学笔记】Day-01 命令行|环境|编译解释运行|Java的相关分支|Java的特性|字面量
一、关于命令行 图形化界面的缺点 需要加载图片等一系列资源 效率较低 命令行 CMDMicrosoft Learn-CMDWindows CMD常用命令大全(值得收藏) 二、环境 什么是JDK JDK是Java Development Kit的缩写,意为Java开发工具包。它是一个用于开发Java应用…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...