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

用ACF和PACF计算出一堆数据的周期个数以及周期时长,数据分析python

具体步骤
1使用ACF和PACF:可以通过查看ACF图中的周期性峰值,找到数据中的周期性。如果ACF图在某个滞后期处出现显著的正相关峰值,并且这种模式在多个滞后周期中重复出现,这就是周期性信号的特征。而PACF则可以帮助确定延迟的直接影响。

2找周期数和周期长度:周期的时长可以通过ACF中第一个显著的峰值(排除滞后期为0时的峰值)来确定,而周期的个数则可以通过分析整个序列中的周期性重复次数来估计。

下面是一个使用 statsmodels 库来计算并绘制ACF和PACF,并分析周期的Python代码。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import acf, pacf# 生成模拟数据或导入真实数据
# 假设你的数据是一个时间序列 DataFrame 或 NumPy 数组
# data = pd.read_csv('your_data.csv')  # 你的真实数据
data = np.sin(np.linspace(0, 10 * np.pi, 500))  # 模拟数据# 绘制ACF和PACF
fig, ax = plt.subplots(2, 1, figsize=(10, 8))# ACF图
plot_acf(data, lags=50, ax=ax[0])
ax[0].set_title('Autocorrelation (ACF)')# PACF图
plot_pacf(data, lags=50, ax=ax[1])
ax[1].set_title('Partial Autocorrelation (PACF)')plt.tight_layout()
plt.show()# 计算ACF和PACF值
acf_values = acf(data, nlags=50)
pacf_values = pacf(data, nlags=50)# 寻找周期长度
def find_period(acf_values):# 查找第一个显著峰值的位置作为周期for lag in range(1, len(acf_values)):if acf_values[lag] > 0.5:  # 设定一个阈值,例如0.5,可以调整return lagreturn Noneperiod = find_period(acf_values)
print(f"Detected period length: {period}")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import acf, pacf# 生成模拟数据或导入真实数据
data = np.sin(np.linspace(0, 20 * np.pi, 1000))  # 生成正弦波数据,假设有多个周期# 绘制ACF和PACF
fig, ax = plt.subplots(2, 1, figsize=(10, 8))# ACF图
plot_acf(data, lags=100, ax=ax[0])
ax[0].set_title('Autocorrelation (ACF)')# PACF图
plot_pacf(data, lags=100, ax=ax[1])
ax[1].set_title('Partial Autocorrelation (PACF)')plt.tight_layout()
plt.show()# 计算ACF值
acf_values = acf(data, nlags=100)# 寻找周期长度函数
def find_period(acf_values, threshold=0.5):# 查找第一个显著峰值的位置作为周期长度for lag in range(1, len(acf_values)):if acf_values[lag] > threshold:  # 使用阈值筛选显著峰值return lagreturn None# 确定周期长度
period_length = find_period(acf_values)
print(f"Detected period length: {period_length}")# 计算周期个数
if period_length:total_data_points = len(data)num_periods = total_data_points // period_lengthprint(f"Detected number of periods: {num_periods}")
else:print("No significant period detected.")
http://www.lryc.cn/news/431978.html

相关文章:

  • 生活方式对人健康影响非常大 第三篇
  • ubuntu22.04 qemu 安装windows on arm虚拟机
  • 前端框架的演变与选择
  • Oracle(109)如何管理用户密码策略?
  • 【重学MySQL】十三、基本的 select 语句
  • vue3.5新特性整理
  • RK3588 系列之3—rknn使用过程中遇到的bug
  • Java中的强引用、软引用、弱引用和虚引用于JVM的垃圾回收机制
  • 网络协议的基础知识
  • Java高级Day37-UDP网络编程
  • 如何利用ChatGPT提升学术论文讨论部分的撰写质量和效率
  • 谷歌seo网址如何快速被收录?
  • 自动驾驶---什么是Frenet坐标系?
  • 如何编写Linux PCI设备驱动器 之一
  • 梯度弥散问题及解决方法
  • Python中pickle文件操作及案例-学习篇
  • 微服务日常总结
  • C和C++内存管理
  • axios取消请求
  • 阿里中间件——diamond
  • pyenv -- 一款macos下开源的多版本python环境安装管理工具 国内加速版安装 + 项目venv虚拟环境 pip加速 使用与总结
  • VitePress 自定义 CSS 指南
  • 【舍入,取整,取小数,取余数丨Excel 函数】
  • 无线信道中ph和ph^2的场景
  • HCIA--实验五:静态路由综合实验
  • 不同vlan之间的通信方法
  • java后端框架
  • 如何在Word中插入复选框
  • Android 源码中jni项目 加载so目录小结
  • 24/9/6算法笔记 kaggle 房屋价格