R语言中的时间序列分析·
1 数据集说明
AirPassengers 1949~1960年每月乘坐飞机的乘客数
JohnsonJohnson Johnson&Johnson每股季度收入
nhtemp 康涅狄格州纽黑文地区从1912年至1971年每年的平均气温
Nile 尼罗河的流量
sunspots 1749年~1983年月平均太阳黑子数
2 相关包
xts、forecast、tseries、directlabels
3 在R中生成时序对象
首先将分析对象转成时间序列对象(time-series object)。
xts包提供的xts类支持时间间隔规律的和时间间隔不规律的时间序列,还拥有很多用于操作时序数据的函数。
另外:基础R附带的ts用于储存时间间隔规律的耽搁时间序列,mts’用于储存时间间隔均匀的多个时间序列;zoo包提供的类可以储存时间间隔不规律的时间序列,xts包提供zoo类的超集,包含更多函数;tsbox包提供的函数可以将数据框转化为任意一种时间序列格式,也可以将一种时间序列格式转化为另一种时间序列格式。
创建xts时间序列:
library(xts)myseries<-xts(data,index)
# data是观测值的数值型向量;index表示观测值观测时间的日期向量。
3.1 生成时间序列对象
# 从2018年1月以来的两年的月度销售数据library(xts)sales<-c(18,33,41,7,34,35,24,25,24,21,25,20,22,31,40,29,25,21,22,54,31,25,26,35)sales<-c(18,33,41,7,34,35,24,25,24,21,25,20,22,31,40,29,25,21,22,54,31,25,26,35)date<-seq(from=as.Date("2018/1/1"),to=as.Date("2019/12/1"),by="month")sales.xts<-xts(sales,date)sales.xts
# 结果
xts格式的时间序列对象可使用方括号[]来设定子集:
# 返回2018年以来的所有数据sales.xts["2018"]
# 结果
# 返回2018年3月到2019年5月的所有数据sales.xts["2018-3/2019-5"]
函数apply用于对时间序列对象的每个不同时间段执行一个函数,在将时间序列聚集合成更大的时间段时很实用。
newseries<-apply.period(x,FUN,…)
# period可以是daily、weekly、monthly、quarterly或yearly;x是一个xts时间序列对象,FUN是要应用的函数,…是传递给FUN的参数。
# 返回8个季度销售总量的时间序列quarterlies<-apply.quarterly(sales.xts,sum)quarterlies
# 结果
# sum可以替换为mean、median、min、max或其他任何返回单个值的函数
3.2 绘制时间序列图
forecast包中的autoplot()可将时序数据绘制为ggplot2图形
library(ggplot2)library(forecast)autoplot(sales.xts)
# 结果
图 3-1 销量数据的时序图,autoplot()提供的默认格式
autoplot(sales.xts)+geom_line(color="blue")+scale_x_date(date_breaks="1 months",date_labels="%b %y")+labs(x="",y="Sales",title='Customized Time Series Plot')+theme_bw()+theme(axis.text.x=element_text(angle=90,vjust=0.5,hjust=1),panel.grid.minor.x=element_blank())
# 选项date_breaks指定刻度间的距离,值可以是“1 day”“2 weeks”“5 years”等;“%b%y”指定了月份(3个字母)和年份(2位数),以及两者之间的空格;最后,选择了黑白主题,x轴标签旋转了90度,取消了垂直的小网格线。
# 结果
图 3-2 销量数据时序图,定义了颜色、更美观的标签和更清晰的主题元素
4 时序的平滑化和季节项分解
对时序数据建立复杂模型之前需要对其进行描述和可视化。我们对时序进行平滑化以探究其总体趋势,并对其进行分解以观察时序中是否存在季节项。
4.1 通过简单移动平均进行平滑处理(Nile数据集)
处理时序数据的第一步是画图。使用数据集Nile,是埃及阿斯旺市在1871年至1970年间所记录的尼罗河的年度流量。由图,数据总体呈下降趋势,但不同年份的变动非常大。(图 4-1 )
时序数据集中通常有很显著的随机或误差成分。为了辨明数据中的规律,我们希望能够撇开这些波动,画出一条平滑曲线。画出平滑曲线的最简单方法是简单移动平均。比如,每个数据点都可用这一点和其前后两个点的平均值来表示,这就是居中移动平均。
R中可以做简单移动平均的函数:TTR包中的SMA()函数;zoo包中的rollmean()函数;forecast包中的ma()函数。
# 时序数据的原始数据图、平滑后的图library(ggplot2)library(forecast)theme_set(theme_bw())ylim<-c(min(Nile),max(Nile))autoplot(Nile)+ggtitle(“Raw time series”)+scale_y_continuous(limits=ylim)autoplot(ma(Nile,3))+ggtitle(“Simple Moving Average (k=3)”)+scale_y_continuous(limits=ylim)autoplot(ma(Nile,7))+ggtitle(“simple Moving Average (k=7)”)+scale_y+continuous(limits=ylim)autoplot(ma(Nile,15))+ggtitle(“simple Moving Average (k=15)”)+scale_y+continuous(limits=ylim)
# 结果
图 4-1 1871~1970年阿斯旺水站观测到的尼罗河的年流量
图 4-2 平滑水平k=3
图 4-3 平滑水平k=7
图 4-4 平滑水平k=15
# 随着k的增大,图像变得越来越平滑。
# 尼罗河的·流量从1892年到1900年有明显下降;其他的变动不是太好解读,比如1941年到1961年流量似乎略有上升,但这也可能只是一个随机波动。
我们需要找到最能画出数据中规律的k,避免过平滑或者欠平滑。没有什么特别的科学理论来指导k的选取,只需要多次尝试不同的k,再决定一个最好的k。
对于间隔大于1的时序数据(存在季节想),需要了解的不仅是总体趋势。此时需要通过季节项分解帮助我们探究季节性波动以及总体趋势。
4.2 季节项分解
存在季节项的时序数据(如月度数据、季度数据等)可以被分解为趋势项、季节项和随机项。趋势项(trend component)能捕捉到长期变化;季节项(seasonal component)能捕捉到一年内的周期性变化;随机(误差)项(irregular/error component)能捕捉到那些不能被趋势项或季节项解释的变化。
可以通过相加模型或相乘模型来分解数据。在相加模型中,各项之和等于对应的时序值,时刻t的观测值等于这一时刻的趋势项、季节项以及随机项之和;而在相乘模型中,时刻t的观测值等于趋势项、季节项和随机项相乘。
下面举例说明相加模型与相乘模型的区别:假设有一个时序,记录了10年来摩托车的月销量。在具有季节项的相加模型中,11月和12月的销量一般会增加500(圣诞节销售高峰),而1月(一般是销售淡季)的销量则会减少200.此时,季节性的波动量和当时的销量无关。在具有季节项的相乘模型中,11月和12月的销量会增加20%,1月的销量会减少10%,即季节项的波动量和当时的销量是成比例的,这与相加模型不一样。这也使得在很多时候,相乘模型比相加模型更切合实际。
将时序分解为趋势项、季节项和随机项的常用方法是用loess平滑做季节项分解,通过stl()函数实现:
stl(ts, s.window=, t.window=)
# ts是将要分解的时序;s.window控制季节项变化的速度;t.window控制趋势项变化的速度。设置s.windows=”periodic”可使得季节项宰割年检都一样。参数ts和s.windows必须提供。
# stl()函数只能处理相加模型,但是相乘模型可以通过对数变换转换成相加模型。
例 (使用数据集AirPassengers)
该时序数据集描述了1949年~1960年每个月国际航班的乘客数(单位:千)。
library(ggplot2)library(forecast)autoplot(AirPassengers)
# 结果
图 4-5 AirPassengers时序图
# 序列的波动随着整体水平的增长而增长,相乘模型更适合这个序列。
# 对数变换AirPassengers1<-log(AirPassengers)autoplot(AirPassengers1,ylab="log(AirPassengers)")
# 结果
# 分解时间序列## 季节项分解,将季节项限定为每年都一样fit<-stl(AirPassengers1,s.window=”period”)autoplot(fit)
# 结果
图 时序图、季节项分解图、趋势项分解图、随机项分解图
# 时序的趋势为单调增长,季节项表明(可能为假期)夏季乘客更多。
# 每个图的y轴尺度不同,通过图中右侧的灰色长条来指示量级,即每个长条代表的量级一样
# 返回对数变换后的时序fit$time.series
# 结果(部分)
# stl()函数返回的对象中有一项是time.series,包括每个观测值中的各分解项——趋势项、季节项以及随机项的值。
# 将结果转化为原始尺度exp(fit$time$series)
# 结果(部分)
# 观察季节项,7月的乘客数增长了24%(乘子为1.24),11月的乘客数减少了20%(乘子为0.8)
例 通过forecast包提供的其它工具对季节项分解进行可视化(月度图和季节图)
library(forecast)library(ggplot2)library(directlabels)# 月度图ggmonthplot(AirPassengers)+labs(title=”Month plot: AirPassengers”,x=””,y=”Passengers (thousands)”)
# 结果
图 AirPassengers时序的月度图。月度图显示了按月划分的子序列(从1949年到1960年,每年的所有1月的点连接起来,所有2月的点连接起来,以此类推),以及每个字序列的平均值。每个月的增长趋势几乎一致,大多数乘客在7月和8月乘坐飞机。
# 季节图p<-ggseasonplot(AirPassengers)+geom_point()+labs(title=”Seasonal plot: AirPassengers”,x=””,y=”Passengers (thousands)”)direct.label(p)
# 结果
图 季节图显示每年的子序列。我们可以从图中看到类似的规律,包括每年乘客的增长趋势和相同的季节性规模。默认情况下,ggplot2包将为年份变量创建图例。使用directlabels包可以将年份标签直接放置在图中时序的每条线旁边。
5 指数预测模型
指数模型是用来预测时序未来值的最常用模型。这类模型相对比较简单,实践证明它们的短期预测能力良好。不同指数模型建模时选用的因子可能不同。比如,单指数模型(simple/single exponential model)拟合的是只有水平项和时间点i处随机项的时间序列,这时认为时间序列不存在趋势项和季节项;双指数模型(double exponential model;也叫Holt指数平滑,Holt exponential smoothing)拟合的是有水平项和趋势项的时序;三指数模型(triple exponential model;也叫Holt-Winters指数平滑,Holt-Winters exponential smoothing)拟合的是有水平项、趋势项以及季节项的时序。
Forecast包中的ets()函数可以拟合指数模型:
ets(ts,model=”zzz”)
# ts是要分析的时序,限定模型的字母有3个,第1个字母代表随机项,第2个字母代表趋势项,第3个字母代表季节项。可选的字母包括:A(相加模型)、M(相乘模型)、N(无)、z(自动选择)。
用于拟合单指数、双指数和三指数预测模型的函数:
类型 | 参数 | 函数 |
单指数 | 水平项 | ets(ts,model=”ANN”) ses(ts) |
双指数 | 水平项、趋势项 | Ets(ts,model=”AAN”) holt(ts) |
三指数 | 水平项、趋势项、季节项 | ets(ts,model=”AAA”) hw(ts) |
函数ses()、holt()、hw()都是函数ets()的便捷包装,函数中有事先默认设定的参数值。
5.1 单指数平滑
单指数平滑根据现有的时序值的加权平均对未来值做短期预测,权数选择的宗旨是使得距离现在越远的观测值对平均数的影响越小。
一步向前预测可看做当前值和全部历史值的加权平均。
例 (使用数据集nhtemp)
nhtemp时序中有康涅狄格州纽黑文市从1912年至1971年每年的平均气温。
# 拟合模型library(forecast)fit<-ets(nhtemp,model=”ANN”)fit
# A表示可加误差,NN表示时序中不存在趋势项和季节项。
# 结果
# α值比较小(α=0.18),说明预测时同时考虑了离现在较近和较远的观测值,这样的α值可以最优化模型在给定数据集上的拟合效果。
# 一步向前预测forecast(fit,1)
# 结果
# 一步向前预测的结果是51.87031℉,其95%的置信区间为49.62512℉到54.11549℉。
# 输出准确度度量accuracy(fit)
# 结果
# 预测准确度度量
一般来说,平均误差和平均百分比误差用处不大,因为正向和负向的误差会抵消掉
RMSE给出了平均误差平方和的平方根,即1.126℉;平均绝对百分比误差给出了误差在真实值中的占比,它没有单位,可以用于比较不同时序间的预测准确度,但它同时假定测量尺度中存在一个真实为零的点(比如每天的乘客数),但温度中并没有一个真实为零的点,因此这里不能使用这个统计量;平均绝对标准化误差是最新的一种准确度评估指标,通常用于比较不同尺度的时序间的预测准确度。这几种预测准确度评估指标中,并不存在某种最优评估指标,不过相对来说,RMSE最有名、最常用。
5.2 Holt指数平滑和Holt-Winters指数平滑
Holt指数平滑可以对有水平项和趋势项(斜率)的时序进行拟合。
Ets函数中的平滑参数alpha控制水平项的指数型下降,beta控制趋势项的指数型下降。两个参数的有效范围都是[0,1],参数取值越大意味着越近的观测值的权重越大。
Holt-Winters指数平滑可用来拟合含有水平项、趋势项以及季节项的时间序列。此时,模型可表示为:Yt=level+slope*t+st+irregulart
st代表时刻t的季节项;ets()函数的参数gamma控制季节项的指数下降,取值范围是[0,1],取值越大意味着越近的观测值的季节项权重越大。
例 用指数模型预测未来的乘客数(Holt-Winters指数平滑)
# 有水平项、趋势项以及季节项的指数平滑模型## 平滑参数llibrary(forecast)fit<-ets(log(AirPassengers),model=”AAA”)fit
# 结果
# 给出了3个平滑参数,即水平项0.6795、趋势项0.0031、季节项1e-04。趋势项的值很小,意味着近期观测值的趋势不需要更新
accuracy(fit)
# 结果
## 未来值预测pred<-forecast(fit,5)pred
# 结果
autoplot(pred)+labs(title=”Forecast for Air Travel”,y=”Log(AirPassengers)”,x=”Time”)
# 结果
基于Holt-Winters指数平滑模型的5年航线乘客数预测(对数变换后,单位:千)
## 用原始尺度预测pred$mean<-exp(pred$mean)pred$lower<-exp(pred$lower)pred$upper<-exp(pred$upper)p<-cbind(pred$mean,pred$lower,pred$upper)dimnames(p)[[2]]<-c("mean","Lo 80","Hi 80","Lo95","Hi 95")p
# 结果
5.3 ets()函数和自动预测
ets()函数还可以用来拟合有可乘项的指数模型,加入抑制项(dampening component),以及进行自动检测。
通过ets(AirPassengers,model=”MAM”)函数对原始数据拟合可乘模型。此时,仍假定趋势项可加,但季节项和误差项可乘。当采用可乘模型时,准确度统计量和预测值都基于原始尺度(以千为单位的乘客数),这也是它的一个明显优势。
ets()函数也可以用来拟合抑制项。时序预测一般假定序列的长期趋势是一直向上的(如房地产市场),而一个抑制项则使得趋势项在一段时间内靠近一条水平渐近线。在很多问题中,一个有抑制项的模型往往更符合实际预测。
最后,可以通过ets()函数最懂选取对原始数据拟合优度最高的模型。
例 自动选取最优拟合模型,使用ets()函数进行自动指数预测(使用数据集JohnsonJohnson)
library(forecast)fit<-ets(JohnsonJohnson)fit
# 结果
# 没有指定模型,软件自动搜索了一系列模型,并在其中找到最小化拟合标准(默认为对数似然)的模型。所选模型同时有可乘趋势项、季节项和误差项(随机项)。
# 下8个季度的预测autoplot(forecast(fit))+labs(x=”Time”,y=”Quarterly Earnings (Dollars)”,title=”Johnson and Johnson Forecasts”)
# 结果
带趋势项和季节项的可乘指数平滑模型,其中预测值由虚线表示,80%和95%置信区间分别由淡蓝色和深蓝色表示
6 ARIMA预测模型
在ARIMA预测模型中,预测值表示为由最近的真实值和最近的预测误差(残差)组成的线性函数。
6.1 概念介绍
时序的滞后阶数:向后追溯的观测值的数量
表 Nile时序的不同滞后阶数
0阶滞后项(Lag 0)代表没有移位的时序,一阶滞后(Lag 1)代表时序向左移动一位,二阶滞后(Lag 2)代表时序向左移动两位,以此类推。
Lag(ts,k)
# 把时序变成k阶滞后,ts指代目标序列,k为滞后项阶数。
自相关度量时序中各个观测值之间的相关性。相关性构成的图即自相关函数图(autocorrelation function plot,ACF图)。ACF图可用于为ARIMA模型选择合适的参数,并评估最终模型的拟合效果。
foecast包中的Acf()函数可以生成ACF图:
acf(ts)
# ts是原始时序
偏自相关图(PACF)使用forecast包中的Pacf()函数绘制:
Pacf(ts)
PACF图也可以用来找到ARIMA模型中最适宜的参数
ARIMA模型主要用于拟合具有平稳性(或可以被转换为平稳序列)的时间序列。在一个平稳的时序中,序列的统计性质并不会随着时间的推移而改变;另外,对任意滞后阶数k,序列的自相关性不改变。
一般来说,拟合ARIMA模型前需要变换序列的值以保证方差为常数,比如对数变换、Box-Cox变换等。
一般假定平稳性时序有常数均值,这样的序列中肯定不含有趋势项。非平稳的时序可以通过差分来转换为平稳性序列。对序列的一次差分可以移除序列中的线性趋势,二次差分移除二次项趋势,三次差分移除三次项趋势。在实际操作中,对序列进行两次以上的差分通常都是不必要的。
通过函数diff()对序列进行差分:
diff(ts,differences=d)
# d是对序列ts的差分次数,默认值为d=1
# forecast包中的ndiffs()函数可以帮我们找到最优的d值:ndiffs(ts)
平稳性一般可以通过时序图直观判断。如果方差不是常数,需要对数据做变换;如果数据中存在趋势项,需要对其进行差分。也可以通过ADF(Augmented Dickey-Fuller)统计检验来验证平稳性假定。tseries包中的adf.test()函数可以用来做ADF检验:adf.test(ts)。如果结果显著,则认为序列满足平稳性。
总之,通过ACF图和PACF图来为ARIMA模型选定参数。平稳性是ARIMA模型中的一个重要假设,可以通过数据变换和差分使得序列满足平稳性嘉定。
下面我们就可以拟合出有自回归(autoregressive,AR)项、移动平均(moving averages,MA)项或者两者都有(ARMA)的模型了,最后,检验有ARMA项的ARIMA模型,并对其进行差分以保证平稳性。
6.2 ARMA和ARIMA模型
ARIMA(p,d,q)模型:时序被差分了d次,且序列中的每个观测值都是用过去的p个观测值和q个残差的线性组合表示的。预测是“无误差的”或完整的。
建立ARIMA模型的步骤:
(1)确保时序是平稳的;
(2)找到一个(或几个)合理的模型(即选定可能的p值和q值);
(3)拟合模型;
(4)从统计假设和预测准确度等角度评估模型的拟合效果;
(5)预测’
例 对Nile时序拟合ARIMA模型
(1)验证序列的平稳性
画出序列的折线图并判别其平稳性
library(forecast)library(tseries)autoplot(Nile)
# 结果
1871年~1970年在阿斯旺地区测量的尼罗河的年流量时序图
ndiffs(Nile)
# 结果
dNile<-diff(Nile)autoplot(dNile)
# 结果
被差分一次后的时序图,差分后原始图中下降的趋势被移除了
adf.test(dNile)
# 结果
# 对差分后的时序做ADF检验,结果显示时序此时是平稳的,可以继续进行下一步
(2)选择模型
通过ACF图和PACF图来选择备选模型
autoplot(Acf(dNile))autoplot(Pacf(dNile))
# 结果
# 需要为ARIMA模型指定参数p、d、q,从前文可得d=1
选择ARIMA模型的方法
在ACF图中,在滞后项为一阶时有一个比较明显的自相关;当滞后阶数逐渐增加时,偏相关逐渐减小至零。因此,可以考虑ARIMA(0,1,1)模型
(3)拟合模型
使用arima()函数拟合ARIMA模型:
arima(ts,order=c(q,d,q))# 拟合ARIMA模型library(forecast)fit<-arima(Nile,order=c(0,1,1))fit
# 结果
accuracy(fit)
# 结果
# 指定了d=1,函数将对时序做一阶差分,因此直接将模型应用于原始时序即可。函数返回了移动平均项的系数(-0.73)以及模型的AIC值。如果还有其他备选模型,则可以通过比较AIC值来得到最合理的模型,比较的准则是AIC值越小越好。对百分比误差的绝对值做平均的结果是13%。
(4)模型评估
一般来说,一个模型如果合适,那么模型的残差应该满足均值为0的正态分布,并且对于任意的滞后阶数,残差自相关系数都应该为零。也就是说,模型的残差应该满足独立正态分布(残差间没有关联)。
# 模型拟合评估library(ggplot2)## 提取残差df<-data.frame(resid=as.numeric(fit$residuals))## 创建Q-Q图ggplot(df,aes(sample=resid))+stat_qq()+stat_qq_line()+labs(title=”Normal Q-Q Plot”)
# 结果
判断序列残差是否满足正态性假设的正态Q-Q图
# 计算值如果服从正态分布,则数据中的点会落在图中的线上,显然本例的结果还不错## 检验所有滞后阶数的自相关系数是否为零Box.test(fit$residuals,type=”Ljung-Box”)
# 结果
# Box.test()函数可以检验残差的自相关系数是否都为零。本例中,模型的残差没有通过显著性检验,可以认为残差的自相关系数为零。ARIMA模型能够较好地拟合本数据。
(5)预测
如果模型残差不满足正态性假设或自相关系数为零的假设,则需要调整模型、增加参数或改变差分次数。选定模型后,就可以用它来做预测。
# 用ARIMA模型做预测(forecast()函数)forecast(fit,3)
# 结果
autoplot(forecast(fit,3))+labs(x=”Year”,y=”Annual Flow”)
# 结果
用ARIMA(0,1,1)模型对Nile序列做接下来三年的预测。
# 图中的黑线代表点估计,浅蓝色和深蓝色区域分别代表80%置信区间和95%的置信区间
6.3 ARIMA模型的自动预测
使用forecast包中的auto.arima()函数实现最优ARIMA模型的自动选取
# ARIMA模型的自动预测(使用sunspots数据集)library(forecast)fit<-auto.arima(sunspots)fit
# 结果
# 函数选定ARIMA模型的参数为p=2、d=1、q=2,与其他模型相比,这种情况下得到的模型的AIC值最小。
forecast(fit,3)
# 结果
accuracy(fit)
# 结果
# 由于序列中存在值为零的观测值,MPE和MAPE这两个准确度度量都失效了(这也是这两个统计量的一个缺陷)
相关文章:

