数据可视化(八):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.dtypesfrom 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.dtypesdf.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.dtypesdf.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()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么将“学生信息表.csv”由CSV格式转换成JSON格式

怎么将“学生信息表.csv”由CSV格式转换成JSON格式 将CSV文件转换为JSON格式,你可以使用Python的内置库如csv和json。下面是一个简单的示例,说明如何执行此转换: 首先,确保你已经安装了Python。 创建一个Python脚本(…

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格61元一年,2核2G4M价格99元一年、135元15个月、540元三年,2核4G5M带宽165元一年、252元15个月、756元3年&a…

动态规划(Dynamic Programming,简称 DP)

动态规划(Dynamic Programming,简称 DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。通过保存和重用已经解决的子问题的解,来避免重复计算,从而大…

mybatis使用xml中的if-else/choose

最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明 背景: 有一个引用类,假设叫 Student public class Student {private String name; private String address; private Integer yn;}现在我们查询条件也被封装成一个…

2024 应届校招经验分享(非互联网篇)

📢📢📢 2024年应届毕业生,浙江大学计算机研究生。自23年秋招开始至今,博主先后拿到了互联网行业、机械制造行业、国企央企、高校体制等多家企业和单位的数十个Offer,了解多行业中的计算机求职方向&#xff…

Java转go,我用了12小时,10小时在解决环境问题

Part1 问题背景 作为一个资深的Java开发者,我深知面向对象的高级语言,语法是不用学的。需要的时候搜索就可以了,甚至可以用ChatGPT来写。 之前我做一个安全多因素校验服务。因为是临时服务,扩展性上基本没有要求,为了快…

Vulnhub靶机 DC-6 打靶实战 详细渗透测试过程

Vulnhub靶机 DC-6 详细渗透流程 打靶实战 目录 Vulnhub靶机 DC-6 详细渗透流程 打靶实战一、将靶机导入到虚拟机当中二、渗透测试主机发现端口扫描信息探测web渗透目录爆破爆破后台密码反弹shell搜集有价值信息SSH远程登录提权反弹jens用户权限的shell 提权利用 一、将靶机导入…

stable diffusion本地部署@win10

一键无脑安装stable-diffusion-webui stable diffusion是当前非常出色的文生图模型,要优于以前gan文生图模型。现在有了stable-diffusion-webui软件,可以一键安装,大大简化了操作难度。本文档就是stable-diffusion-webui在windows 10上的安装…

openfeign整合sentinel进行降级

pom.xml <!--nacos-服务注册发现--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--添加openfeign依赖--> <dependency&g…

誉天教育新班上新,免费试听!

数通HCIP 周末班 2024/4/20 阮老师 RHCE 周末班 2024/4/20 徐老师 云计算直通车 周末班 2024/4/20 田老师 欧拉HCIE 周末班 2024/4/20 晏老师 存储HCIE 晚班 2024/4/22 高老师 云服务直通车 周末班 2024/4/27 高老师 安全HCIE 晚班 2024/5/6 胡老…

#天空星定时器点灯

一、定时器信息 STM32F407VET6一共有14个定时器&#xff0c;包括2个高级控制定时器、8个通用定时器、2个基本定时器和2个看门狗定时器。 高级定时器&#xff08;TIMER1和TIMER8&#xff09;是四通道定时器&#xff0c;支持输入捕获和输出比较。可以产生PWM信号控制电机和电源管…

基于springboot实现的摄影跟拍预定管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

嵌入式Linux开发实操(十九):Nand Flash驱动的实现

前言: nand flash从硬件连接上看,如下图,有专用接口,数据线有8或16根。 Nand Flash按每个存储单元Cell内存储比特个数不同可分为 SLC(Single-Level Cell存储1个比特)、MLC(Multi-Level Cell存储2个比特) 、 TLC(Triple-Level Cell存储3个比特)、QLC(Quad-Level C…

mysql基础9——时间函数

统计一天中每小时的销售数量和销售金额 将数据按照小时进行分组统计 关键就是把交易时间的小时部分提取出来 使用extract()和hour() 使用extract()获取小时的值 extract(type from date) 表示从日期时间数据date中抽取type指定的部分 select extract(hour from b.transd…

❤️新版Linux零基础快速入门到精通——第三部分❤️

❤️新版Linux零基础快速入门到精通——第三部分❤️ 非科班的我&#xff01;Ta&#xff01;还是来了~~~3. Linux权限管控3.1 认知root用户3.1.1 Switch User——su3.1.2 sudo命令3.1.3 为普通用户配置sudo认证 3.2 用户和用户组3.2.1 用户、用户组3.2.2 用户组管理3.2.3 用户管…

突破编程_前端_SVG(元素碰撞检测)

1 什么是碰撞检测 SVG 元素的碰撞检测&#xff0c;顾名思义&#xff0c;就是检测两个或多个 SVG 图形元素是否发生相交或重叠的过程。这在许多场景中都非常有用&#xff0c;例如游戏开发、动画设计、交互式图表等&#xff0c;需要精确判断图形元素之间的位置关系。 SVG 元素的…

声明式事务

文章目录 1.事务分类1.传统方式解决事务2.声明式事务 2.声明式事务案例1.需求分析2.解决方案分析3.数据表创建4.编写GoodsDao.java1.编写配置文件JdbcTemplate_ioc.xml2.单元测试 5.编写GoodsService.java6.配置事务管理器JdbcTemplate_ioc.xml7.进行测试 3.debug事务管理器Dat…

【Linux】在ubuntu快速搭建部署K8S(1.27)集群

ubuntu快速安装K8s1.27 &#xff08;一&#xff09;环境说明1.硬件环境2.Ubuntu环境设置 &#xff08;二&#xff09;安装配置containerd1.安装2.配置3.启动 &#xff08;三&#xff09;所有节点操作1.安装runc和cni2.节点系统设置、关闭临时分区3.修改内核参数4.安装 kubeadm、…

力扣爆刷第124天之回溯五连刷

力扣爆刷第124天之回溯五连刷&#xff08;分割回文、复原IP、子集&#xff09; 文章目录 力扣爆刷第124天之回溯五连刷&#xff08;分割回文、复原IP、子集&#xff09;一、131. 分割回文串二、93. 复原 IP 地址三、78. 子集四、90. 子集 II五、91. 非递减子序列 一、131. 分割…

稀碎从零算法笔记Day56-LeetCode:组合总和 Ⅳ

题型&#xff1a;DP、数组 链接&#xff1a;377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的…