如何使用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及其库的强大使其成为开发人员和分析师调用的语言。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程