数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!数据源存放在我的资源下载区啦!

数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

目录

  • 数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作
    • 1. 时间序列分析1
      • 问题1:将列 date 转化为日期时间类型,并设置为索引
      • 问题2:按年份 统计开盘价(open列) 均值,并绘制直方图
      • 问题3:重采样,按月分析 open 列均值,并绘制折线图
    • 2. 时间序列分析2
      • 问题1:将列 Period 转化为 日期时间(datetime) 类型,并按列 Period 排序。
      • 问题2:将列 Period 转化为 时期(Period)类型,并设置为索引
      • 问题3:删除还有缺失值的行,绘制Sales_quantity列的自相关图和偏自相关图
      • 问题4:绘制收入(Revenue)和销售量(Sales_quantity)随Period变化的折线图
      • 问题5:通过3期滚动平均值和标准差,绘制收入和销售量数据折线图,判断其是否平稳
    • 时间序列分析3
      • 问题1:按日期统计销售量,绘制销售数量的折线图,观察是否具备周期性
      • 问题2:将Date列转换为datetime类型,并作为索引。
      • 问题3:对上一题生成dataframe重新采样(按月和按年)后计算number_sold总量,然后绘制number_sold总量的折线图。
    • matplotlib绘图题
      • 1. 仿照讲义中例子,采用calendar和matplotlib绘制月历,要实时获取当前年月。
      • 2. 采用matplotlib绘制动画,动态显示按月销量。

1. 时间序列分析1

股票(上证600519)分析

文件:assets/SH600519.csv

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt # 绘图使用
# 支持中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # SimHei 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
%matplotlib inline 

# 读取数据

df = pd.read_csv('SH600519.csv', index_col=0)  # 读取 上证600519 贵州茅台股票数据 index_col=0表示去掉自动增添的索引列
df.sample(5)

问题1:将列 date 转化为日期时间类型,并设置为索引

# 代码
# 转化 'date' 列为 datetime 类型  
df['date'] = pd.to_datetime(df['date'])  
  
# 设置 'date' 列为索引  
df.set_index('date', inplace=True)
df.head()

问题2:按年份 统计开盘价(open列) 均值,并绘制直方图

# 代码
# 提取年份  
df['year'] = df.index.year  
  
# 按年份分组并计算开盘价的均值  
mean_open_by_year = df.groupby('year')['open'].mean()  
  
# 但更常见的是使用条形图来展示每年的均值  
mean_open_by_year.plot(kind='bar')  
plt.xlabel('Year')  
plt.xticks(rotation=45)  # 如果年份标签太长,可以旋转显示  
plt.ylabel('Mean Opening Price')  
plt.title('Mean Opening Price by Year (Bar Chart)')  
plt.show()

问题3:重采样,按月分析 open 列均值,并绘制折线图

# 代码
# 重采样,按月计算 open 列的均值  
monthly_mean_open = df['open'].resample('M').mean()  
  
# 绘制折线图  
plt.figure(figsize=(10, 5))  # 设置图形大小  
plt.plot(monthly_mean_open.index, monthly_mean_open.values, marker='o')  
plt.xlabel('Date')  
plt.ylabel('Mean Opening Price')  
plt.title('Monthly Mean Opening Price')  
plt.xticks(rotation=45)  # 如果日期标签重叠,可以旋转显示  
plt.grid(True)  # 显示网格线  
plt.show()

2. 时间序列分析2

销售企业数据时间序列分析。

数据集合的列名含义:

数据:assets/Month_Value_1.csv

Period Revenue Sales_quantity Average_cost The_average_annual_payroll_of_the_region

时期 收入 销售量 平均成本 该地区每年的员工平均薪酬总额

#读取数据

df = pd.read_csv('Month_Value_1.csv')  # 读取数据
display( df.head(5) )
df.info()

问题1:将列 Period 转化为 日期时间(datetime) 类型,并按列 Period 排序。

# 编码
# 转化 'Period' 列为 datetime 类型  
df['Period'] = pd.to_datetime(df['Period'])
df = df.sort_values(by="Period",ascending=True).reset_index(drop=True)
df.head()

问题2:将列 Period 转化为 时期(Period)类型,并设置为索引

