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

【Python】如何有效比较两个时间序列在图形上的相似度?

文章目录

  • 前言
  • 一、1.准备
  • 二、实操
    • 1.使用Matplotlib可视化比较两个时间序列
    • 2.计算两个时间序列的相关系数:
    • 3.使用Python实现动态时间规整算法(DTW):
  • 总结


前言

比较两个时间序列在图形上是否相似,可以通过以下方法:

可视化比较:将两个时间序列绘制在同一张图上,并使用相同的比例和轴标签进行比较。可以观察它们的趋势、峰值和谷值等特征,从而进行比较。
峰值和谷值比较:通过比较两个时间序列中的峰值和谷值来进行比较。可以比较它们的幅度和位置。

相关性分析:计算两个时间序列之间的相关系数,从而确定它们是否存在线性关系。如果它们的相关系数接近1,则它们趋势相似。

非线性方法:使用非线性方法来比较两个时间序列,如动态时间规整、小波变换等。这些方法可以帮助捕捉两个时间序列之间的相似性。

需要注意的是,图形上的相似性并不能完全代表两个时间序列之间的相似性,因为同一个图形可以对应着不同的时间序列。因此,在进行时间序列的比较时,需要综合考虑多个方面的信息。

在这里插入图片描述

一、1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。

请选择以下任一种方式输入命令安装依赖:

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install matplotlib
pip install numpy

二、实操

1.使用Matplotlib可视化比较两个时间序列

代码如下(示例):

import matplotlib.pyplot as plt# 生成时间序列数据
x = [1, 2, 3, 4, 5]
y1 = [10, 15, 13, 17, 20]
y2 = [8, 12, 14, 18, 22]# 绘制两个时间序列的折线图
plt.plot(x, y1, label='y1')
plt.plot(x, y2, label='y2')# 设置图形属性
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Comparison of two time series')
plt.legend()# 显示图形
plt.show()

2.计算两个时间序列的相关系数:

代码如下(示例):

import numpy as np# 生成时间序列数据
x = [1, 2, 3, 4, 5]
y1 = [10, 15, 13, 17, 20]
y2 = [8, 12, 14, 18, 22]# 计算相关系数
corr = np.corrcoef(y1, y2)[0, 1]# 输出结果
print('Correlation coefficient:', corr)

3.使用Python实现动态时间规整算法(DTW):

代码如下(示例):

import numpy as np# 生成时间序列数据
x = [1, 2, 3, 4, 5]
y1 = [10, 15, 13, 17, 20]
y2 = [8, 12, 14, 18, 22]# 动态时间规整算法
def dtw_distance(ts_a, ts_b, d=lambda x, y: abs(x - y)):DTW = {}# 初始化边界条件for i in range(len(ts_a)):DTW[(i, -1)] = float('inf')for i in range(len(ts_b)):DTW[(-1, i)] = float('inf')DTW[(-1, -1)] = 0# 计算DTW矩阵for i in range(len(ts_a)):for j in range(len(ts_b)):cost = d(ts_a[i], ts_b[j])DTW[(i, j)] = cost + min(DTW[(i-1, j)], DTW[(i, j-1)], DTW[(i-1, j-1)])# 返回DTW距离return DTW[len(ts_a)-1, len(ts_b)-1]# 计算两个时间序列之间的DTW距离
dtw_dist = dtw_distance(y1, y2)# 输出结果
print('DTW distance:', dtw_dist)

总结

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python徐浪老师!

http://www.lryc.cn/news/44217.html

相关文章:

  • JavaEE-常见的锁策略和synchronized的锁机制
  • 信息化,数字化,智能化是三种不同的概念吗?
  • 【华为OD机试 2023最新 】 匿名信(C++ 100%)
  • 硬件语言Verilog HDL牛客刷题day05 时序逻辑部分
  • Ajax 入门
  • 半导体器件基础06:发光二极管
  • AutoCV第二课:Python基础
  • LeetCode算法 打家劫舍 和 打家劫舍II C++
  • 蓝桥杯刷题冲刺 | 倒计时10天
  • 个人练习-Leetcode-剑指 Offer II 109. 开密码锁
  • 四个常见的Linux面试问题
  • 15、接口(C#)
  • C++中常见的容器类使用方法举例(vector、deque、map、set)
  • 什么是强缓存和协商缓存
  • 算法刷题之堆
  • javaweb导师选择系统
  • LeetCode150 逆波兰表达式求值
  • 【Node.js】项目开发实战(中)
  • 记录一次 New Bing 英语陪练
  • 【Python】照片居然能变素描?不会画画但是咱会代码
  • 已解决正确配置git环境变量
  • 【逐步剖C】-第十章-自定义类型之结构体、枚举、联合
  • Windows Server 2016 中文版、英文版下载 (updated Mar 2023)
  • Linux 4G 通信实验
  • 华为OSPF技术详细介绍,保姆级,谁都能看懂(一)
  • 行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
  • SM3哈希算法的FPGA实现 I
  • 【数据结构与算法】线性表--数组
  • 剑指offer排序专题
  • 已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py