R语言中的时间序列分析·
1 数据集说明 AirPassengers 1949~1960年每月乘坐飞机的乘客数 JohnsonJohnson Johnson&Johnson每股季度收入 nhtemp 康涅狄格州纽黑文地区从1912年至1971年每年的平均气温 Nile 尼罗河的流量 sunspots 1749年~1983年月平均太阳黑子数 2 相关包 xts、forecast、tser…...

QML学习(六) anchors锚点和坐标,以及anchors锚点的使用
先来看看上一篇文章中的代码和效果 上一篇中讲到,第一个QML程序虽然做出来了,但程序界面里边元素的显示位置跟预想的不一样,这其实就是整体上对QML中的坐标使用存在问题。 改成这样,全以锚点来控制各个元素的坐标 import QtQuic…...
BFS广度优先搜索详解
对于BFS的,我来谈一谈自己的理解。首先,我们从一道最基础的题来进行学习: 洛谷B3625 迷宫寻路(仔细阅读哦,我就不解释了) B3625 迷宫寻路 - 洛谷 | 计算机科学教育新生态 对于这道题以及所有的BFS题目的核心&#x…...
vue项目利用webpack进行优化案例
使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法: 1. 优化打包大小 1.1 按需加载 (Lazy Loading) Vue 提供了路由懒加载功能,可以将组件拆分成独立的块,按需加载,从而…...