# 编码
# 将 'Period' 列转化为 Period 类型  
# 然后将 datetime 转换为 Period 类型(假设频率为日)  
df['Period'] = df['Period'].dt.to_period('d')   
  
# 将 'Period' 列设置为索引  
df.set_index('Period', inplace=True)  
  
# 查看结果  
df.head()

问题3:删除还有缺失值的行,绘制Sales_quantity列的自相关图和偏自相关图

  • 自相关图是一种展示时间序列数据与其自身过去值之间相关性的图形。在统计和数据分析中,自相关图常被用于识别序列中的周期性或趋势,以及评估数据的随机性。通过自相关图,可以观察到数据在不同时间间隔上的相关性程度,从而帮助理解和分析数据的特性。
  • 偏自相关图是一种用于展示时间序列数据中某一时刻的值与其之前时刻的值之间的直接(非间接)相关性的图形。与自相关图不同,偏自相关图在计算相关性时,会排除其他时间点上的值所带来的间接影响,从而更直接地反映两个时间点之间的相关性。
# 编码
# 删除缺失值的行
df = df.dropna()
df.info()

df.dtypes

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf 
import warnings  
warnings.filterwarnings("ignore")

# 绘制 Sales_quantity 列的自相关图  
fig, ax = plt.subplots(figsize=(10, 5))  
plot_acf(df['Sales_quantity'], lags=40, ax=ax)  
plt.title('Autocorrelation Function of Sales_quantity')  
plt.show()  
  
# 绘制 Sales_quantity 列的偏自相关图  
fig, ax = plt.subplots(figsize=(10, 5))  
plot_pacf(df['Sales_quantity'], lags=40, ax=ax)  
plt.title('Partial Autocorrelation Function of Sales_quantity')  
plt.show()

问题4:绘制收入(Revenue)和销售量(Sales_quantity)随Period变化的折线图

#编码
df.dtypes

df.index

# 将索引转换为日期时间类型
df.index = df.index.to_timestamp()

# 确认索引已经转换为日期时间类型
df.index

# 然后再绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['Revenue'], label='Revenue')
plt.plot(df.index, df['Sales_quantity'], label='Sales_quantity')
plt.xlabel('Period')
plt.ylabel('Amount')
plt.title('Revenue and Sales Quantity Over Time')
plt.legend()
plt.show()

问题5:通过3期滚动平均值和标准差,绘制收入和销售量数据折线图,判断其是否平稳

#编码
# 计算3期滚动平均值和标准差
rolling_mean = df.rolling(window=3).mean()
rolling_std = df.rolling(window=3).std()

# 绘制原始数据的折线图
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['Revenue'], label='Revenue')
plt.plot(df.index, df['Sales_quantity'], label='Sales_quantity')

# 绘制滚动平均值和标准差的折线图
plt.plot(rolling_mean.index, rolling_mean['Revenue'], label='Rolling Mean (3 periods)', linestyle='--')
plt.plot(rolling_std.index, rolling_std['Revenue'], label='Rolling Std (3 periods)', linestyle='--')

plt.plot(rolling_mean.index, rolling_mean['Sales_quantity'], label='Rolling Mean (3 periods)', linestyle='--')
plt.plot(rolling_std.index, rolling_std['Sales_quantity'], label='Rolling Std (3 periods)', linestyle='--')

plt.xlabel('Period')
plt.ylabel('Amount')
plt.title('Revenue and Sales Quantity Over Time with Rolling Mean and Standard Deviation')
plt.legend()
plt.show()

时间序列分析3

销售数据分析。

数据:assets/sale_train.csv

数据列:

Date store product number_sold

日期 商店ID 产品ID 销售数量

# 读取数据

df = pd.read_csv('sale_train.csv')  # 读取数据
display( df.sample(5) )
df.info()

问题1:按日期统计销售量,绘制销售数量的折线图,观察是否具备周期性

# 编码
# 将日期列转换为日期时间类型,并将其设置为索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df.head()

df.dtypes

df.index

问题2:将Date列转换为datetime类型,并作为索引。

# 编码
# 按日期统计销售量
sales_by_date = df.groupby(df.index).sum()

# 绘制销售数量的折线图
plt.figure(figsize=(10, 6))
plt.plot(sales_by_date.index, sales_by_date['number_sold'], marker='o')
plt.xlabel('Date')
plt.ylabel('Number of Sales')
plt.title('Sales Quantity Over Time')
plt.grid(True)
plt.show()

