如何使用Pandas绘制时序图表?




如何使用Pandas绘制时序图表?

在我们的日常生活中,我们经常会遇到各种交互式图形数据。在我们的工作生活或业务中,我们会遇到多个数据集或图表,帮助我们做出决策、进行未来预测等等。我们日常遇到的一类数据集就是时间序列数据。

在一定时间间隔内收集的一系列数据或数据点,这样的时间绑定数据集称为时间序列数据。这些数据集在固定的时间间隔内收集。一个简单的例子可以是我们的天气数据,或者是心电图报告的数据等等。这些数据集都是按时间索引和记录的。

分析这些数据并预测未来或当前情况是这些数据的主要目的。这使得它成为最广泛使用的数据形式之一。



在本文中,我们将尝试找出我们可以通过使用Python中非常流行的Pandas库将其绘制成图表的方式。我们可以通过多种方式实现这些数据集,并对数据获得有价值的洞察。通过图表可视化基于时间的数据对于获得洞察和了解时间数据集中的趋势至关重要。

入门

首先,我们需要确保我们的系统安装了Python(推荐版本为3.xx或更高版本)。因为我们将使用Pandas库和Matplotlib,所以我们需要为Python准备这些包。一个简单的过程就是打开一个cmd窗口并运行以下命令:

pip install pandas
pip install matplotlib

在代码中稍后导入这些软件包,我们只需要使用import关键词,如下所示:

import pandas as pd
import matplotlib.pyplot as plt

加载时间序列数据

现在,在绘制时间序列数据之前,我们需要数据。数据可以来自外部源,也可以通过Pandas DataFrame进行创建和加载。重要的是要确保数据包含表示日期和时间信息(时间序列数据)的特定列。您可以从各种源(如.csv文件、Web API或数据库)加载数据到数据框中。

如果我们有一个名为data.csv的CSV文件,其中包含时间序列数据,我们可以将其加载为:

data = pd.read_csv('data.csv', parse_dates=['timestamp_column'])

确保用实际的文件路径替换’data.csv’,并用包含时间信息的列的名称作为’timestamp_column’,根据您的系统上的名称或路径。

将时间戳设置为索引

为了确保时间序列数据集的正确处理,将时间戳列设置为DataFrame的索引非常关键。这一步基本上是让Pandas知道我们正在处理时间序列数据。您可以通过一行代码来设置时间戳:

data.set_index('timestamp_column', inplace=True)

请记得将‘timestamp_column’替换为包含时间信息的列名。

使用示例数据集

为避免混淆,本文将创建一个数据集,并且所有的结果主要都基于这个数据集。这意味着用于演示绘图的实际代码从这里开始。我们将创建一个包含10行4列的数据集。创建方法如下:

import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
print(dataframe)

输出

A     B     C
Date                        
2022-01-01   302   849   715
2022-02-01   404  1488   355
2022-03-01   710   912   284
2022-04-01   484   855   543
2022-05-01   641   445   112
2022-06-01   669   752  1052
2022-07-01   897   699   891
2022-08-01   994  1045   776
2022-09-01  1073  1232   924
2022-10-01   944   974   786

使用pandas绘制时间序列数据

有几种方法可以使用pandas在python中实现或绘制这些数据集。我们有折线图、条形图、面积图和散点图等等。

让我们来看一些常用的绘图方法:

绘制折线图

这是一种表示时间序列数据的常见方式。它表示两个轴X和Y之间的关系,通过连接的线显示数据点。



要使用Pandas和Matplotlib创建一个基本的折线图,请使用以下代码:

import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()

输出

如何使用Pandas绘制时序图表?

  • figsize决定图表的大小,可以通过更改xlabel和ylabel的值来相应地设置标签。

绘制条形图

条形图是用矩形条形比例表示相应值的数据的图形表示。它更适合代表处理分类或离散值的时间序列数据。一条轴表示比较类别,另一条轴表示相应值。要创建条形图,请使用以下代码:

示例

import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='bar', figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()

输出

如何使用Pandas绘制时序图表?

*这只是一个示例数据框的表示。

绘制面积图

面积图用于可视化不同变量随时间的大小和比例。它们是通过填充线图下方的区域来创建的。使用pandas,我们可以生成这样的图:

示例

import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='area', figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()

输出

如何使用Pandas绘制时序图表?

绘制散点图

散点图对于理解两个连续变量之间的关系非常有效。它们帮助我们从数据集中理解趋势、相关性和聚类。从给定数据集生成散点图的简单语法如下:

示例

import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='scatter', x='A', y='B', figsize=(10, 6))
plt.title('Scatter Plot')
plt.xlabel('A')
plt.ylabel('B')
plt.show()

输出

如何使用Pandas绘制时序图表?

自定义时间序列图

Pandas和Matplotlib为我们提供了灵活性,我们可以自定义我们的时间序列图。您可以调整线条样式、标记样式、颜色方案和轴格式等方面。

让我们快速探索一些自定义选项,我们将尝试进行一些简单的更改:

例子

import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01',       '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855,        445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776,      924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(figsize=(10, 6), linewidth=2, linestyle='--', marker='o', markersize=5, color='red')
plt.title('Customized Timeseries Plot')
plt.xlabel('Time')
plt.ylabel('Value')
plt.grid(True)  # Add grid lines
plt.legend(['Data'], loc='upper right')  # Add legend
plt.show()

输出

如何使用Pandas绘制时序图表?

*我们在这里定制了线宽、线条样式、标记样式、标记大小、颜色、网格线和图例

结论

时间序列数据非常重要,被广泛用于研究和分析。Pandas使我们有能力可视化和分析这些数据集,以获得有意义的结果。

在本文中,我们探索了Pandas和Matplotlib中可用的各种图表绘制方法,用于可视化时间序列数据。我们涵盖了面积图、散点图、条形图和折线图。每种图表类型都有独特的目的,并能为您的数据集提供很好的洞察。



请探索庞大的pandas库,了解时间序列分解、滚动均值和许多分析和可视化工具。Python及其库的强大使其成为开发人员和分析师调用的语言。