如何单独安装 MATLAB 工具箱
很多时候由于 MATLAB 太大而选择安装一些 Toolbox,但用着用着发现要用到某个没有安装的 Toolbox,这时候就需要再单独安装这个 Toolbox,下面提供两种方法。 本文以安装 系统辨识工具箱 System Identification Toolbox 为例。 方法一…...

组网实训实现
小型单元网络实现 IP划分: 外网:172.1.1.0/24 172.1.2.0/24 内网:基于192.168.3.0/24的子网划分 综合办公楼:192.168.3.00 000000 /26(192.168.3.0-192.168.3.63) 综合一楼:192.168.3.0000 0000 /28&…...
openbmc sdk09.03 适配(一)
1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...
SQL使用存储过程
本文介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。 1. 存储过程 迄今为止,我们使用的大多数SQL语句都是针对一个或多个表的单条语句。并非所有操作都这么简单,经常…...

C语言----函数、指针、数组
目录 编辑 指针函数 本质 格式: 函数指针 1、 概念 2、 格式 3、 举例 3.1基本用法 3.2函数指针作为函数参数的用法(回调函数) 函数指针数组 1. 概念 2. 格式 3. 例子 指针函数 本质 是函数,返回值为指针 格式: 数据类型…...

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】
基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…...

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)
软件介绍 12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。…...

