📅  最后修改于: 2023-12-03 15:07:30.949000             🧑  作者: Mango
周期图是一种在时间序列分析中常用的工具,它可以帮助我们快速发现时间序列中的周期性变化。在Python中,我们可以使用一些库来制作周期图,例如matplotlib、pandas等等。
在制作周期图之前,我们首先需要准备好数据。以下是一个示例数据集:
import pandas as pd
data = {
'date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07'],
'value': [23, 27, 33, 30, 25, 20, 22]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
我们可以将以上数据集转换为一个时间序列,其中包含了日期和对应的数值。需要注意的是,我们将日期设置为了时间序列的索引。
有了数据之后,我们就可以开始制作周期图了。这里我们使用matplotlib库中的plot()方法来绘制折线图,并使用pandas库中的date_range()方法来生成日期序列:
import matplotlib.pyplot as plt
# 生成日期序列
start_date = df.index.min()
end_date = df.index.max()
dates = pd.date_range(start_date, end_date, freq='D')
# 绘制折线图
plt.plot(dates, df['value'])
plt.show()
以上代码将生成一个简单的折线图,如下所示:
为了更好地展示数据,我们可以在周期图中增加一些周期线,以便更好地理解周期性的变化。下面的代码展示了如何绘制一个月的周期线:
import numpy as np
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
# 绘制折线图
plt.plot(dates, df['value'])
# 绘制月周期线
ymin, ymax = plt.ylim()
for year in range(start_date.year, end_date.year+1):
for month in range(1, 13):
date = pd.to_datetime('{}-{:02d}-01'.format(year, month))
if start_date <= date <= end_date:
plt.plot([date, date], [ymin, ymax], 'b--', alpha=0.5)
plt.show()
运行以上代码后,会生成一个带浅蓝色虚线的周期图,如下所示:
在周期图上,我们还可以增加均值线和峰值线,以方便更好地分析数据。下面的代码展示了如何绘制均值线和峰值线:
# 计算均值和峰值
mean = df['value'].mean()
maximum = df['value'].max()
# 绘制折线图
plt.plot(dates, df['value'])
# 绘制月周期线
ymin, ymax = plt.ylim()
for year in range(start_date.year, end_date.year+1):
for month in range(1, 13):
date = pd.to_datetime('{}-{:02d}-01'.format(year, month))
if start_date <= date <= end_date:
plt.plot([date, date], [ymin, ymax], 'b--', alpha=0.5)
# 绘制均值线和峰值线
plt.axhline(mean, color='r', linestyle='--', label='Mean')
plt.axhline(maximum, color='g', linestyle='--', label='Maximum')
plt.legend()
plt.show()
运行以上代码后,会生成一个带红色和绿色虚线的周期图,如下所示:
通过制作周期图,我们可以更直观地了解时间序列中的周期性变化。在Python中,我们可以使用matplotlib和pandas等库来制作周期图,并且可以根据需要增加周期线、均值线和峰值线等内容,以更好地呈现数据。