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

Python 3 时间序列可视化指南

简介

时间序列分析属于统计学的一个分支,涉及对有序的、通常是时间性的数据进行研究。当适当应用时,时间序列分析可以揭示意想不到的趋势,提取有用的统计数据,甚至预测未来的趋势。因此,它被应用于许多领域,包括经济学、天气预报和容量规划等。

在本教程中,我们将介绍时间序列分析中使用的一些常见技术,并逐步介绍操作、可视化时间序列数据所需的迭代步骤。

先决条件

本指南将介绍如何在本地桌面或远程服务器上进行时间序列分析。处理大型数据集可能会占用大量内存,因此在任何情况下,计算机都需要至少2GB的内存来执行本指南中的一些计算。

在本教程中,我们将使用Jupyter Notebook来处理数据。如果您尚未安装,请按照我们的教程安装和设置Python 3的Jupyter Notebook。

步骤1 — 安装软件包

我们将利用pandas库,它在处理数据时提供了很大的灵活性,以及statsmodels库,它允许我们在Python中进行统计计算。这两个库的结合扩展了Python的功能,显著增加了我们的分析工具包。

与其他Python软件包一样,我们可以使用pip安装pandasstatsmodels。首先,让我们进入本地编程环境或基于服务器的编程环境:

cd environments
. my_env/bin/activate

从这里开始,让我们为我们的项目创建一个新目录。我们将其命名为timeseries,然后进入该目录。如果您将项目命名为其他名称,请确保在整个指南中用您的名称替换timeseries

mkdir timeseries
cd timeseries

现在,我们可以安装pandasstatsmodels和数据绘图包matplotlib。它们的依赖项也将被安装:

pip install pandas statsmodels matplotlib

到目前为止,我们已经准备好开始使用pandasstatsmodels进行工作。

步骤2 — 加载时间序列数据

要开始处理我们的数据,我们将启动Jupyter Notebook:

jupyter notebook

要创建一个新的笔记本文件,请从右上角的下拉菜单中选择New > Python 3

!创建一个新的Python 3笔记本

这将打开一个笔记本,允许我们加载所需的库(请注意,我们使用了标准的缩写来引用pandasmatplotlibstatsmodels)。在我们的笔记本顶部,我们应该写入以下内容:

import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

在本教程的每个代码块之后,您应该键入ALT + ENTER来运行代码,并在笔记本中进入新的代码块。

方便的是,statsmodels自带内置数据集,因此我们可以直接将时间序列数据集加载到内存中。

我们将使用一个名为“夏威夷火奴鲁鲁马努阿罗观测站连续空气样本中的大气二氧化碳(CO2)”的数据集,该数据集从1958年3月到2001年12月收集了CO2样本。我们可以这样导入这些数据:

data = sm.datasets.co2.load_pandas()
co2 = data.data

让我们看看我们的时间序列数据的前5行是什么样子:

print(co2.head(5))
              co2
1958-03-29  316.1
1958-04-05  317.3
1958-04-12  317.6
1958-04-19  317.5
1958-04-26  316.4

通过导入包并准备好CO2数据集,我们可以继续对数据进行索引。

步骤3 — 使用时间序列数据进行索引

您可能已经注意到日期已经被设置为我们pandas DataFrame的索引。在Python中处理时间序列数据时,我们应该确保使用日期作为索引,因此请务必始终检查,我们可以通过运行以下命令来实现:

co2.index
DatetimeIndex(['1958-03-29', '1958-04-05', '1958-04-12', '1958-04-19','1958-04-26', '1958-05-03', '1958-05-10', '1958-05-17','1958-05-24', '1958-05-31',...'2001-10-27', '2001-11-03', '2001-11-10', '2001-11-17','2001-11-24', '2001-12-01', '2001-12-08', '2001-12-15','2001-12-22', '2001-12-29'],dtype='datetime64[ns]', length=2284, freq='W-SAT')

dtype=datetime[ns]字段确认了我们的索引由日期时间戳对象组成,而length=2284freq='W-SAT'告诉我们,我们有2284个每周日期时间戳,从星期六开始。

每周数据可能很难处理,因此让我们改为使用时间序列的月均值。这可以通过使用方便的resample函数来实现,该函数允许我们将时间序列分组为桶(1个月),在每个组上应用函数(均值),并组合结果(每组一行)。

y = co2['co2'].resample('MS').mean()

在这里,术语MS表示我们按月份将数据分组到桶中,并确保我们使用每个月的开始作为时间戳:

y.head(5)
1958-03-01    316.100
1958-04-01    317.200
1958-05-01    317.120
1958-06-01    315.800
1958-07-01    315.625
Freq: MS, Name: co2, dtype: float64

pandas的一个有趣特性是它能够处理日期时间戳索引,这使我们能够快速地切片我们的数据。例如,我们可以将数据集切片,仅检索1990年之后的数据点:

y['1990':]
1990-01-01    353.650
1990-02-01    354.650...   
2001-11-01    369.375
2001-12-01    371.020
Freq: MS, Name: co2, dtype: float64

