Skip to content

时间序列数据

ydata-profiling 可以用于时间序列数据的快速探索性数据分析(EDA)。这对于快速理解时间依赖变量的行为非常有用,例如时间图、季节性、趋势、平稳性和数据间隙。

结合分析报告的比较功能,您能够比较时间序列数据的演变和行为,特别是时间序列特定的统计数据,如PACF和ACF图。它还提供了时间序列中间隙的识别,这些间隙可能是由缺失值或时间索引中缺少条目引起的。

时间序列EDA教程

想学习如何解读时间序列分析报告吗?请查看这里的博客内容

您可以在我们的示例文件夹中找到包含完整代码的Jupyter笔记本


时间序列分析

时间序列分析报告

分析时间序列数据集

以下语法可用于生成分析报告,假设数据集包含时间依赖特征:

设置时间序列分析的配置
import pandas as pd

from ydata_profiling.utils.cache import cache_file
from ydata_profiling import ProfileReport

file_name = cache_file(
    "pollution_us_2000_2016.csv",
    "https://query.data.world/s/mz5ot3l4zrgvldncfgxu34nda45kvb",
)

df = pd.read_csv(file_name, index_col=[0])

# 过滤时间序列以分析单个站点
site = df[df["Site Num"] == 3003]

# 将tsmode设置为True以自动识别时间序列变量
# 提供列名以确定时间序列的时间顺序
profile = ProfileReport(df, tsmode=True, sortby="Date Local", title="Time-Series EDA")

profile.to_file("report_timeseries.html")

要生成时间序列报告,需要将ts_mode设置为True。如果设置为True,将根据自相关性的存在自动识别具有时间依赖性的变量。时间序列报告使用sortby属性对数据集进行排序。如果未提供,则假定数据集已经排序。 您可以通过设置x配置来设定检测相关性的水平,以应用时间序列验证。

警告和验证

针对时间序列分析,ydata-profiling的警告家族新增了两个特定警告:NON_STATIONARYSEASONAL

平稳性

在时间序列分析领域,平稳时间序列是指统计特性(如均值、方差和自相关性)随时间保持不变的数据集。这一特性对于许多时间序列预测和建模技术至关重要,因为它们通常假设基础数据是平稳的。平稳性通过简化建模过程,使其更容易检测模式和趋势。

ydata-profiling的平稳性警告基于增强迪基-福勒(ADF)测试。然而,您应始终结合此警告的输出与时间序列行为的视觉检查,并搜索滚动统计分析的方差。

季节性

季节性时间序列是一种特定类型的时间序列数据,它在固定间隔内表现出重复的模式或波动。这些模式称为季节性,通常在每年、每月、每周或每日周期相关的数据中观察到。如果不解决潜在的季节性问题,季节性时间序列数据可能难以准确建模。

ydata-profiling的季节性警告基于增强迪基-福勒(ADF)测试。然而,您应始终结合此警告的输出与季节性分解PACF和ACF图(也在时间序列分析中计算)。

时间序列缺失间隙


时间序列间隙分析

时间序列缺失数据可视化

作为数据科学家,处理时间序列数据的关键方面之一是理解和分析时间序列间隙。时间序列间隙指的是时间序列数据中观测值缺失或不完整的间隔。尽管这些间隙可能看似不便,但它们包含重要信息,并可能显著影响分析和预测的质量和可靠性。

ydata-profiling自动识别潜在时间序列间隙的方法基于时间间隔分析。通过分析数据点之间的时间间隔,间隙预计会在分布中表现为较大的间隔。 你可以在这里设置缺失间隙识别的配置和时间间隔。

自定义时间序列变量

在某些情况下,你可能已经知道哪些变量应该是时间序列,或者你可能只是想确保你希望分析为时间序列的变量被正确地配置为时间序列:

设置哪些变量是时间序列
import pandas as pd

from ydata_profiling.utils.cache import cache_file
from ydata_profiling import ProfileReport

file_name = cache_file(
    "pollution_us_2000_2016.csv",
    "https://query.data.world/s/mz5ot3l4zrgvldncfgxu34nda45kvb",
)

df = pd.read_csv(file_name, index_col=[0])

# 过滤时间序列以分析单个站点
site = df[df["Site Num"] == 3003]

# 设置哪些变量是时间序列
type_schema = {
    "NO2 Mean": "timeseries",
    "NO2 1st Max Value": "timeseries",
    "NO2 1st Max Hour": "timeseries",
    "NO2 AQI": "timeseries",
}

profile = ProfileReport(
    df,
    tsmode=True,
    type_schema=type_schema,
    sortby="Date Local",
    title="站点3003的时间序列EDA",
)

profile.to_file("report_timeseries.html")

关于时间序列分析的更多问题和建议,请访问数据中心化AI社区