问题3:对上一题生成dataframe重新采样(按月和按年)后计算number_sold总量,然后绘制number_sold总量的折线图。

# 编码
# 按月重新采样并计算每月的总销售量
sales_monthly = df.resample('M').sum()

# 按年重新采样并计算每年的总销售量
sales_annually = df.resample('Y').sum()

# 绘制总销售量的折线图
plt.figure(figsize=(8, 6))

# 绘制按月重新采样后的折线图
plt.subplot(2, 1, 1)
plt.plot(sales_monthly.index, sales_monthly['number_sold'], marker='o', color='b')
plt.xlabel('Date')
plt.ylabel('Total Number of Sales')
plt.title('Total Sales Quantity (Monthly)')
plt.grid(True)

# 绘制按年重新采样后的折线图
plt.subplot(2, 1, 2)
plt.plot(sales_annually.index, sales_annually['number_sold'], marker='o', color='g')
plt.xlabel('Year')
plt.ylabel('Total Number of Sales')
plt.title('Total Sales Quantity (Annually)')
plt.grid(True)

plt.tight_layout()
plt.show()

matplotlib绘图题

1. 仿照讲义中例子,采用calendar和matplotlib绘制月历,要实时获取当前年月。

如下图:

import calendar
import matplotlib.pyplot as plt

%matplotlib inline

# 编码
import calendar
import matplotlib.pyplot as plt
import datetime
# 获取 2024 年 4 ⽉的⽇历
cal = calendar.monthcalendar(2024, 4)
# 绘制⽇历
plt.figure(figsize=(12, 12))
plt.imshow(cal, cmap="rainbow")
plt.xlabel('星期')
plt.ylabel('日期')
# 获取当前时间的年和月  
# 获取当前时间  
current_time = datetime.datetime.now()  
  
# 格式化当前时间为“XXXX年XX月”的形式  
current_year_month = "{}年{:02d}月".format(current_time.year, current_time.month)  
  
# 使用格式化后的时间设置图表标题  
plt.title("当前时间: {}".format(current_year_month))
# 标记周末和⼯作⽇
for i in range(len(cal)):
    for j in range(len(cal[0])):
        if j in [0, 6]:
             plt.text(j, i, cal[i][j], color="red", ha='center', va='center')
        else:
             plt.text(j, i, cal[i][j], color="black", ha='center', va='center')
plt.show()

2. 采用matplotlib绘制动画,动态显示按月销量。

每秒更新一次,每次更新时显示下一个月的销售额。在动画中,折线图会随着时间的推移逐渐绘制出来,并在每个点上显示销售月份和销售额。

如下图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

%matplotlib notebook

# 生成日期范围
dates = pd.date_range('2020-01', '2024-04', freq='M')

# 生成销售数据
np.random.seed(2024)
sales_data = pd.DataFrame({
    '日期': dates,
    '销售额': np.random.randint(100, 201, size=len(dates))
})

# 绘制折线图
plt.figure(figsize=(15, 6))
plt.plot(sales_data["日期"], sales_data["销售量"])
plt.xlabel('日期')
plt.ylabel("销售量")
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于杰理AC695蓝牙模式下按键处理函数处理

一、杰理蓝牙模式下又分为SYS_KEY_EVENT和SYS_BT_EVENT。SYS_KEY_EVEN主要是对按键的控制事件,SYS_BT_EVENT是蓝牙模式协议栈状态事件、hci事件、对箱事件。 二、按键通过key_event *key &event->u.key; u定义了一个union事件的联合体,通过按键k…

【C++ STL序列容器】array 数组

文章目录 【 1. 基本原理 】【 2. array 的创建 】2.1 不赋初值2.2 赋默认值2.3 赋指定值 【 3. array 的成员函数 】实例 【 1. 基本原理 】 array 是在 C 普通数组的基础上添加了一些成员函数和全局函数。在使用上,它 比普通数组更 安全,且效率并没…

Web3钱包开发获取测试币-Base Sepolia(二)

Web3钱包开发获取测试币-Base Sepolia(二) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b0c0ac86b04a496087471388532bc54a.png) 基于上篇 Web3钱包开发获取测试币-Polygon Mumbai(一) :https://suwu150.blog.csdn.net/article/details/137949473 我…

呼市经开区建设服务项目水、电能耗监测 数采案例

一、项目背景及需求 项目地点位于内蒙古呼和浩特市,呼市数字经开区建设服务项目。属于企业用能数据采集、能耗监测板块子项目。 针对水、电能耗数据采集,结合现场客观因素制约,数据采集方面存在较大难度。大多数国网电表485接口由于封签限制…

WordPress 告别 MySQL:Docker SQLite WordPress

本篇文章聊聊,如何将这个持续诞生和维护了 21 年的开源软件“脱离数据库”运行,让它能够更加轻量、适合低成本离线运行。 写在前面 2003 年,Michel Valdrighi 基于 b2/cafelog 创建了开源软件 WordPress,并在 GPL 协议下发布。 …

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…

Hadoop大数据处理技术-配置连接篇

​2024/4/17 Hadoop学习前的准备 3)连接虚拟机 上一节配置完成了基础的虚拟机配置及网络配置 下面我们开始建立连接 我们为什么要与虚拟机建立链接呢? 连接虚拟机就好像跟亲友联系一样 总得找个便捷又好用的工具才行 Secure CRT就像是一把能打开通向…

高斯过程回归【详细数学推导】

机器学习笔记 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例】 第八章 主成分分析【PCA降维】 第九章 隐马尔可夫模型 第十章 奇异值分解 第十一章 熵…

AI-数学-高中-39空间向量-2空间向量法(法向量)

原作者视频:【空间向量】【一数辞典】2空间向量法(重要)_哔哩哔哩_bilibili 法向量(高中阶段所有与面的关系,都可以通过法向量去证明和解答): 是空间解析几何的一个概念,垂直于平面…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点,就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱:基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

上市公司-企业数据要素利用水平数据集及参考文献(2010-2022年)

01、数据介绍 企业数据要素利用水平是指企业在其生产经营活动中,对数据的收集、处理、分析和应用的能力及效果。这种利用水平的高低直接反映了企业在数字化时代中的竞争力和创新能力。 本数据参考《中央财经大学学报》史青春(2023)老师的研…

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时,我们用普通的XSSFWorkbook对象写入时会发现,只有在将100w条数据全部加载入内存后才会用write()方法统一写入,这样效率很低,所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

javaWeb项目-网吧网咖管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA简介 JavaSc…

本地环境通过ssh通道连接服务器数据库,实现本地客户端和代码可以访问数据库

使用方法: ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 搭建隧道的账号搭建隧道的ip 可以增加参数-v,输出更多的信息 ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 -v 搭建隧道的账号搭建隧道的ip 有时候,测试环境的数据库不允许…

深度卷积神经网络的整体运行流程(以alexnet为例)

0.基础概念(复习一下) 1.小批量随机梯度下降 目的: 希望找到最佳的参数,使损失函数最小。 使损失函数对w求导(b就是x等于1的w),一个小批次的/eta(学习率)*小批次的平均…

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

目录 UDP协议 UDP协议的报文结构及注意事项 UDP报文结构中的校验和字段 1. 校验和主要校验的内容 2. UDP校验和的实现方式 3. CRC(循环冗余校验)算法 4. MD5(Message Digest Algorithm 5) UDP协议 上一篇文章提过&#xf…

Linux cmake 初窥【1】

1.开发背景 linux 下编译程序需要用到对应的 Makefile,用于编译应用程序,但是 Makefile 的语法过于繁杂,甚至有些反人类,所以这里引用了cmake,cmake 其中一个主要功能就是用于生成 Makefile,cmake 的语法更…

吴恩达深度学习 (week5,6)

文章目录 一、训练开发测试集二、机器学习基础三、 正则化初步介绍四、Dropout 正则化五、其他正则化方法六、归一化输入介绍七、梯度消失与梯度爆炸八、神经网络的权重初始化九、梯度数值逼近和检验十、上述学习总结第一题 划分训练/开发/测试集第二题 开发和测试集分布第三题…

谷粒商城学习笔记

1.系统架构 2.环境准备 21.安装Linux 1.VirtualBox: https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-Win.exe 2.安装 Vagrant 1).Vagrant 下载地址: https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.msi https://www…