或者,我们可以将数据集切片,仅检索1995年10月到1996年10月之间的数据点:

y['1995-10-01':'1996-10-01']
1995-10-01    357.850
1995-11-01    359.475
1995-12-01    360.700
1996-01-01    362.025
1996-02-01    363.175
1996-03-01    364.060
1996-04-01    364.700
1996-05-01    365.325
1996-06-01    364.880
1996-07-01    363.475
1996-08-01    361.320
1996-09-01    359.400
1996-10-01    359.625
Freq: MS, Name: co2, dtype: float64

通过适当地为处理时间数据进行索引,我们可以继续处理可能缺失的值。

第四步 — 处理时间序列数据中的缺失值

现实世界的数据往往是杂乱的。正如我们从图中所看到的,时间序列数据中包含缺失值并不罕见。检查缺失值的最简单方法要么是直接绘制数据,要么是使用下面的命令来查看输出中的缺失数据:

y.isnull().sum()

5

这个输出告诉我们,在我们的时间序列中有 5 个月的数据缺失。

通常情况下,如果缺失值不是太多,我们应该“填补”这些缺失值,以免数据中出现间断。我们可以使用 pandas 中的 fillna() 命令来实现这一点。为简单起见,我们可以使用时间序列中最接近的非空值来填补缺失值,尽管需要注意的是,有时滚动均值可能更可取。

y = y.fillna(y.bfill())

填补了缺失值之后,我们可以再次检查是否存在任何空值,以确保我们的操作成功:

y.isnull().sum()

0

经过这些操作之后,我们看到我们已经成功填补了时间序列中的所有缺失值。

第五步 — 可视化时间序列数据

在处理时间序列数据时,通过可视化可以揭示很多信息。一些需要注意的事项包括:

  • 季节性数据是否显示出明显的周期模式?
  • 趋势数据是否遵循一致的上升或下降趋势?
  • 噪音是否存在任何与其余数据不一致的异常值或缺失值?

我们可以使用 pandasmatplotlib API 的封装来显示数据集的图表:

y.plot(figsize=(15, 6))
plt.show()

!时间序列可视化图 1

当我们绘制数据时,一些明显的模式出现了。时间序列具有明显的季节性模式,以及总体上升的趋势。我们还可以使用一种称为时间序列分解的方法来可视化我们的数据。顾名思义,时间序列分解允许我们将时间序列分解为三个不同的组成部分:趋势、季节性和噪音。

幸运的是,statsmodels 提供了方便的 seasonal_decompose 函数来执行季节性分解。如果您有兴趣了解更多信息,可以在以下论文中找到其原始实现的参考资料:“STL: A Seasonal-Trend Decomposition Procedure Based on Loess.”

下面的脚本展示了如何在 Python 中执行时间序列季节性分解。默认情况下,seasonal_decompose 返回一个相对较小的图形,因此代码块的前两行确保输出图形足够大,以便我们进行可视化。

from pylab import rcParams
rcParams['figure.figsize'] = 11, 9decomposition = sm.tsa.seasonal_decompose(y, model='additive')
fig = decomposition.plot()
plt.show()

!时间序列季节性-趋势分解可视化图 2

使用时间序列分解可以更容易地快速识别数据中的均值变化或变异性。上面的图表清楚地显示了数据的上升趋势,以及其年度季节性。这些可以用来理解我们时间序列的结构。时间序列分解背后的直觉很重要,因为许多预测方法都建立在这种结构化分解的概念之上,以生成预测。

结论

如果您跟随本指南,现在您已经具备了在 Python 中可视化和操作时间序列数据的经验。

为了进一步提高您的技能,您可以加载另一个数据集,并重复本教程中的所有步骤。例如,您可以使用 pandas 库读取一个 CSV 文件,或者使用 statsmodels 库预先加载的 sunspots 数据集:data = sm.datasets.sunspots.load_pandas().data

相关文章:

Python 3 时间序列可视化指南

简介 时间序列分析属于统计学的一个分支,涉及对有序的、通常是时间性的数据进行研究。当适当应用时,时间序列分析可以揭示意想不到的趋势,提取有用的统计数据,甚至预测未来的趋势。因此,它被应用于许多领域&#xff0…...

[算法前沿]--059-大语言模型Fine-tuning踩坑经验之谈

前言 由于 ChatGPT 和 GPT4 兴起,如何让人人都用上这种大模型,是目前 AI 领域最活跃的事情。当下开源的 LLM(Large language model)非常多,可谓是百模大战。面对诸多开源本地模型,根据自己的需求,选择适合自己的基座模型和参数量很重要。选择完后需要对训练数据进行预处…...

【Docker】01 Docker安装与配置

文章目录 一、Docker二、离线安装Docker三、联网安装Docker3.1 下载YUM软件库文件3.2 安装epel-release3.3 安装yum-utils3.4 设置镜像仓库3.5 查看docker-ce所有版本3.6 安装Docker3.7 启动Docker3.8 查看Docker信息3.9 启动第一个容器 四、一些配置4.1 登录DockerHub4.2 镜像…...

