处理时间序列数据

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将指导你使用 Python 包 Pandas 处理时间序列数据。在本教程中,我们将使用空气质量数据。你将学习如何将字符串转换为日期时间对象,对这些日期时间对象执行操作,将时间序列重采样为另一个频率等等。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库并加载数据

首先,我们需要导入所需的 Python 库并加载空气质量数据。数据将被读入一个 pandas DataFrame,它是一种二维带标签的数据结构。

## 导入必要的库
import pandas as pd
import matplotlib.pyplot as plt

## 加载空气质量数据
air_quality = pd.read_csv("data/air_quality_no2_long.csv")

## 将 "date.utc" 列重命名为 "datetime"
air_quality = air_quality.rename(columns={"date.utc": "datetime"})

将字符串转换为日期时间对象

“datetime”列中的日期目前是字符串。我们要将这些字符串转换为日期时间对象,以便于操作。

## 将“datetime”列转换为日期时间对象
air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])

为测量月份添加新列

现在,我们想在数据框中添加一个新列,该列只包含每次测量的月份。这可以使用 dt 访问器来实现。

## 为每次测量的月份添加新列
air_quality["month"] = air_quality["datetime"].dt.month

计算一周中每天的平均二氧化氮浓度

现在我们可以计算每个测量地点一周中每天的平均二氧化氮浓度。这可以使用 groupby 方法来完成。

## 计算一周中每天的平均二氧化氮浓度
average_NO2 = air_quality.groupby([air_quality["datetime"].dt.weekday, "location"])["value"].mean()

绘制一天中每小时的平均二氧化氮值

我们还可以绘制一天中每小时的平均二氧化氮值。这可以使用 plot 方法来完成。

## 绘制一天中每小时的平均二氧化氮值
fig, axs = plt.subplots(figsize=(12, 4))
air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean().plot(kind='bar', rot=0, ax=axs)
plt.xlabel("Hour of the day")
plt.ylabel("$NO_2 (µg/m^3)$")

重采样时间序列数据

resample 方法是改变时间序列数据频率的一种强大方式。在这里,我们将把当前的每小时时间序列数据聚合为每个测量站的每月最大值。

## 通过透视数据,日期时间信息成为了表格的索引。
no_2 = air_quality.pivot(index="datetime", columns="location", values="value")
no_2.head()

## 创建一个从 5 月 20 日到 5 月 21 日结束的不同站点值的图表
no_2["2019-05-20":"2019-05-21"].plot()

## 重采样时间序列数据
monthly_max = no_2.resample("M").max()
monthly_max

总结

在这个实验中,我们学习了如何使用 pandas 库在 Python 中处理时间序列数据。我们加载了空气质量数据,将日期字符串转换为日期时间对象,计算了一周中每天的平均二氧化氮浓度,绘制了一天中每小时的平均二氧化氮值,并将时间序列数据重采样到不同的频率。