Python 如何制作带有滚动平均的时间序列图
在本文中,我们将介绍两种使用滚动平均制作Python时间序列图的方法。这两种方法都利用了Matplotlib、Pandas和Seaborn等众所周知的库,这些库在数据操作和可视化方面具有强大的能力。遵循这些方法将能够高效地可视化具有滚动平均的时间序列数据,并了解其一般行为。
两种方法都使用了一系列类似的顺序步骤,包括加载数据、将日期列转换为DateTime对象、计算滚动平均值和生成图表。主要区别在于用于生成图表的库和函数的选择。您可以自由选择最适合您的知识和喜好的策略。
方法
- 使用Pandas和Matplotlib。
-
使用Seaborn和Pandas。
注意:下面是使用的数据示例 –
根据需要可以更改文件名。这里的文件名是dataS.csv。
date,value
2022-01-01,10
2022-01-02,15
2022-01-03,12
2022-01-04,18
2022-01-05,20
2022-01-06,17
2022-01-07,14
2022-01-08,16
2022-01-09,19
让我们来详细检查这两种策略−
方法1:使用Pandas和Matplotlib
这种方法使用Pandas和Matplotlib库绘制时间序列图。在流行的图表库Matplotlib中,有大量的工具可用于开发静态、动画和交互式可视化。另一方面,强大的数据操作库Pandas提供了用于处理结构化数据(包括时间序列数据)的有用数据结构和函数。
步骤
步骤1 −导入matplotlib.pyplot进行数据可视化以及导入pandas进行数据操作。
步骤2 −使用pd.read_csv()从CSV文件中加载时间序列数据。假设文件名为”dataS.csv”。
步骤3 −使用pd.to_datetime()将DataFrame的”date”列转换为DateTime对象。
步骤4 −使用data.set_index(‘date’, inplace=True)将列”date”作为DataFrame的索引。
步骤5 −确定滚动平均值计算的窗口大小。根据期望的窗口大小调整window_size变量。
步骤6 −使用data[‘value’].rolling(window=window_size).mean()计算”value”列的滚动平均值。
步骤7 −使用plt.figure()创建图形。根据需要调整figure的大小,例如figsize=(10, 6)。
步骤8 −使用plt.plot(data.index, data[‘value’], label=’Actual’)绘制实际值。
步骤9 −使用plt.plot(data.index, rolling_avg, label=’Rolling Average’)绘制滚动平均值。
步骤10 −使用plt.xlabel()和plt.ylabel()启用x轴和y轴的标签。
步骤11 −使用plt.title()启用图的标题。
步骤12 −使用plt.legend()显示绘制线的图例。
步骤13 −使用plt.grid(True)在图上显示网格。
步骤14 −使用plt.show()显示图。
程序
#pandas library is imported
import pandas as pd
import matplotlib.pyplot as plt
# Load the time series data
data = pd.read_csv('dataS.csv')
# Transform the column date to a datetime object
data['date'] = pd.to_datetime(data['date'])
# Put the column date column as the index
data.set_index('date', inplace=True)
# Calculate the rolling average
window_size = 7 # Adjust the window size as per your requirement
rolling_avg = data['value'].rolling(window=window_size).mean()
# Create the plot
plt.figure(figsize=(10, 6)) # Adjust the figure size as needed
plt.plot(data.index, data['value'], label='Actual')
plt.plot(data.index, rolling_avg, label='Rolling Average')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Plot with Rolling Average')
plt.legend()
plt.grid(True)
plt.show()
输出
方法2:利用Seaborn和Pandas
这介绍了使用Seaborn,一个基于Matplotlib的高级数据可视化框架。Seaborn是一个优秀的选择,用于开发外观吸引人的时间序列图,因为它提供了一个直观和吸引人的统计图形界面。
步骤1 − 导入seaborn,pandas以及matplotlib.pyplot库。
步骤2 − 使用pd.read_csv()函数从’dataS.csv’文件中获取时间序列数据,并将其存储在data变量中。
步骤3 − 使用pd.to_datetime()函数将数据DataFrame中的’date’列转换为datetime对象。
步骤4 − 使用set_index()方法将列date作为DataFrame的索引。
步骤5 − 为滚动平均计算定义窗口大小。根据需要调整window_size变量。
步骤6 − 使用数据DataFrame的’value’列上的rolling()函数和指定的窗口大小来计算滚动平均值。
步骤7 − 使用plt.figure(figsize=(10, 6))创建一个具有特定大小的新图。
步骤8 − 使用sns.lineplot()和数据DataFrame中的’value’列来绘制实际的时间序列数据。
步骤9 − 使用sns.lineplot()和rolling_avg变量来绘制滚动平均值。
步骤10 − 使用plt.xlabel()设置x轴标签。
步骤11 − 使用plt.ylabel()设置y轴标签。
步骤12 − 使用plt.title()设置图的标题。
步骤13 − 使用plt.legend()显示图例。
步骤14 − 使用plt.grid(True)在图上显示网格线。
步骤15 − 使用plt.show()显示图。
示例
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Step 1: Fill the time series data with the csv file provided
data = pd.read_csv('your_data.csv')
# Transform the column date to the object of DateTime
data['date'] = pd.to_datetime(data['date'])
# Put the column data as the index
data.set_index('date', inplace=True)
# Adjust the window size as per your requirement
# and then compute the rolling average
window_size = 7
# rolling_avg = data['value'].rolling(window=window_size).mean()
# Build the plot utilizing Seaborn
plt.figure(figsize=(10, 6))
# Adjust the figure size as needed
sns.lineplot(data=data['value'], label='Actual')
sns.lineplot(data=rolling_avg, label='Rolling Average')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Plot with Rolling Average')
plt.legend()
plt.grid(True)
plt.show()
输出
结论
通过使用Python模块Pandas和Matplotlib,我们可以轻松制作滚动平均时间序列图。由于这些可视化图表,我们可以成功地分析时间相关的数据中的趋势和模式。清晰的代码概述了如何导入数据、转换日期列、计算滚动平均值以及可视化结果。这些方法使我们能够理解数据的行为并得出明智的结论。金融、经济和气候研究都使用时间序列分析和可视化作为有效工具。