【数据仓库】hadoop3.3.6 安装配置
文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…...

小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
批量插入报错: No value specified for parameter
先上代码和xml文件: 错误: ### Cause: java.sql.SQLException: No value specified for parameter 9 ; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 9代码: List<HwcListingData> theList new ArrayList<&g…...
VSCode设置ctrl或alt+mouse(left)跳转
总结: (1)VSCode初次远程连接服务器时,需要在服务器上下载 python 拓展,然后选择对应的环境 (2)VSCode设置ctrl或altmouse(left)跳转到定义...

Crosslink-NX应用连载(12):如何复用特殊功能管脚
作者:Hello,Panda 大家早上好。 昨天有朋友私信我,如何复用Crosslink-NX的特殊功能引脚如PROGRAMN、DONE、INITN诸如这些。熊猫君在这里简单介绍下: 以LIFCL-33U-8CTG104C为例,我们建立一个简单的指示灯LED周期闪烁的工程&…...
‘元素.style.样式名‘获取不到样式,应该使用Window.getComputedStyle()获取正真的样式
一、问题描述 有一次,想通过js获取一个元素的样式的某个属性状态而去执行不同的逻辑代码,结果发现获取的样式总是不对,基本为空。(通过元素.style.样式名的方式去获取。) 通过打印发现,所有的属性均存在&…...

双目视觉:reprojectImageTo3D函数
前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数,通过三角测量法,计算每个像素对应的三维坐标。以下内容根据源码分析所写,觉得可以的话,点赞收藏哈!&am…...

Arduino Uno简介与使用方法
目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…...
深入了解 StarRocks 表类型:解锁高效数据分析的密码
在当今数字化浪潮下,大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库,其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天,就让我们一同深入探索 StarRocks 中的主键表、明细表…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...