进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程
进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程
(图片来源: ThisIsEngineering RAEng on Pexels)
在前几篇中,我们深入研究了经典的时间序列统计模型,如 ETS 和强大的 SARIMA 家族。它们在理论上成熟且应用广泛,但有时也面临挑战:模型选择和参数调整可能比较复杂,并且它们本质上是线性模型(或通过变换处理非线性),对于某些复杂模式的捕捉能力有限。
幸运的是,时间序列分析领域也在不断发展,涌现出许多现代的预测方法。本篇,我们将聚焦于两种截然不同但都非常强大的现代思路:
- Facebook Prophet: 一个开源的、易于使用且对商业数据特别友好的自动化预测库。
- 机器学习方法 (特征工程视角): 一种思维上的转变,将时间序列预测重新表述为监督学习问题,核心在于如何巧妙地构建能捕捉时间信息的特征。
我们将探索这两种方法的原理、实践和适用场景,为你的时间序列工具箱增添更多利器。
Part 1: Facebook Prophet - 自动化预测“瑞士军刀”
当你需要快速、稳健地预测具有强季节性(可能包含年、周、日等多种周期)、节假日效应,并且可能存在趋势变化的业务时间序列(如销售额、网站流量、用户增长)时,Facebook 开源的 Prophet 库是一个非常值得考虑的选择。
Prophet 的设计哲学
Prophet 的设计围绕几个核心原则:
- 易用性 (Tunable): 提供直观的参数,即使非时间序列专家也能进行合理调整。默认设置通常效果不错。
- 自动化 (Fully automatic): 尽可能自动化地处理季节性、趋势变化点等,减少手动干预。
- 稳健性 (Robust): 对缺失值和异常值有较好的鲁棒性。
- 可解释性 (Interpretable): 模型结构清晰,易于理解趋势、季节性和节假日各自的贡献。
Prophet 的模型结构:解构预测
Prophet 本质上是一个基于加法模型的时间序列分解方法:
y(t) = g(t) + s(t) + h(t) + ε(t)
其中:
g(t)
- 趋势项 (Trend):- 默认使用分段线性模型 (Piecewise Linear Model) 来拟合非线性趋势。Prophet 会自动检测趋势中的变化点 (Changepoints)。
- 也可以选择饱和增长模型 (Logistic Growth),当你预期增长有上限(或下限)时非常有用(需要提供
cap
或floor
值)。
s(t)
- 季节性项 (Seasonality):- 使用傅立叶级数 (Fourier Series) 来拟合周期性模式。
- 能够同时拟合多种季节性,如年度 (
yearly_seasonality
)、周度 (weekly_seasonality
)、日度 (daily_seasonality
)。 - 可以添加自定义的季节性周期。
h(t)
- 节假日效应项 (Holidays):- 允许你指定节假日列表及其可能影响的时间窗口(例如,圣诞节不仅影响当天,可能还影响前后几天)。
- 可以轻松加入特定国家的内置节假日。
ε(t)
- 误差项 (Error): 假设为正态分布的随机噪声。
Prophet 实战:快速上手
使用 Prophet 非常直接:
# 需要先安装: pip install prophet
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
import statsmodels.api as sm # 借用 CO2 数据# 1. 数据准备 (必须包含 'ds' 和 'y' 列)
co2_data = sm.datasets.co2.load_pandas().data['co2']
co2_data = co2_data.interpolate().resample('M').mean().reset_index() # 重置索引
co2_data.rename(columns={'index': 'ds', 'co2': 'y'}, inplace=True) # 重命名列print("Prophet input data (head):")
print(co2_data.head())# 2. 实例化并拟合模型
# 可以调整参数,如 changepoint_prior_scale (趋势灵活性), seasonality_prior_scale (季节性强度)
model = Prophet(yearly_seasonality=True, # 开启年度季节性weekly_seasonality=False, # 关闭周季节性 (月度数据无意义)daily_seasonality=False) # 关闭日季节性
# (可选) 添加节假日
# model.add_country_holidays(country_name='US')model.fit(co2_data)# 3. 创建未来日期的数据框
# 预测未来 3 年 (36个月)
future_dates = model.make_future_dataframe(periods=36, freq='M')
print("\nFuture dates dataframe (tail):")
print(future_dates.tail())# 4. 进行预测
forecast = model.predict(future_dates)
print("\nForecast dataframe (tail with components):")
# forecast 包含预测值 'yhat', 置信区间 'yhat_lower', 'yhat_upper' 及各成分
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper', 'trend', 'yearly']].tail())# 5. 可视化预测结果
fig1 = model.plot(forecast)
plt.title('Prophet Forecast for CO2 Data')
plt.xlabel('Date')
plt.ylabel('CO2 Concentration')
plt.show()# 6. 可视化成分
fig2 = model.plot_components(forecast)
plt.show()# 7. (可选) 模型评估 - 交叉验证
# from prophet.diagnostics import cross_validation, performance_metrics
# df_cv = cross_validation(model, initial='730 days', period='180 days', horizon = '365 days')
# df_p = performance_metrics(df_cv)
# print("\nPerformance Metrics (example):")
# print(df_p.head())
解读与定制:
plot()
:展示历史数据点、预测值yhat
以及置信区间。plot_components()
:分别展示拟合出的趋势、年度季节性、周度季节性(如果开启)等成分,非常有助于理解模型的判断。- 调整参数:
changepoint_prior_scale
: 增大它使趋势更灵活,减小它使趋势更平滑。seasonality_prior_scale
: 增大它使季节性幅度更大。holidays
: 通过pd.DataFrame
提供自定义节假日。growth='logistic'
: 使用饱和增长,需提供cap
列。
Prophet 的优缺点
优点:
- 易用性高,自动化程度好: 对新手友好,能快速得到不错的基线预测。
- 擅长处理强季节性与节假日: 这是其核心优势。
- 对趋势变化点鲁棒: 自动检测变化点。
- 结果可解释性强: 成分图清晰展示各部分贡献。
- 处理缺失值和异常值能力较好。
缺点:
- “黑盒”感相对较强: 虽然可解释,但内部细节(如傅立叶级数阶数选择)对用户不透明。
- 不直接提供 AR/MA 部分: 它不显式地对短期自相关性(如 ARMA 模型所做的)进行建模,可能在某些高度自相关的序列上表现不如 ARIMA。
- 需要特定数据格式 (
ds
,y
)。 - 预测区间可能偏窄: 有时对不确定性的估计可能过于乐观。
何时选择 Prophet? 当你的数据符合其设计初衷(强季节性、节假日、趋势变化),且你需要快速、稳健、易于解释的结果时,Prophet 是一个极佳的选择。
Part 2: 思维转变 - 时间序列作为机器学习问题
与 Prophet 这种“端到端”的预测工具不同,另一种强大的现代方法是将时间序列预测重新构建为一个标准的监督学习问题。这种方法的核心在于特征工程 (Feature Engineering),而不是直接对时间依赖性建模。
范式转换:从 y(t) ~ f(y(t-k), ε(t-k))
到 y_hat(t) = f(X(t))
- 传统统计模型 (如 ARIMA): 试图直接找到
y(t)
与其过去值y(t-k)
和过去误差ε(t-k)
之间的数学关系。 - 机器学习方法: 我们不再直接寻找这种时序关系,而是为每个时间点
t
构建一个特征向量X(t)
,然后训练一个机器学习模型f
来学习从X(t)
到y(t)
的映射。
这个 X(t)
必须能够捕捉到所有与预测 y(t)
相关的时间信息。
特征工程的艺术:从时间中提取信息
构建有效的特征向量 X(t)
是这种方法成功的关键。以下是一些最常用的时间序列特征类别:
-
滞后特征 (Lag Features):
- 是什么: 直接使用过去的观测值作为特征。例如,用
y(t-1), y(t-2), y(t-3)
来预测y(t)
。 - 作用: 捕捉短期的自相关性(类似于 AR 部分)。
- 选择: 滞后多少阶?可以基于 PACF 图的截尾阶数获得启发,或作为超参数进行调整。
- Python 实现 (Pandas
shift()
):
# 假设 df 是包含 'y' 列的 DataFrame,索引是时间 df = co2_data.set_index('ds') # 假设已有 Prophet 格式数据,转回时间索引 for i in range(1, 4): # 创建 lag 1, 2, 3df[f'lag_{i}'] = df['y'].shift(i) df.dropna(inplace=True) # 滞后操作会产生 NaN,需要处理 print("\nDataFrame with Lag Features (head):") print(df.head())
- 是什么: 直接使用过去的观测值作为特征。例如,用
-
窗口特征 / 滚动统计量 (Window Features / Rolling Statistics):
- 是什么: 计算过去一段时间窗口内的统计量。例如,过去 3 个月、6 个月或 12 个月的平均值、标准差、最大/最小值等。
- 作用: 捕捉近期的趋势、波动性或水平。
- 选择: 窗口大小是关键参数。
- Python 实现 (Pandas
rolling()
):
window_size = 12 # 例如,12个月滚动窗口 # 注意:rolling 计算的是包含当前点在内的窗口,预测时常用 shift 后的滞后窗口 df[f'rolling_mean_{window_size}'] = df['y'].shift(1).rolling(window=window_size).mean() df[f'rolling_std_{window_size}'] = df['y'].shift(1).rolling(window=window_size).std() df.dropna(inplace=True) print(f"\nDataFrame with Rolling Features (head, window={window_size}):") print(df[['y', f'rolling_mean_{window_size}', f'rolling_std_{window_size}']].head())
-
日期/时间特征 (Date/Time Features):
- 是什么: 从时间索引中提取信息。
- 作用: 捕捉季节性、周期性、日历效应。
- 常见特征:
- 年份 (
year
) - 月份 (
month
) - 星期几 (
dayofweek
) - 一年中的第几天 (
dayofyear
) - 一年中的第几周 (
weekofyear
) - 季度 (
quarter
) - 是否周末 (
is_weekend
) - 周期性编码: 对于像月份、星期几这样的周期性特征,直接用数字(如 1-12)可能无法让模型理解其周期性(12月和1月是相邻的)。常用正弦/余弦变换 (Sine/Cosine Transformation) 来编码:
df['month_sin'] = np.sin(2 * np.pi * df.index.month / 12)
df['month_cos'] = np.cos(2 * np.pi * df.index.month / 12)
- 年份 (
- Python 实现 (Pandas DatetimeIndex attributes):
df['month'] = df.index.month df['year'] = df.index.year df['dayofweek'] = df.index.dayofweek # ... 其他日期特征 ...# Sine/Cosine for month df['month_sin'] = np.sin(2 * np.pi * df['month'] / 12) df['month_cos'] = np.cos(2 * np.pi * df['month'] / 12) print("\nDataFrame with Date Features (head):") print(df[['y', 'month', 'year', 'month_sin', 'month_cos']].head())
-
扩展特征 (Expansion Features):
- 特征之间的交互项(如
lag_1 * rolling_mean_12
)。 - 滞后特征的差分(如
lag_1 - lag_2
)。
- 特征之间的交互项(如
为什么选择机器学习方法?
- 灵活性: 可以使用任何监督学习模型(线性模型、树模型、神经网络等),选择最适合数据复杂度的模型。
- 易于加入外生变量: 将其他时间序列(如广告支出、天气)作为额外特征列加入
X(t)
非常自然。 - 捕捉非线性: 许多 ML 模型(如树模型、神经网络)能很好地捕捉复杂的非线性关系和特征交互。
- 无需严格平稳性假设: 像基于树的模型对数据的平稳性要求不像 ARIMA 那样严格(尽管平稳化有时仍有助于特征工程)。
下一步(预告)
本篇我们重点展示了如何创建适用于机器学习的特征。真正的下一步是:
- 选择并训练 ML 模型: 将
X(t)
作为输入,y(t)
作为目标,训练如 RandomForestRegressor, XGBoost, LightGBM 等模型。 - 处理时间序列交叉验证: 使用 Walk-Forward Validation 或
TimeSeriesSplit
来可靠地评估模型性能。 - 超参数调优: 结合时间序列 CV 进行模型调优。
这部分内容将在后续文章中深入探讨(或者可以作为你自行探索的方向)。
总结:现代方法的选择
今天我们探索了两种强大的现代时间序列预测方法:
- Prophet: 一个专注于易用性、自动化和处理特定业务场景(强季节性、节假日)的优秀工具库。当你需要快速、稳健、可解释的结果时,它是一个首选。
- 机器学习特征工程: 一种更通用的方法论,将预测问题转化为监督学习。其核心在于构建能够捕捉时间信息的特征,然后可以利用整个机器学习生态系统的强大模型。这种方法提供了极大的灵活性,特别适合处理复杂关系和融入多源信息。
这两种方法并非相互排斥,有时甚至可以结合使用(例如,用 Prophet 的成分作为 ML 模型的特征)。理解它们的原理、优势和局限性,将使你能够根据具体问题选择最合适的工具。
下一篇预告:
既然我们已经学会了如何为机器学习模型准备时间序列特征,下一篇我们将深入探讨如何实际应用这些模型(如 Random Forest, Gradient Boosting),并特别关注在时间序列场景下进行可靠的模型评估和验证所必须的时间序列交叉验证技术。
准备好看机器学习模型如何在时间序列上大显身手了吗?敬请期待!
(你认为 Prophet 更适合解决你遇到的哪类问题?对于机器学习方法,你觉得哪种特征工程技巧最有潜力?欢迎在评论区分享你的想法!)
相关文章:
进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程
进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程 (图片来源: ThisIsEngineering RAEng on Pexels) 在前几篇中,我们深入研究了经典的时间序列统计模型,如 ETS 和强大的 SARIMA 家族。它们在理论上成熟且应用广泛,但有…...
实用生活c语言脚本
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> // 清理临时文件目录 void clean_temp_directory() { const char* temp_dir "/tmp"; // 可自定义需要清理的目录 char command[1024]; …...
从零开始构建微博爬虫与数据分析系统
从零开始构建微博爬虫与数据分析系统 引言 社交媒体平台蕴含着海量的信息和数据,通过对这些数据的收集和分析,我们可以挖掘出有价值的见解。本文将详细介绍如何构建一个完整的微博爬虫和数据分析系统,从数据爬取、清洗、到多维度分析与可视…...
417. 太平洋大西洋水流问题
题目 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights…...
chili3d调试笔记8 打印零件属性
无效, 返回的是节点不是坐标啥的, 找他的属性 把document和selectednote(空集)传给handleshowproperty方法 怎么获得selectnotes和selectnotes的property值 有selectnotes运行这段就行了 明天再搞...
uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法
目录 前言:升级项目的两种方式步骤一、新建项目 【选择-默认模版】二、修改-pages.json三、补充-缺少的文件四、修改-Main.js按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改 五、升级-uni-ui扩展组件的…...
火山RTC 5 转推CDN 布局合成规则
实时音视频房间,转推CDN,文档: 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前,你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…...
Mujoco xml < sensor>
< sensor> jointposjointveljointactuatorfrcframequatgyroaccelerometerframeposframelinveltouchobjtype"site" objname"imu" 和site"imu"的区别python中与sensor有关的写法传感器名字索引第几个idid索引传感器名字传感器数量sensor中的…...
示例:spring xml+注解混合配置
以下是一个 Spring XML 注解的混合配置示例,结合了 XML 的基础设施配置(如数据源、事务管理器)和注解的便捷性(如依赖注入、事务声明)。所有业务层代码通过注解简化,但核心配置仍通过 XML 管理。 1. 项目结…...
同样的html标记,不同语言的文本,显示的字体和粗细会不一样吗
同样的 HTML 标记,在不同语言的文本下,显示出来的字体和粗细确实可能会不一样,原因如下: 🌍 不同语言默认字体不同 浏览器字体回退机制 CSS 里写的字体如果当前系统不支持,就会回退到下一个,比如…...
Linux进程6-alarm闹钟定时终止、raise发送信号、abort终止、pause挂起进程验证
目录 1.alarm函数 1.1关键点 1.2单个alarm函数定时 1.3两个alarm函数定时 2.raise函数 2.1核心行为 2.2 raise与 kill 的区别 2.3程序: 3.abort函数 4.pause 函数 4.1 pause简单挂起 4.2父进程挂起,子进程发信号 1.alarm函数 函数原型&…...
SpringCloud组件—Eureka
一.背景 1.问题提出 我们在一个父项目下写了两个子项目,需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源,具体实现的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…...
类加载器与jvm的内存
1. 类加载器与内存的关系 类加载器的字节码放在方法区(元空间)中,同时类加载器加载类后类的信息(成员变量、成员方法及修饰符等)存放在方法区中。类的信息所占内存的回收要同时满足两个条件:类的实例被回收…...
【C++】新手入门指南(下)
文章目录 前言 一、引用 1.引用的概念和定义 2.引用的特性 3.引用的使用 4.const引用 5.指针和引用的关系 二、内联函数 三、nullptr 总结 前言 这篇续上篇的内容新手入门指南(上),继续带大家学习新知识。如果你感兴趣欢迎订购本专栏。 一、…...
el-table中el-input的autofocus无法自动聚焦的解决方案
需求 有一个表格展示了一些进度信息,进度信息可以修改,需要点击进度信息旁边的编辑按钮时,把进度变为输入框且自动聚焦,当鼠标失去焦点时自动请求更新接口。 注:本例以vue2 element UI为例 分析 这个需求看着挺简单…...
vimplus 如何修改语言支持的版本,以及如何跳转路径
vimplus修改语言版本 默认的vimplus支持c的版本是17 如何修改我们需要修改.ycm_extra_conf.py文件,这个文件管理了我们的插件配置 找到 把他修改为你想要的版本 增添路径 把你安装的gcc位置提供给他,默认的目前比较老 这里都是他提前为我们准备的路…...
麒麟V10安装MySQL8.4
1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…...
Varjo-XR3在UE5中,头显中间有一个方块一直显示
深色方块显示在屏幕中间的焦点区域中 屏幕中间的对焦区域中显示的黑色方块。 黑色方块是一个已知问题。它在 Varjo VRTemplate 中不可见,因为它使用具有推荐 VR 设置的前向渲染方法。 但是,如果你将延迟渲染方法与高级功能(如 Lumen、Nani…...
FastText 模型文本分类实验:从零到一的实战探索
在自然语言处理(NLP)领域,文本分类是一个基础而重要的任务,广泛应用于情感分析、主题识别、垃圾邮件过滤等多个场景。最近,我参与了一次基于 FastText 模型的文本分类实验,从数据预处理到模型构建、训练和评…...
不同经营性道路运输从业资格证申请条件全解析
在道路运输领域,获取相应的从业资格证是合法从事经营性运输工作的关键前提。不同类型的运输业务,如旅客运输、货物运输以及危险货物运输,对从业者有着不同的条件要求。 经营性道路旅客运输驾驶员 驾驶证年限:需取得相应的机动车…...
WHAT - 静态资源缓存穿透
文章目录 1. 动态哈希命名的基本思路2. 具体实现2.1 Vite/Webpack 配置动态哈希2.2 HTML 文件中动态引用手动引用使用 index.html 模板动态插入 2.3 结合 Cache-Control 避免缓存穿透2.4 适用于多环境的动态策略 总结 在多环境部署中,静态资源缓存穿透是一个常见问题…...
11、Refs:直接操控元素——React 19 DOM操作秘籍
一、元素操控的魔法本质 "Refs是巫师与麻瓜世界的连接通道,让开发者能像操控魔杖般精准控制DOM元素!"魔杖工坊的奥利凡德先生轻抚着魔杖,React/Vue的refs能量在杖尖跃动。 ——以神秘事务司的量子纠缠理论为基,揭示DOM…...
crontab 定时备份 mysql 数据库
1、使用 mysqldump 命令备份数据 1.1 备份全部数据库的数据和结构 mysqldump -uroot -p123456 -A > /data/backup/db.sql1.2 备份全部数据库的结构(加 -d 参数) mysqldump -uroot -p123456 -A -d > /data/backup/db.sql1.3 备份全部数据库的数据…...
数据库对象与权限管理-视图与索引管理
一、视图(View)管理 1. 视图的定义与本质 视图(View)是Oracle数据库中的逻辑表,它不直接存储数据,而是通过预定义的SQL查询动态生成结果集。视图的本质可以理解为: 虚拟表:用户可…...
德施曼重磅发布五大突破性技术及多款重磅新品,开启AI智能管家时代
当智能锁拥抱人文关怀,万物有灵便有了具象化的表达。 4月22日,智能锁领军品牌德施曼“万物有灵”2025全球新品发布会在乌镇隆重举行,为智能锁行业带来了AI时代的革新方案。 会上,德施曼创始人/CEO祝志凌重磅发布了五大突破性技术&…...
单元测试学习笔记(一)
自动化测试 通过测试工具/编程模拟手动测试步骤,全自动半自动执行测试用例,对比预期输出和实际输出,记录并统计测试结果,减少重复的工作量。 单元测试 针对最小的单元测试,Java中就是一个一个的方法就是一个一个的单…...
Rest Client插件写http文件直接发送请求
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言📌 插件介绍:🚀 安装方式:📚 使用示例:⚙️ 功能亮点: 前言 直接在 VSCode …...
LLM 论文精读(一)Scaling Laws for Neural Language Models
这篇文章是2020年发表的一篇LLM领域中非常重要的论文,由OpenAI发布,总结了LLM模型规模与训练数据token之间的比例关系,即我们熟知的 Scaling Laws,允许 通过观察小规模训练实验,提前预测大模型的效果表现,降…...
Spring AOP + Logback + MDC全链路日志追踪
1、背景 由于权限管理和安全规范,服务都部署到云上,只能通过日志系统查看日志。 然而,面对海量的日志数据,如何快速定位关键信息和调用链路是一个巨大的挑战。 2、方案调研 在 Spring Boot 中实现全链路日志追踪,核…...
SVT-AV1编码器初始化函数
一 函数解释 这个函数SVT-AV1编码器初始化的核心函数,负责配置编码器组件,分配资源并启动编码线程,以下时对每一行的详细解释。 函数签名和参数检查 EB_API EbErrorType svt_av1_enc_init(EbComponentType *svt_enc_component) { if (svt_enc…...
Unity 导出Excel表格
1.首先,需要导入EPPlus.dll;(我这里用的是Unity 2017.3.0f3) https://download.csdn.net/download/qq_41603955/90670669 2.代码如下: using UnityEngine; using UnityEditor; using System.IO; using OfficeOpenXm…...
Web前端开发技术——HTML5、CSS3、JavaScript
一、HTML 1.基本结构 <html lang "en"><head><meta charset"UTF-8"><meta name"Keywords" content""><meta name"Description" content""><title>Web网页标题</title&g…...
野外价值观:在真实世界的语言模型互动中发现并分析价值观
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
【华为HCIP | 华为数通工程师】821—多选解析—第十二页
多选727、某台路由器的输出信息如下所示,以下描述正确的有哪些选项? A、路由器Router ID为10.0.1.1 B、路由器Router ID为10.0.2.2。 C、本路由器的接口地址为10.0.12.2。 D、本路由器是DR。 解析:display ospf peer //获取的OSPF邻居信…...
Selenium 在爬取过程中,网络响应被退出的解决方案
我在使用 Selenium 爬取网站的时候,直接get url ,却立马闪退,遇到了获取网络响应直接被退出的问题。 这通常是由于 反爬机制、浏览器检测 或 网络限制 导致的。 以下是 完整排查与解决方案: 1. 检查常见原因 问题类型典型表现可…...
楼宇自控怎样全方位融入建筑领域,为绿色建筑发展添砖加瓦
在全球积极倡导可持续发展的大背景下,绿色建筑已成为建筑领域发展的必然趋势。绿色建筑旨在减少对环境的负面影响,提高能源利用效率,为用户提供健康、舒适的室内环境。而楼宇自控系统作为建筑智能化的核心组成部分,正以其独特的技…...
语音合成(TTS)从零搭建一个完整的TTS系统-第二节-中文转拼音
一、概述 本节我们进行语音合成前端中的第二步,需要把中文转换为拼音。通过python和c两种语言进行实现,python可以直接调用pypinyin库实现。c实现是本节的重点,首先根据词典进行分词,接着把分词后的词进行词典映射,得到…...
基于springboot的停车位管理系统(源码+数据库)
12基于springboot的停车位管理系统:前端 thymeleaf、Jquery、bootstrap,后端 Springboot、Mybatis,系统角色分为:用户、管理员,管理员在管理后台录入车位信息,用户在线查找车位、预约车位,解决停…...
深入理解 Spring @Configuration 注解
在 Spring 框架中,@Configuration 注解是一个非常重要的工具,它用于定义配置类,这些类可以包含 Bean 定义方法。通过使用 @Configuration 和 @Bean 注解,开发者能够以编程方式创建和管理应用程序上下文中的 Bean。本文将详细介绍 @Configuration 注解的作用、如何使用它以及…...
15.三数之和(LeetCode)java
个人理解: 1.使用双指针做法,首先对数组进行排序 第一重for循环控制第一个数,对数组进行遍历。双指针初始化为lefti1, rigthnums.length-1。然后使用while循环移动双指针寻找合适的数。因为返回的是数,不是下标,数不能…...
2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(10卷)任务书
2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(10卷)任务书 模块A:大数据平台搭建(容器环境)(15分)任务一:Hadoop 伪分布式安装配置任务二:Flume安装…...
Redis—内存淘汰策略
记:全体LRU,ttl LRU,全体LFU,ttl LFU,全体随机,ttl随机,最快过期,不淘汰(八种) Redis 实现的是一种近似 LRU 算法,目的是为了更好的节约内存&…...
新能源汽车可视化大屏系统毕业设计
以下是一个基于Python和Flask框架的新能源汽车可视化大屏系统后台代码示例。这个系统提供API接口用于前端大屏展示新能源汽车相关数据。 主应用文件 (app.py) python from flask import Flask, jsonify, request from flask_cors import CORS import random from datetime imp…...
02-keil5的配置和使用
一、创建工程 1、在菜单栏”Project”,在弹出的下拉菜单,选择“New uVision Project”。 2、在弹出的对话框,填写工程的名字,例如工程名字为project。 3、为保存的工程,选择对应的芯片。 4、为当前工程,添…...
电脑硬盘丢失怎么找回?解决硬盘数据恢复的2种方法
无论是个人用户还是企业用户来讲,存储在磁盘中的文档、图片、视频、音频等数据都具有相当的价值。但在日常使用过程中,误删操作、病毒攻击、硬件故障等情况都可能造成电脑硬盘突然消失不见数据丢失。面对电脑硬盘丢失这类问题时,采取正确的应…...
【Spring】依赖注入的方式:构造方法、setter注入、字段注入
在Spring框架中,除了构造器注入(Constructor Injection)和Setter注入(Setter Injection),还有一种依赖注入方式:字段注入(Field Injection)。字段注入通过在Bean的字段上…...
涨薪技术|0到1学会性能测试第22课-关联函数web_reg_save_param_ex
前面的推文我们掌握了性能测试脚本开发3种常见的关联技术,今天开始给大家分享关联函数web_reg_save_param_ex,后续文章都会系统分享干货! LoadRunner最新版本中,使用的关联函数为web_reg_save_param_ex,以前的版本使用的关联函数为web_reg_save_param,但这两个函数实质差…...
Vue 的数据代理机制
2025/4/22 向 一、什么是数据代理机制 通过访问代理对象的属性,来间接访问目标对象的属性,数据代理机制的实现需要依赖Object.defineProperty()方法。 如下所示: <!DOCTYPE html> <html lang"en"> <head><…...
Android-KeyStore安全的存储系统
在 Android 中,AndroidKeyStore 是一个安全的存储系统,用于存储加密密钥。它提供了一种安全的方式来生成、存储和管理密钥,而无需将密钥暴露给应用程序本身。以下是如何使用 AndroidKeyStore 的基本步骤和示例代码。 检查 AndroidKeyStor…...
部署私有gitlab网站
以下是建立私有 GitLab 代码版本维护平台的完整步骤,涵盖环境准备、安装配置、初始化及日常管理,适用于企业/团队内部代码托管: 一、环境准备 1. 服务器要求(最低配置) 用途CPU内存存储系统要求小型团队(…...