Python 精选笔记
使用Python中的Whoosh库开发文本搜索引擎使用Python和scikit-learn开发机器学习模型使用Python和Plotly Dash创建基于Web的数据可视化仪表板使用Python控制树莓派GPIO引脚使用Python和Pandas库构建股票价格预测模型如何在Python中解析XML并计算特定节点属性的实例?如何在Python中解析本地HTML文件?如何按多列对PySpark DataFrame进行排序?如何在Pygame中移动游戏角色?如何在Python中同时打开两个文件?如何使用Python移动文件夹及其子文件夹的列表?如何使用Python将多个文件夹合并成一个文件夹?如何使用Python将多个Excel文件合并成一个单一文件?如何使用Python Pandas按照共同的键合并多个TSV文件?如何使用PIL将透明的PNG图片与另一张图片合并?Python中嵌套函数是如何工作的?Python中的全局变量和局部变量?在Python函数中如何使用全局变量?如何从Python对象中获取源代码?如何在Python中返回一个函数?如何在Python中安装matplotlib?Python - 分割包含散乱字符的字符串Python - 记录列表XORPython – 向记录的末尾添加数据Python - 键值大于K的记录在Python中垂直打印列表Python - 列表中字符串平均长度Python列表中的交替循环Python程序实现混淆词游戏Python-记录联合Python程序计算列表中元组的重复项Python程序:将字符串的字符转换为相反的大小写Python - 打印给定年份列表中的闰年数量Python - 打印所有子列表中的共同元素Python - 删除嵌套列表中的所有元素如何在Python列表中检查空格?在Python中引发异常到另一个异常Python字符串中的范围复制Python程序计算包含列表的列表中列表的数量修改给定Python列表中的重复值Python - 检查元素是否在指定范围内出现从Python的元组列表中删除所有字符串如何使用Pygame添加颜色呼吸效果?如何在Bokeh中添加颜色条如何在Bokeh中添加颜色选择器?使用Python程序显示带有星边框的数字半菱形图案Python使用ipaddress模块确定给定的IPv4地址是否为保留地址使用ipaddress模块的Python程序来确定给定的IP地址是公网还是私网Python程序通过平方和连接给定数字的奇数位数来创建一个OTPPython程序创建以零为中心的列表Python程序计算字符串中的字符数Python程序将米转换为码,反之亦然Python程序:统计文本文件中的元音、行数和字符数Python程序计算文本文件中的单词数量Python程序,用于计算文本文件中空格的数量将字典的值转换为字符串的Python程序Python程序将浮点数转换为指数Python程序将整数转换为指数Python程序将整数转换为罗马数字将整数列表转换为字符串列表的Python程序Python程序将XML转换为字典Python程序:通过重复键对应的值次数将字典转换为列表将Dict of list转换为CSV的Python程序使用正则表达式统计Python程序中大写字母、小写字母、特殊字符和数字值的个数Python元组的并集Python - 嵌套和混合列表中的类型转换Python - 将列表转换为单值列表的元组如何在Python中打印上标和下标?如何在Python中打印多个参数?如何在Plotly-Python中将图例定位在图表内部?如何使用Pandas绘制时序图表?如何使用SciPy在Python中绘制Ricker曲线?如何在Python列表中删除True值?如何使用Python将字典的值转换为绝对值?如何使用Python将字典转换为K个大小的字典?如何使用Python将浮点数舍入到2位小数?如何在Python中将Excel转换为CSV如何在Python中对元组进行索引和切片?如何在Python中判断一个对象是否有属性?在Python中创建实例对象如何使用Python获取城市的经纬度?如何在Python中获取整数输入?如何交换给定 NumPy 数组的列?如何使用NumPy抑制对小数的科学计数法使用?如何使用Python将XML数据存储到MySQL数据库中?如何在Pandas DataFrame中减去两列?如何在Pandas DataFrame中标准化数据?如何堆叠多个Pandas DataFrames?如何使用scikit-learn的train_test_split()函数拆分数据集如何在Python中分割数据以进行训练和测试,而不使用Sklearn在Python set中找到最大值和最小值Python程序:找到长方体的体积、表面积和空间对角线如何在Python程序中获取字符串的K个可能切片如何使用Altair在Python中制作密度图?生成一次性密码(OTP)的Python程序Python程序:找出数组中可被给定数整除的元素的XOR寻找巨大最大公约数(Jumbo GCD)子数组的Python程序如何在OpenCV Python中查找图像轮廓的边界矩形?如何在Python脚本所在的目录中打开文件?如何在Anaconda中安装Python包?如何在OpenCV Python中旋转图像?如何给定完整路径导入Python模块?如何在Python中从另一个函数调用变量?使用Python的Matplotlib在X轴上绘制日期如何在Python中不使用math模块进行平方根运算?如何在Python Tkinter中给Frame添加边框?如何从Python函数返回一个字典?Python程序获取元组中的第一个和最后一个元素如何求一个Python字典的值的总和?Python Pandas - 查找列的最大值并返回其对应的行值机器人流程自动化 - 简介机器学习中的逻辑回归损失函数如何从Python日期中减去一天?将物联网和机器学习相结合,使我们的未来更智能机器学习中的Boosting | Boosting和AdaBoost如何在Python中将时间戳字符串转换为datetime对象?如何在Python中将变量名转换为字符串?什么是Python中的.pyc文件?Python - 检查列表中的所有元素是否相同如何在Python Plotly中设置Y轴的范围?如何将Python日期转换为Unix时间戳?Python中的Turtle绘图编程如何在Python中的给定位置插入一个对象到列表中?如何在Python中进行日期验证?如何使用Python将两个图并排显示?在Python中的方法和函数之间的区别Python中的PYTHONPATH环境变量是什么?如何对Python日期字符串列表进行排序?在Python的Pandas中向现有的DataFrame中添加新列如何将Python元组转换为字典?Python - 使用Pandas读取没有标题的csv文件?如何使用OpenCV Python在图像中检测矩形和正方形?如何使用OpenCV在Python中改变图像的对比度和亮度?如何在Python中将日期时间转换为UTC时间戳?如何列出Python模块中的所有函数?Python程序查找字符串中的所有重复字符使用Python进行文件搜索如何在Python Tkinter中更改按钮大小?如何在Python shell中了解/更改当前目录?如何在Python中检查一个字符是否为大写字母?如何在OpenCV Python中对图像进行归一化?