Unity3d Shader篇(六)— BlinnPhong高光反射着色器

文章目录 前言一、BlinnPhong高光反射着色器是什么?1. BlinnPhong高光反射着色器的工作原理2. BlinnPhong高光反射着色器的优缺点优点缺点 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三…...

Go-zero微服务个人探究之路(十二)定时任务的选择调研

前言 很多时候后台需要做定时任务的需求,笔者的项目采用go-zero框架微服务框架,需要做定时任务,于是做了如下方法调研,共有大概三种主要选择 方案 难度总体由容易到复杂 go的timer库 通过Go的标准库time中的Ticker和Tick功能…...

Java中,List、Map和Set的区别是什么?

在Java中,List、Map和Set是三种常用的集合类型,它们之间的主要区别如下: 1、List List是有序集合,它可以包含重复元素。 List中的元素是按照插入顺序排列的,可以通过索引访问每个元素。 Java中常见的List实现类有A…...

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

链表基础知识汇总

链表 链表是一种基本的数据结构,是由一系列节点组成的集合。每个节点包含两个部分:值和指向下一个节点的指针。链表中的节点可以动态地添加、删除,其大小可以根据需要进行扩展或缩小。 链表通常用于处理不固定长度的数据结构,具有…...

Educational Codeforces Round 2(远古edu计划)

A. 恶心模拟。。 模拟一下分类即可 数字类&#xff0c;数字0&#xff0c;或者都是数字 字母类&#xff0c;字母空的也是字母&#xff0c;有字母就是字母 #include<bits/stdc.h> #define INF 1e9 using namespace std; typedef long long ll; const int N2e59; strin…...

【Tauri】(1):使用Tauri1.5版本,进行桌面应用开发,在windows,linux进行桌面GUI应用程序开发,可以打包成功,使用 vite 最方便

1&#xff0c;视频地址&#xff1a; https://www.bilibili.com/video/BV1Pz421d7s4/ 【Tauri】&#xff08;1&#xff09;&#xff1a;使用Tauri1.5版本&#xff0c;进行桌面应用开发&#xff0c;在windows&#xff0c;linux进行桌面GUI应用程序开发&#xff0c;可以打包成功&…...

「Linux」软件安装

MySQL5.7在CentOS安装 安装 配置yum仓库 更新密钥&#xff1a;rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL yum库&#xff1a;rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm使用yum安装MySQL&#xff1a;yum -y in…...

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…...

Java 三大并大特性-可见性介绍(结合代码、分析源码)

目录 ​编辑 一、可见性概念 1.1 概念 二、可见性问题由来 2.1 由来分析 三、可见性代码例子 3.1 代码 3.2 执行结果 四、Java 中保证可见性的手段 4.1 volatile 4.1.1 优化代码 4.1.2 测试结果 4.1.3 volatile原理分析 4.1.3.1 查看字节码 4.1.3.2 hotspot 层面…...

【漏洞复现】狮子鱼CMS某SQL注入漏洞01

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…...

《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)

文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例&#xff1a;实现一个简单的计数器6.1.3 拓展案例 1&#xff1a;定时器线程6.1.4 拓展案例 2&#xff1a;使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…...

C++初阶:容器(Containers)list常用接口详解

介绍完了vector类的相关内容后&#xff0c;接下来进入新的篇章&#xff0c;容器list介绍&#xff1a; 文章目录 1.list的初步介绍2.list的定义&#xff08;constructor&#xff09;3.list迭代器&#xff08; iterator &#xff09;4.string的三种遍历4.1迭代器4.2范围for循环 5…...

HARRYPOTTER: FAWKES

攻击机 192.168.223.128 目标机192.168.223.143 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.143 开启了21 22 80 2222 9898 五个端口&#xff0c;其中21端口可以匿名FTP登录&#xff0c;好像有点说法,百度搜索一下发现可以用anonymous登录…...

嵌入式Qt 第一个Qt项目

一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照向导进行下一步 选…...

【OpenHarmony硬件操作】风扇与温湿度模块

文章目录 前言一、串行通信是什么二、IC2.1 IC是什么2.2 IC涉及到的线2.3 IC的时序三、风扇的操作3.1 关于 pcf85743.2 风扇的接口函数IO拓展芯片的定义初始化PCF8574初始化 IO拓展版的引脚属性开启和关闭风扇读状态四、温湿度传感器的使用4.1 初始化温湿度传感器</...

Vue3.4+element-plus2.5 + Vite 搭建教程整理

一、 Vue3Vite 项目搭建 说明&#xff1a; Vue3 最新版本已经基于Vite构建&#xff0c;关于Vite简介&#xff1a;Vite 下一代的前端工具链&#xff0c;前端开发与构建工具-CSDN博客 1.安装 并 创建Vue3 应用 npm create vuelatest 创建过程可以一路 NO 目前推荐使用 Vue R…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...