如何使用 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()

输出

*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,我们可以生成此类图表,如下所示

示例

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()

输出

绘制散点图

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

示例

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 和 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 和 Matplotlib 中可用于可视化时间序列数据的各种图表。我们涵盖了面积图、散点图、条形图和折线图。每种图表类型都有其独特的用途,可以为您的数据集提供宝贵的见解。

请探索庞大的 pandas 库,查看它提供的时序分解、滚动均值以及其他分析和可视化工具。Python 及其库的功能使其成为开发人员和分析师的首选语言。

更新于: 2023年8月29日

51 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告