Azure机器学习实战:时间序列表格数据集过滤操作详解

Azure机器学习实战:时间序列表格数据集过滤操作详解

MachineLearningNotebooks Python notebooks with ML and deep learning examples with Azure Machine Learning Python SDK | Microsoft MachineLearningNotebooks 项目地址: https://gitcode.com/gh_mirrors/ma/MachineLearningNotebooks

概述

在时间序列数据分析中,高效地按时间窗口筛选数据是常见需求。本文将详细介绍如何在Azure机器学习环境中使用时间序列表格数据集(Tabular Time Series Dataset)的相关API进行数据过滤操作。我们将以NOAA气象数据为例,演示完整的时间序列数据处理流程。

环境准备

安装必要组件

确保已安装Azure机器学习Python SDK,版本需1.0.60或更高以支持时间序列特性:

import azureml.core
print(azureml.data.__version__)

导入关键包

from datetime import datetime, timedelta
from azureml.core import Dataset, Workspace

工作区配置

建立与Azure机器学习工作区的连接:

ws = Workspace.from_config()
dstore = ws.get_default_datastore()
dset_name = 'weather-data-florida'

数据准备与加载

上传数据到Blob存储

将气象数据上传至Blob存储以便后续处理:

dstore.upload('weather-data', dset_name, overwrite=True, show_progress=True)

创建时间序列表格数据集

从Parquet文件创建表格数据集,并设置分区格式:

datastore_path = [(dstore, dset_name + '/*/*/data.parquet')]
dataset = Dataset.Tabular.from_parquet_files(
    path=datastore_path,
    partition_format=dset_name + '/{partition_time:yyyy/MM}/data.parquet'
)

时间戳列配置

指定时间戳列

激活时间序列相关API需要指定时间戳列和分区时间戳列:

tsd = dataset.with_timestamp_columns(
    timestamp='datetime', 
    partition_timestamp='partition_time'
)

注册数据集

将数据集注册到工作区以便复用:

registered_ds = tsd.register(
    ws, 
    dset_name,
    create_new_version=True,
    description='时间序列表格数据集演示数据',
    tags={'type': 'TabularDataset'}
)

时间窗口过滤操作

1. 指定时间点前的数据

tsd_filtered = tsd.time_before(datetime(2019, 6, 12))
tsd_filtered.to_pandas_dataframe().tail(5)

2. 指定时间点后的数据

tsd_filtered = tsd.time_after(datetime(2019, 5, 30))
tsd_filtered.to_pandas_dataframe().head(5)

3. 时间范围过滤(链式调用)

tsd_filtered = tsd.time_after(datetime(2019, 1, 1)) \
                  .time_before(datetime(2019, 1, 10))
tsd_filtered.to_pandas_dataframe().head(5)

4. 时间范围过滤(单次调用)

tsd_filtered = tsd.time_between(
    start_time=datetime(2019, 1, 31, 23, 59, 59),
    end_time=datetime(2019, 2, 7)
)
tsd_filtered.to_pandas_dataframe().head(5)

5. 最近时间段数据

获取最近N天的数据:

tsd_filtered = tsd.time_recent(timedelta(days=2))
tsd_filtered.to_pandas_dataframe().tail(5)

列操作与时间序列特性

删除列注意事项

删除时间戳列会导致失去时间序列特性:

# 错误示例 - 删除时间戳列
try:
    tsd2 = tsd.drop_columns(columns=['datetime'])
    tsd2.time_before(datetime(2019, 6, 12))
except Exception as e:
    print(f"预期错误: {str(e)}")

保留列注意事项

保留列时需包含时间戳列以保持时间序列特性:

# 正确做法 - 保留时间戳列
tsd2 = tsd.keep_columns(columns=['snowDepth', 'datetime', 'partition_time'])
tsd2.time_before(datetime(2019, 6, 12)).to_pandas_dataframe().tail(5)

时间戳列重置

重置时间戳列的规则:

  1. 不能单独设置timestamp为None而保留partition_timestamp
  2. 设置timestamp为None会清除所有时间戳列
  3. 可单独清除partition_timestamp
# 清除所有时间戳列
tsd_cleared = tsd.with_timestamp_columns(timestamp=None, partition_timestamp=None)

# 仅清除分区时间戳列
tsd_partial_cleared = tsd.with_timestamp_columns(
    timestamp='datetime', 
    partition_timestamp=None
)

最佳实践建议

  1. 数据分区:合理设置分区格式可显著提高时间范围查询效率
  2. 时间戳列选择:确保选择的时间戳列数据类型正确
  3. 列操作谨慎:进行列操作时注意保留时间序列特性
  4. 错误处理:对可能丢失时间序列特性的操作添加异常处理
  5. 数据注册:重要数据集注册到工作区以便复用和版本控制

通过掌握这些时间序列表格数据集的操作方法,您可以高效地处理各类时间序列数据分析任务,为机器学习模型准备高质量的时间特征数据。

MachineLearningNotebooks Python notebooks with ML and deep learning examples with Azure Machine Learning Python SDK | Microsoft MachineLearningNotebooks 项目地址: https://gitcode.com/gh_mirrors/ma/MachineLearningNotebooks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华湘连Royce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值