【Python】Facebook开源时间序列数据预测模型Prophet
文章目录
- 一、简介
- 二、项目的文件解读
- 三、Prophet类主要方法和参数
- 3.1 主要参数
- 3.2 主要方法
- 四、用法示例
一、简介
Prophet
是由 Facebook 开发的一个开源工具,用于时间序列数据的预测。它特别适用于处理具有强季节性和趋势的时间序列数据,并且对节假日和突发事件有较好的处理能力。Prophet 通过简洁的接口和灵活的模型,帮助数据科学家和分析师轻松进行时间序列预测。支持R和Python。
Python源码:https://github.com/facebook/prophet/tree/main/python
入门文档:https://facebook.github.io/prophet/docs/quick_start.html
在传统的时间序列预测中,常用的方法有 ARIMA、SARIMA 等。虽然这些方法功能强大,但往往需要复杂的参数调整和数据预处理。Prophet 旨在简化这个过程,使预测变得更加直观和易于实现。Prophet 在 Facebook 内部应用于多种业务场景,显示出了其有效性和可靠性。
🟢主要特点:
-
自动处理季节性和节假日:
Prophet 可以自动识别和建模季节性模式(如每日、每周或每年的季节性),并允许用户手动指定额外的节假日效应,这对于有显著节假日影响的数据尤为重要。 -
处理缺失值和异常值:
Prophet 具有一定的鲁棒性,可以处理时间序列中的缺失值和异常值,而无需进行复杂的预处理。 -
灵活的趋势建模:
Prophet 提供了两种趋势模型:线性趋势和对数趋势,用户可以根据数据的实际情况选择合适的趋势模型。 -
简洁的接口:
Prophet 提供了 Python 和 R 语言的接口,用户可以用简单的几行代码完成建模和预测。
🟢工作原理:
Prophet 的核心思想是将时间序列数据分解为三个主要部分:趋势(Trend)、季节性(Seasonality)和节假日效应(Holiday Effects)(另外还有突变点)。具体工作流程如下:
-
趋势建模:
使用一个分段线性或分段对数模型来描述数据的长期趋势。用户可以设置趋势的变化点,以更好地捕捉趋势的变化。 -
季节性建模:
对数据进行周期性分解,以捕捉每日、每周或每年的季节性模式。季节性可以是周期性的,也可以是自定义的。 -
节假日效应:
用户可以添加自定义的节假日效应,用于建模特定日期对数据的影响(如春节、圣诞节等)。 -
模型训练和预测:
Prophet 使用贝叶斯回归方法来估计模型参数。通过训练后的模型,可以对未来的数据进行预测,并给出预测的不确定性区间。
🟢应用场景:
Prophet 广泛应用于各种时间序列预测任务,包括但不限于:
- 销售预测:预测未来的销售量,帮助企业制定销售策略。
- 流量预测:预测网站或应用的流量,以便于资源管理和优化。
- 财务预测:预测财务指标(如收入、支出)以便于预算编制和财务规划。
🟢数学模型:
Prophet 的最终模型是趋势、季节性和节假日效应的加权和:
y ( t ) = g ( t ) + S ( t ) + H ( t ) + ϵ t y(t)=g(t)+S(t)+H(t)+ϵ_t y(t)=g(t)+S(t)+H(t)+ϵt
分别是:时间t处的观测值、趋势项、季节项、节假日项、噪声。
- 趋势是非周期的,分为非线性和线性增长两种类型;
- 季节项是周期性的,借助傅里叶级数处理;
- 每个节假日都不同,是独立模型。
🟨缺点:
- 不适用于所有类型的时间序列数据
- 短期数据:Prophet 主要设计用于长时间序列数据,对于非常短的数据集,它可能无法充分捕捉到趋势和季节性模式。
- 复杂季节性模式:虽然 Prophet 支持每日、每周和每年的季节性,但对于非常复杂或不规则的季节性模式,模型可能不够灵活。
- 对异常值敏感
- 异常值处理:虽然 Prophet 对缺失值和一些异常值有一定的鲁棒性,但对极端异常值的处理仍然有限。异常值可能会显著影响模型的预测效果。
- 趋势变化点的选择
- 自动变化点:Prophet 自动选择变化点以捕捉趋势的变化,但这个自动选择可能不总是符合实际情况。用户需要手动调整变化点的位置,才能更好地适应数据中的实际变化。
- 模型复杂性
- 参数调整:尽管 Prophet 的接口简单,但在某些情况下,用户仍需调整许多参数(如季节性周期、傅里叶级数阶数等)以获得最佳预测效果。对于没有足够经验的用户,这可能是一项挑战。
- 季节性建模的局限性
- 固定周期:Prophet 的季节性建模基于傅里叶级数,假设季节性具有固定的周期。如果数据中存在非固定周期的季节性变化,Prophet 可能无法很好地建模这些变化。
- 节假日效应的建模限制
- 节假日效应的局限性:虽然 Prophet 允许用户添加节假日效应,但在处理非常特殊或个别的事件时,可能需要手动调整和验证,这可能会增加建模的复杂性。
- 预测精度的限制
- 不确定性区间:Prophet 提供了预测的不确定性区间,但这些区间可能会在实际应用中表现出较大的偏差,尤其是在趋势变化剧烈或季节性模式不稳定的情况下。
- 对外部因素的建模能力
- 外部因素:Prophet 对外部因素(如经济变化、市场波动等)建模的能力有限。如果这些因素对预测结果有显著影响,可能需要结合其他模型进行综合分析。
尽管存在这些缺点,Prophet 仍然是一个非常有用的工具,特别是对于具有强季节性和趋势的数据。如果使用得当,并结合其他数据分析技术,Prophet 可以成为强大的时间序列预测工具。
二、项目的文件解读
它的 GitHub 仓库中有一个名为 python
的文件夹,里面包含与 Python 版本相关的内容。这个文件夹中的主要文件和目录及其作用:
plot.py
:这个文件包含绘图函数,用于可视化预测结果和诊断信息。它提供了如预测值图、成分图等常用的可视化工具。setup.py
:这个文件包含安装脚本,用于定义如何安装这个包以及它的依赖项。它通常用于打包和分发 Prophet。stan
文件夹:这个文件夹包含 Stan 模型定义文件(.stan 文件),用于定义 Prophet 使用的统计模型。Stan 是一种概率编程语言,用于进行贝叶斯推断。tests
文件夹:这个文件夹包含测试代码,用于确保 Prophet 的各个功能模块正常工作。通常包括单元测试和集成测试。
文件名 | 描述 |
---|---|
diagnostics.py | 包含用于诊断和评估模型的功能,如计算模型的残差、预测误差和其他性能指标,帮助识别模型的潜在问题。 |
forecaster.py | 包含 Prophet 类的预测相关方法,包括生成未来的时间数据框 (make_future_dataframe ) 和进行预测 (predict )。 |
make_holidays.py | 处理假日效应的相关功能,提供创建和处理假日数据的工具,通常用于在模型中添加假日效应。 |
models.py | 包含模型的定义和实现,例如趋势模型、季节性模型以及其他组件的实现。用于构建和训练 Prophet 模型。 |
plot.py | 提供用于可视化 Prophet 模型结果的功能,包括绘制预测图、趋势图和季节性图等。 |
serialize.py | 包含用于序列化和反序列化 Prophet 模型的功能,允许将模型保存到磁盘并在以后重新加载。 |
utilities.py | 提供辅助函数和工具,用于数据处理、转换、验证等操作,支持主功能的实现。 |
__init__.py | prophet 包的初始化文件,定义了包的导入接口,并可能包含一些包级别的设置。 |
__version__.py | 包含 prophet 项目的版本信息,提供当前安装版本的相关信息。 |
代码不多的,总共4000多行,我根据需要精简到了1500行。
三、Prophet类主要方法和参数
Prophet是主要的类,用来训练、预测、绘图等。
输入数据是 pd.DataFrame,2列,列名必须是ds
(时间)和y
(数据)。
如:
dates = pd.date_range(start='2023-01-01', periods=365)
data = {'ds': dates,'y': [x + (x % 30) * 0.1 for x in range(365)]
}
df = pd.DataFrame(data)
3.1 主要参数
Prophet 类的参数:
参数名称 | 类型 | 描述 |
---|---|---|
growth | String | ‘linear’, ‘logistic’ 或 ‘flat’,指定线性、逻辑或平趋势。 |
changepoints | List[dates] | 包含潜在变化点的日期列表。如果未指定,潜在变化点将自动选择。 |
n_changepoints | Integer | 要包括的潜在变化点的数量。如果提供了 changepoints ,则不使用该参数。 |
changepoint_range | Float | 估计趋势变化点的历史比例,默认值为 0.8(前 80%)。如果指定了 changepoints ,则不使用该参数。 |
yearly_seasonality | ‘auto’, bool, int | 是否拟合年度季节性。可以是 ‘auto’、True、False 或用于生成的傅里叶项的数量。 |
weekly_seasonality | ‘auto’, bool, int | 是否拟合每周季节性。可以是 ‘auto’、True、False 或用于生成的傅里叶项的数量。 |
daily_seasonality | ‘auto’, bool, int | 是否拟合每日季节性。可以是 ‘auto’、True、False 或用于生成的傅里叶项的数量。 |
holidays | pd.DataFrame | 包含假日数据的 DataFrame,列包括 holiday(字符串)和 ds(日期类型),可选列包括 lower_window、upper_window 和 prior_scale。 |
seasonality_mode | String | ‘additive’(默认)或 ‘multiplicative’。 |
seasonality_prior_scale | Float | 调节季节性模型强度的参数。较大的值允许模型拟合较大的季节性波动,较小的值则抑制季节性。可以使用 add_seasonality 为单个季节性指定。 |
holidays_prior_scale | Float | 调节假日成分模型强度的参数,除非在假日输入中覆盖。 |
changepoint_prior_scale | Float | 调节自动变化点选择灵活性的参数。较大的值允许更多变化点,较小的值则允许较少变化点。 |
mcmc_samples | Integer | 如果大于 0,将使用指定数量的 MCMC 样本进行全贝叶斯推断。如果为 0,将进行 MAP 估计。 |
interval_width | Float | 提供预测不确定性区间的宽度。如果 mcmc_samples=0,这将仅是不确定趋势的 MAP 估计。如果 mcmc_samples>0,这将包括所有模型参数的不确定性。 |
uncertainty_samples | Integer | 用于估计不确定性区间的模拟抽样数。将该值设置为 0 或 False 将禁用不确定性估计并加快计算速度。 |
stan_backend | String | 如 StanBackendEnum 中定义的字符串,默认值:None - 将尝试遍历所有可用的后端并找到可工作的后端。 |
holidays_mode | String | ‘additive’ 或 ‘multiplicative’。默认为 seasonality_mode。 |
Prophet 类内部用于模型配置和训练的参数:
参数名称 | 描述 |
---|---|
self.start | 用于保存时间序列数据的开始时间。通常在处理数据时设定。 |
self.y_min | 保存目标变量 y 的最小值。用于标准化或缩放处理。 |
self.y_scale | 保存目标变量 y 的缩放因子。用于标准化处理,将数据缩放到模型适合的范围。 |
self.logistic_floor | 布尔值,表示是否使用逻辑斯蒂(logistic)模型的下限(floor)。当设置为 True 时,y 被限制在某个下限以上。 |
self.t_scale | 保存时间(t )的缩放因子。用于对时间变量进行标准化处理。 |
self.changepoints_t | 存储变化点的时间。变化点是在时间序列中趋势发生显著变化的点。 |
self.seasonalities | 存储季节性成分的字典,其中每个季节性成分都有其自己的配置。 |
self.extra_regressors | 存储额外回归量的字典。额外回归量是在模型中添加的额外特征,用于增强模型的预测能力。 |
self.country_holidays | 存储国家假日信息的对象。用于添加假日效应对预测的影响。 |
self.stan_fit | 存储 Stan 模型的拟合结果。包括模型的所有参数和后验分布。 |
self.params | 存储模型的参数。包括趋势、季节性和假日成分的相关参数。 |
self.history | 存储历史数据。用于模型训练的实际时间序列数据。 |
self.history_dates | 存储历史数据的日期信息。用于时间序列数据的索引。 |
self.train_component_cols | 存储用于训练的组件列名。包括趋势、季节性和假日成分的列名。 |
self.component_modes | 存储模型组件模式的字典。例如,季节性和假日的加法或乘法模式。 |
self.train_holiday_names | 存储训练数据中的假日名称。用于假日效应的分析。 |
self.fit_kwargs | 存储拟合模型时的额外参数或配置选项。 |
self.validate_inputs() | 用于验证输入数据的有效性。确保数据符合模型的要求。 |
self._load_stan_backend(stan_backend) | 加载指定的 Stan 后端。用于模型的贝叶斯推断计算。 |
看源码,我添加了注释:
class Prophet(object):def __init__(self,growth='linear',changepoints=None,n_changepoints=25,changepoint_range=0.8,yearly_seasonality='auto',weekly_seasonality='auto',daily_seasonality='auto',holidays=None,seasonality_mode='additive',seasonality_prior_scale=10.0,holidays_prior_scale=10.0,changepoint_prior_scale=0.05,mcmc_samples=0,interval_width=0.80,uncertainty_samples=1000,stan_backend=None,scaling: str = 'absmax',holidays_mode=None,):# 增长趋势,默认Linearself.growth = growth# 潜在变化点(突变点)列表,默认为Noneself.changepoints = changepoints# 如果提供了潜在变化点列表,将其转换为 pandas 的 Series# 同时计算 n_changepoints 即变化点的数量(默认25),该参数无需再次指定# 将变量 specified_changepoints 设置为True,即指定了潜在变化点if self.changepoints is not None:self.changepoints = pd.Series(pd.to_datetime(self.changepoints), name='ds')self.n_changepoints = len(self.changepoints)self.specified_changepoints = Trueelse:self.n_changepoints = n_changepointsself.specified_changepoints = False# 变化点的历史比例,默认0.8(前80%)self.changepoint_range = changepoint_range# 是否拟合年度季节性,默认autoself.yearly_seasonality = yearly_seasonality# 是否拟合每周季节性,默认autoself.weekly_seasonality = weekly_seasonality# 是否拟合每日季节性,默认autoself.daily_seasonality = daily_seasonality# 包含假日数据的 DataFrame,默认noneself.holidays = holidays# 指定季节性成分的模式,默认additive:加法模式,即季节性变化是独立于数据水平的变化# 季节性成分的影响与数据的总体水平无关,季节性波动是恒定的self.seasonality_mode = seasonality_mode# 假日成分的模式,默认None,即和季节的模式保持相同self.holidays_mode = holidays_modeif holidays_mode is None:self.holidays_mode = self.seasonality_mode# 调节季节性模型的强度,较大的值允许模型拟合较大的季节性波动,较小的值则抑制季节性self.seasonality_prior_scale = float(seasonality_prior_scale)# 调节假日成分模型的强度self.holidays_prior_scale = float(holidays_prior_scale)# 调节自动变化点选择灵活性,较大的值允许更多变化点,较小的值则允许较少变化点。self.changepoint_prior_scale = float(changepoint_prior_scale)# 控制模型的贝叶斯推断方式,默认0.如果大于 0,将使用指定数量的 MCMC 样本进行全贝叶斯推断。如果为 0,将进行 MAP 估计。self.mcmc_samples = mcmc_samples# 预测不确定性区间的宽度,默认0.8。如果 mcmc_samples=0,这将仅是不确定趋势的 MAP 估计。如果 mcmc_samples>0,这将包括所有模型参数的不确定性self.interval_width = interval_width# 用于估计不确定性区间的模拟抽样数,默认1000。将该值设置为 0 或 False 将禁用不确定性估计并加快计算速度。self.uncertainty_samples = uncertainty_samples# 数据标准化方法,绝对最大值缩放 absmax 和最大最小值缩放 minmaxif scaling not in ("absmax", "minmax"):raise ValueError("scaling must be one of 'absmax' or 'minmax'")self.scaling = scaling# 训练或者其它方法所需参数# 开始时间self.start = None# 目标变量y的最小值self.y_min = None# y的缩放因子self.y_scale = None# logistic模型下限self.logistic_floor = False# 时间的缩放因子self.t_scale = None# 突变点的时间self.changepoints_t = None# 季节性成分字典self.seasonalities = OrderedDict({})# 额外回归量的字典self.extra_regressors = OrderedDict({})# 国家假日信息self.country_holidays = None# stan模型你和结果self.stan_fit = None# 模型参数,包括趋势、季节性和假日成分的相关参数。self.params = {}# 历史数据self.history = None# 历史数据日期self.history_dates = None# 训练的组件列名。包括趋势、季节性和假日成分的列名。self.train_component_cols = None# 模型组件模式的字典。例如,季节性和假日的加法或乘法模式。self.component_modes = None# 练数据中的假日名称self.train_holiday_names = None# 额外参数或配置选项self.fit_kwargs = {}# 验证输入数据的有效性。确保数据符合模型的要求self.validate_inputs()# 加载指定的 Stan 后端,用于模型的贝叶斯推断计算# stan_backend,如 StanBackendEnum 中定义的字符串,默认值:None - 将尝试遍历所有可用的后端并找到可工作的后端self._load_stan_backend(stan_backend)
3.2 主要方法
Prophet 类中主要方法:
方法名称 | 描述 |
---|---|
__init__() | 初始化 Prophet 类的实例。 |
fit(df, **kwargs) | 拟合模型,训练数据为 df 。 |
predict(df) | 生成预测结果,输入为 df 。 |
predictive_samples(df) | 从模型的后验分布中生成预测样本。 |
make_future_dataframe(periods, freq) | 创建一个包含未来时间的 DataFrame。 |
plot(fcst, ax, uncertainty, plot_cap) | 绘制预测结果。 |
plot_components(fcst, **kwargs) | 绘制预测结果的各个组成部分。 |
add_seasonality(name, period, fourier_order, prior_scale, mode, condition_name) | 添加自定义季节性组件。 |
add_country_holidays(country_name) | 添加指定国家的节假日。 |
add_regressor(name, prior_scale, standardize, mode) | 添加外部回归变量。 |
train_holiday_names | 返回模型训练时使用的节假日名称。 |
stan_backend | 返回 Stan 后端接口。 |
stan_init | 返回 Stan 初始化数据。 |
stan_fit | 返回 Stan 模型拟合结果。 |
set_auto_seasonality | 设置是否自动检测和添加季节性组件。 |
initialize_scales | 初始化数据标准化参数。 |
setup_dataframe(df, initialize_scales) | 准备数据框架以进行模型训练。 |
piecewise_linear(t) | 定义分段线性趋势模型。 |
piecewise_logistic(t) | 定义分段逻辑回归趋势模型。 |
growth_discontinuity_prior(gamma) | 设置增长不连续性的先验。 |
logistic_floor(t) | 定义逻辑回归模型的地板值。 |
parse_seasonality_args(name, period, fourier_order, prior_scale, mode) | 解析季节性参数。 |
set_seasonality_params | 设置季节性参数。 |
validate_column_name(name) | 验证列名称是否有效。 |
validate_inputs | 验证输入数据的有效性。 |
make_all_seasonality_features(df) | 创建所有季节性特征。 |
make_seasonality_features(df, name, period, fourier_order) | 创建指定季节性的特征。 |
seasonality_features_for_dates(dates, name, period, fourier_order) | 为指定日期创建季节性特征。 |
add_changepoints_to_holidays | 添加节假日变化点。 |
make_changepoints(df) | 创建变化点。 |
history_full | 返回完整的历史数据。 |
history_dates | 返回历史数据的日期。 |
compute_components_sums | 计算各个组成部分的和。 |
component_properties | 返回各个组件的属性。 |
add_group_specific_timestamps | 添加特定于组的时间戳。 |
sample_model | 从模型中采样参数。 |
apply_seasonality_switching | 应用季节性切换。 |
normalize | 标准化输入数据。 |
is_changepoint_outlier | 判断是否为变化点异常值。 |
set_changepoint_prior_scale | 设置变化点先验尺度。 |
parse_changepoints | 解析变化点。 |
fit_predict | 拟合模型并生成预测结果。 |
stan_model | 返回 Stan 模型对象。 |
fit_stan_model | 拟合 Stan 模型。 |
四、用法示例
要用它,首先要明确你的数据是否合适,其次要了解它的数学模型,这样你才能更好地设置参数。
或者你把它的代码读一遍也可以,总共就4000来行,你看forecast那个文件的1900多行差不多就能明白了。
来个简单的示例:
import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt# 创建示例数据
dates = pd.date_range(start='2023-01-01', periods=365)
data = {'ds': dates,'y': [x + (x % 30) * 0.1 for x in range(365)]
}
df = pd.DataFrame(data)# 初始化 Prophet 模型
model = Prophet()# 拟合模型
model.fit(df)# 生成未来日期
pred_len = 30 # 预测未来 30 天
future = model.make_future_dataframe(periods=pred_len, freq='D')# 进行预测
forecast = model.predict(future)# 展示结果
fig1 = model.plot(forecast)
plt.title('Prophet Forecast')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()# 打印预测的最后几行
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
ds yhat yhat_lower yhat_upper
390 2024-01-26 391.452024 389.329087 393.542118
391 2024-01-27 392.434908 390.270313 394.764440
392 2024-01-28 393.468846 390.929671 395.868170
393 2024-01-29 394.467450 391.870685 397.082774
394 2024-01-30 395.445139 392.744768 398.179136
相关文章:
【Python】Facebook开源时间序列数据预测模型Prophet
文章目录 一、简介二、项目的文件解读三、Prophet类主要方法和参数3.1 主要参数3.2 主要方法 四、用法示例 一、简介 Prophet 是由 Facebook 开发的一个开源工具,用于时间序列数据的预测。它特别适用于处理具有强季节性和趋势的时间序列数据,并且对节假…...
Spring 常用的三种拦截器详解
前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序&am…...
微前端概念
微前端作用 大型应用程序的拆分独立的前端子应用降低程序复杂性,提高开发效率 微前端能力 js隔离css隔离元素隔离生命周期预加载数据通信应用跳转多层嵌套… 微前端实现方案 IframeSingle-spaQiankunMicro-app Iframe <iframe src"https://www.examp…...
FFmpeg实战 - 解复用解码
文章目录 前置知识音视频基础概念解复用、解码的流程分析FFMPEG有8个常用库 常见音视频格式的介绍aac格式介绍h264格式介绍flv格式介绍mp4格式介绍 FFmpeg解码解封装实战数据包和数据帧(AVPacket/AVFrame)AVPacket/AVFrame的引用计数问题API介绍注意事项…...
Jmeter混合压测(2407)
一 压测需求: 电商作为服务端,至少需要满足并发量,QPS:100/s,TPS:20/s。例如场景: 电商交易中,商品图片请求量最多,电商服务端需要满足并发请求查询图片信息。各家可能会并发请求同一家电商商品、订单等内容。 二 压…...
Prometheus各类监控及监控指标和告警规则
目录 linux docker监控 linux 系统进程监控 linux 系统os监控 windows 系统os监控 配置文件&告警规则 Prometheus配置文件 node_alert.rules docker_container.rules mysql_alert.rules vmware.rules Alertmanager告警规则 consoul注册服务 Dashboard JSON…...
G120 EPos配置方案及应用场景
EPos功能就是基本定位器功能,它可计算出轴的运行特性,使轴以时间最佳的方式移动到目标位置。EPos功能主要包括:设定值 直接给定(MDI)功能、 选择程序段功能、回参考点功能、点动功能、运行到固定挡块功能。 EPos功能通过处理给定的加速度、速度和位置值生成运行特性曲线,…...
定制化爬虫管理:为企业量身打造的数据抓取方案
在数据驱动的时代,企业如何高效、安全地获取互联网上的宝贵信息?定制化爬虫管理服务应运而生,成为解锁专属数据宝藏的金钥匙。本文将深入探讨定制化爬虫管理如何为企业量身打造数据抓取方案,揭秘其在海量信息中精准捕获价值数据的…...
Javascript面试基础6【每日更新10】
Gulp gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成 Gulp的核心概念:流 流,简单来说就是建立在面向对象基础上的一种抽象的…...
CTF Web信息搜集 25000字详解
目录 前言信息收集常见信息分类域名信息whois备案CDN子域名解析记录 旁站C段服务器信息端口服务器类型数据库类型waf防火墙 网站信息备份文件备份文件常见的后缀名备份文件常见的文件名gedit备份文件vim备份文件收集方法 敏感目录CMS类型(指纹识别)探针泄…...
MSPM0G3507之电赛小车
一、前言 本文没什么技术分享,纯聊天。以下内容均为笔者的浅薄理解,有不对的地方还请多多包涵。 二、相关配置 主控单元:MSPM0G3507SPTR(48角) 编译环境:Keil5.33、5.39(推荐)都可 …...
linux运维一天一个shell命令之vmstat详解
概念 vmstat 是 Linux 系统中一个非常有用的工具,主要用于报告系统的虚拟内存、进程、CPU 活动和 IO 性能等信息。以下是对 vmstat 工具的详细解释: 基本语法 vmstat [options] [delay [count]]delay:更新的时间间隔(以秒为单…...
前端开发调试工具推荐分类整理
具体前往:前端调试工具分类整理汇总...
http协议与nginx
动态页面与静态页面的差别: (1)URL不同 静态⻚⾯链接⾥没有“?” 动态⻚⾯链接⾥包含“?” (2)后缀不同 (开发语⾔不同) 静态⻚⾯⼀般以 .html .htm .xml 为后缀 动态⻚⾯⼀般以 .php .jsp .py等为后…...
一款国外开发的高质量WordPress下载站模板主题
5play下载站是由国外站长开发的一款WordPress主题,主题简约大方,为v1.8版本, 该主题模板中包含了上千个应用,登录后台以后只需要简单的三个步骤就可以轻松发布apk文章, 我们只需要在WordPress后台中导入该主题就可以…...
Laravel为什么会成为最优雅的PHP框架
Laravel之所以成为最优雅的PHP框架之一,是因为它提供了一系列的优点,包括简洁的语法、强大的功能集、高度模块化和可扩展性、优雅的ORM、内置认证系统、丰富的社区支持和测试友好等。这些优点使得Laravel在PHP框架中脱颖而出,成为了很多开发者的首选框架。 官网:https://l…...
孤儿进程的例子
先让父进程死亡,子进程的父进程会被操作系统管理 先使用gcc编译代码, 执行代码后用 ps -p <进程号> -f 查看进程 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main() {pid_t pid;// 创建…...
CSS前端面试题——怎么用CSS实现一个宽高自适应的正方形?
方法一:使用 padding 方案 这种方法通过设置元素的 padding 属性来实现宽高比例相等的正方形。假设我们希望正方形的边长为相对于父容器的百分比值,比如50% .square {width: 50%; /* 可以是任意宽度,这里假设为父元素宽度的50% */padding-t…...
谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成
文章目录 一,56-商品服务-API-三级分类-修改-拖拽功能完成二,57-商品服务-API-三级分类-修改-批量拖拽效果1,增加按钮2,多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时,拖拽排序是一个直观且高效的…...
Shader入门精要总结(二)矩阵
1. 矩阵乘法 一个rn的矩阵A和一个nc的矩阵B相乘,它们的结果AB将会是一个rc大小的矩阵,不满足此规则不能相乘 矩阵乘法满足一些性质 矩阵乘法不满足交换律 即AB≠BA矩阵乘法满足结合律 (AB)CA(BC) 2. 特殊矩阵 方块矩阵 指行和列数目相等的矩阵&#…...
基于CentOS Stream 9平台安装MySQL Community Server 9.0.1 Innovation
1. 安装之前 1.1 查看系统版本 cat /etc/redhat-releaseCentOS Stream release 9 1.2 查看cpu架构 lscpu架构: x86_64 CPU 运行模式: 32-bit, 64-bit 2. 官网下载 https://dev.mysql.com/downloads/mysql/ 要多看看 官方9.0文档:https://d…...
正则采集器之五——商品匹配规则
需求设计 实现分析 系统通过访问URL得到html代码,通过正则表达式匹配html,通过反向引用来得到商品的标题、图片、价格、原价、id,这部分逻辑在java中实现。 匹配商品的正则做成可视化编辑,因为不同网站的结构不同,同…...
一键切换阿里yum源(包括其他系统repo镜像查找方法)
一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…...
Fiddler学习笔记
目录 前言 简介 原理 界面 前言 测试可以使用fiddler工具,通过抓包的方式修改前端参数和模拟后端返回,快速定位缺陷。 简介 Fiddler是HTTP协议调试代理工具,可以记录并检查所有客户端和服务器之间的HTTP和HTTPS请求,允许监视…...
【Vue3】watch 监视多种类型数据
【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗…...
【C++入门】虚函数与多态
文章目录 前言虚函数是什么?如何使用虚函数? 纯虚函数是什么?虚函数与普通函数的区别虚表虚表是什么?含有虚表的类内存结构图如何找到虚表的地址?示例代码代码解释 多态是什么?如何使用多态?为什…...
wpf中轮询显示图片
本文的需求是,在一个文件夹中,放一堆图片的集合,然后在wpf程序中,按照定时的方式,循序显示照片。 全部代码 1.声明一个PictureInfo类 namespace WpfApp1 {public class PictureInfo{public string? FileName { get; …...
CSA笔记9-磁盘管理(2)
分区挂载 挂载:将该文件系统中的内容与指定的目录关联起来,使得你可以通过该目录来访问文件系统中的文件和目录。 mount 命令用来挂载文件系统 #挂载/dev/sda1和/dev/sda2 [rootlocalhost ~]# mkdir test{1..2} [rootlocalhost ~]# ll test1 te…...
Python入门第三课
# 入门第三课 # 关键字 if and or in not in ! car g print(car g) print(car dd) if car ! hh:print("wlcome to here ") age 33 print(age 33) print(age 44) age1 44 if age >0 and age1 > 0:print("nihao") if age >0 or age1 > …...
java计算器,输入公式和对应变量的值
目标:最近想写个东西,本质就是一个计算器,我们可以输入公式(例如:ab),然后把公式的值(a:10,b:20)也输入进去。最后得到结果。核心:这个想法核心部分就是给一个…...
加密货币赋能跨境电商:PayPal供应链金融服务如何引领行业新趋势
跨境电商行业近年来呈现出爆发式增长,随着全球化贸易壁垒的降低和数字经济的快速发展,越来越多的商家和消费者跨越国界进行交易。根据eMarketer的数据,全球跨境电商交易额在2023年已超过4万亿美元,并预计在未来几年内仍将保持两位…...
redis面试(二)List链表数据
list 列表 我们总是说List为列表,其实在真正的数据结构来说,redis是自己基于c语言来实现的双向链表数据结构,主要的逻辑就是每个节点都可以指向下一个节点,这个结构就属于链表数组结构。 每个节点中的属性如下: type…...
SpringDataJPA(三):多表操作,复杂查询
一、Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …...
嵌入式硬件面试题集萃:从基础到进阶
基础问题 问题: 解释什么是微控制器,以及它与微处理器的区别。 答案: 微控制器是具有集成内存和输入/输出外设的微型计算机。与通用微处理器相比,微控制器通常用于控制特定应用,而不是执行通用计算任务。 问题: 什么是数字逻辑门,…...
easyui-datebox 只显示月份选择,默认开启月份,隐藏日期选择框
如果你使用 easyui-datebox 并希望隐藏日期选择框,只显示月份选择,可以通过一些自定义代码来实现。虽然 EasyUI 没有直接提供这种功能,但可以通过自定义 formatter 和 parser 方法,以及修改 onShowPanel 事件来实现这个功能。 以下…...
【数据结构】队列(链表实现 + 力扣 + 详解 + 数组实现循环队列 )
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…...
02 Go语言操作MySQL基础教程_20240729 课程笔记
概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728 基础不好的同学每节课的代码最好配合视频进行阅读和学习,如果基础比较扎实,则阅读本教程巩固一下相…...
相交链表 - 力扣(LeetCode)C语言
160. 相交链表 - 力扣(LeetCode) (点击前面链接即可查看题目) 一、题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始…...
【Python】基础学习技能提升代码样例3:JSON文本处理
对json的处理,无非是编码和解码两部分 编码:将python数据结构转换为json字符串解码: 将json字符串转换为python数据结构 另外,还有.json文件的读写 一、编码 json.dumps(obj, *, skipkeysFalse, ensure_asciiTrue, check_circularTrue, a…...
最新Yiso智云搜索引擎系统源码/开源PHP源码/修复版
源码简介: 最新Yiso智云搜索引擎系统源码/开源PHP源码/修复版。Yiso 是一个性能非常好的搜索引擎,不仅免费开源,还能当作收录网址的平台来用呢!只需要输入关键词,就能轻松找到相关的搜索结果内容。 1、Yiso 用的是自…...
Anconda 快速常用命令简洁版
目的:简单清楚的使用基本的conda 命令 可能需求 查看项目中的虚拟环境及依赖是否满足需求操作新环境来满足项目或者论文的实现 Anconda 常用命令 conda 查看基础命令1. 进入Anaconda 环境2. 查看版本3.查看有哪些虚拟环境4.激活虚拟环境5. 进入虚拟环境查看6. 退出…...
Android 系统启动动画
一、接着我们把 bootanimation.zip 动画文件 预制到 /system/media/ 目录下: 二、目录/system/media/bootanimation.zip PRODUCT_COPY_FILES \$(LOCAL_PATH)/bootanimation.zip:/system/media/bootanimation.zipPRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST \ /…...
解决antd打开modal时页面自动跳到顶部问题
问题原因:antd的样式中有一行,如下样式代码,这行代码导致了在本来有滚动条的页面底部触发modal弹出时,会自动滚动到页面顶部。 html {overflow-y: scroll; } 解决办法:删除这行代码、或者将html的overflow-y属性改成…...
什么是等保测评2.0,等保测评如何定级
在信息化时代,网络安全已成为国家安全的重要组成部分。为了应对日益复杂的网络安全形势,我国推出了网络安全等级保护制度,其中等保测评是评估信息系统安全防护能力的关键环节。本文将深入探讨等保2.0的测评流程和定级标准,以揭示其…...
【嵌入式英语教程--6】C语言中的数组与指针
C语言中的数组与指针 英文原文 Arrays and pointers are fundamental concepts in the C programming language. An array is a collection of elements of the same data type stored in contiguous memory locations. Arrays can be used to store and manipulate sequence…...
RocketMQ 中的同步发送
在现代分布式系统中,消息队列是实现异步通信和解耦的重要组件。Apache RocketMQ 是一款高性能、高吞吐量的分布式消息中间件,广泛应用于电商、金融等领域。本文将详细介绍 RocketMQ 中的同步发送,包括其原理、应用场景、代码示例及注意事项。…...
c语言指针2
文章目录 一、void * 指针二、const关键字1.const修饰变量2.const修饰指针变量2. 1 const放在*的右边2. 2 const放在*的左边2. 3 总结 三、指针的运算3. 1指针的加减运算3. 2 指针 - 指针3. 3 指针的关系运算 四、野指针4. 1 什么叫野指针?4. 1 野指针的成因4.1.1 指…...
十七、openCV教程 图像轮廓
一、图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线.轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用:.用于图形分析、物体的识别和检测 注意点: 为了检测的准确性,需要先对图像进行二值化或Canny操作。 画轮廓时会修改输入的图像,如…...
基于视觉的语义匹配见多了,那基于雷达的呢?
论文题目: LiDAR-based HD Map Localization using Semantic Generalized ICP with Road Marking Detection 论文作者: Yansong Gong, Xinglian Zhang, Jingyi Feng, Xiao He and Dan Zhang 作者单位:北京驭势科技有限公司 导读ÿ…...
01、爬虫学习入门
爬虫:通过编写程序,来获取获取互联网上的资源 需求:用程序模拟浏览器,输入一个网址,从该网址获取到资源或内容 一、入门程序 #使用urlopen来进行爬取 from urllib.request import urlopen url "http://www.ba…...