如何在 pandas 中使用时间序列?
在均匀间隔的时间段内,变量的有序值流称为时间序列。时间序列可用于识别导致观察数据的潜在因素和结构,并且在您拟合模型后,可以继续进行预测和监控。时间序列的一些应用是股票市场分析、估计收益率、研究 COVID19 等疾病的传播等。我们可以根据特定条件对特定数据使用时间序列。在本文中,让我们演示如何使用时间序列数据。
单击此处查看和下载数据集。
在 Pandas 中使用时间序列
所有示例均基于 covid_19 数据。导入 CSV 文件后,“ObservationDate”和“Last Update”日期使用 pd.to_datetime() 方法转换为日期时间。
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv', encoding='UTF-8')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
print(df)
Python3
df[df['ObservationDate']<='2021']
Python3
df[df['ObservationDate'] == '2020-06']
Python3
df[df['Deaths'] == max(df['Deaths'])]
Python3
sum(df[df['ObservationDate'] == '2021-05-20']['Deaths'])
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
print(df.loc['2020-01'])
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
# observations taken from may 20th to may 21st of 2021
df.loc['2021-05-20':'2021-05-21']
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
print(df.groupby(level=0).count())
Python3
# import packages and libraries
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# reading the dataset
df = pd.read_csv('covid_19_data.csv', encoding='UTF-8')
# convert Last update column to datetime
df['Last Update'] = pd.to_datetime(df['Last Update'])
# setting index
df.set_index('Last Update', inplace=True)
# plotting figure
df.plot.line()
输出:
提取 2021 年之前的所有观测值。检索到 192466 行。
Python3
df[df['ObservationDate']<='2021']
输出:
检索特定日期的观察结果。在此示例中,我们将日期设置为“2020-06”。
Python3
df[df['ObservationDate'] == '2020-06']
输出:
检索最大死亡人数最高的日期。根据我们的数据,英国在 2021 年 5 月 29 日记录了最大死亡人数。
Python3
df[df['Deaths'] == max(df['Deaths'])]
输出:
“2021-05-20”所有死亡人数的总和。
Python3
sum(df[df['ObservationDate'] == '2021-05-20']['Deaths'])
输出:
3430539.0
我们可以将时间序列列设置为 datetime 并将它们设置为数据帧的索引,以便轻松检索我们需要的信息,而不是努力检索数据。在此示例中,ObservationDate 设置为数据帧的索引。通过使用 df.loc() 我们可以直接按日期索引和访问所需的信息。 df.loc['2020-01'] 检索该日期的所有数据。输出显示有 513 个观测值。
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
print(df.loc['2020-01'])
输出:
使用索引检索 2021 年 5 月 20 日至 5 月 21 日的观察结果。
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
# observations taken from may 20th to may 21st of 2021
df.loc['2021-05-20':'2021-05-21']
输出:
在此示例中, df.groupby() 用于根据更新日期对所有观察结果进行分组并对其进行计数。例如,第一行表示“2020-01-22”有 40 个观察值。
Python3
# import packages
import pandas as pd
# read csv file
df = pd.read_csv('covid_19.csv')
df['ObservationDate'] = pd.to_datetime(df['ObservationDate'])
df['Last Update'] = pd.to_datetime(df['Last Update'])
df = df.set_index('ObservationDate')
print(df.groupby(level=0).count())
输出:
将数据帧的索引设置为时间序列后,我们使用 df.plot.line() 方法通过单线图可视化所有信息。时间序列数据可以帮助我们做出好的结论。
Python3
# import packages and libraries
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# reading the dataset
df = pd.read_csv('covid_19_data.csv', encoding='UTF-8')
# convert Last update column to datetime
df['Last Update'] = pd.to_datetime(df['Last Update'])
# setting index
df.set_index('Last Update', inplace=True)
# plotting figure
df.plot.line()
输出: