📜  周期图 - Python (1)

📅  最后修改于: 2023-12-03 15:07:30.949000             🧑  作者: Mango

周期图 - Python

周期图是一种在时间序列分析中常用的工具,它可以帮助我们快速发现时间序列中的周期性变化。在Python中,我们可以使用一些库来制作周期图,例如matplotlib、pandas等等。

1. 准备数据

在制作周期图之前,我们首先需要准备好数据。以下是一个示例数据集:

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)

我们可以将以上数据集转换为一个时间序列,其中包含了日期和对应的数值。需要注意的是,我们将日期设置为了时间序列的索引。

2. 制作周期图

有了数据之后,我们就可以开始制作周期图了。这里我们使用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()

以上代码将生成一个简单的折线图,如下所示:

周期图

3. 增加周期线

为了更好地展示数据,我们可以在周期图中增加一些周期线,以便更好地理解周期性的变化。下面的代码展示了如何绘制一个月的周期线:

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

运行以上代码后,会生成一个带浅蓝色虚线的周期图,如下所示:

周期图

4. 增加均值线和峰值线

在周期图上,我们还可以增加均值线和峰值线,以方便更好地分析数据。下面的代码展示了如何绘制均值线和峰值线:

# 计算均值和峰值
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()

运行以上代码后,会生成一个带红色和绿色虚线的周期图,如下所示:

周期图

5. 结论

通过制作周期图,我们可以更直观地了解时间序列中的周期性变化。在Python中,我们可以使用matplotlib和pandas等库来制作周期图,并且可以根据需要增加周期线、均值线和峰值线等内容,以更好地呈现数据。