ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ML-For-Beginners 实战:用时间序列可视化发现数据规律——从 GEFCom2014 电力负荷到多数据集练手指南

2026/9/8 18:30:46 拓冰建站 浏览量
ML-For-Beginners 实战:用时间序列可视化发现数据规律——从 GEFCom2014 电力负荷到多数据集练手指南 ML-For-Beginners 实战用时间序列可视化发现数据规律——从 GEFCom2014 电力负荷到多数据集练手指南【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners时间序列预测要求先看懂数据本身趋势、季节性、突变等特征只有通过可视化才能被直观识别这也是后续选择 ARIMA 等模型的前提。本篇文章以 ML-For-Beginners 课程的 7-TimeSeries 时间序列单元对应关联文档 7-TimeSeries/1-Introduction/assignment.md 的可视化练习为核心先结合仓库中的 GEFCom2014 电力负荷数据跑通加载—清洗—绘图的完整流程再手把手教你如何寻找 3 个适合时间序列建模的数据集用 Notebook 完成绘图与特征标注这一课程作业。读完你就能独立完成课程作业并获得一套可复用到任意时序数据的看图识特征检查清单。为什么先要可视化时间序列数据在本课程的 时间序列预测导论 中时间序列被定义为按时间顺序索引的数据点序列例如道琼斯工业平均指数的每日收盘价。与普通回归数据不同时间序列数据是有序观测值的列表其分析取决于数据的性质可能需要频域/时域、线性/非线性等多种方法。可视化之所以被单独设为一次作业是因为时间序列数据的核心价值隐藏在其特征之中。本课程将需要关注的时序特征归纳为六类特征含义直观表现趋势Trends随时间可测的上升或下降长期单调走高的曲线季节性Seasonality周期性波动如节假日引发的销售高峰固定间隔重复出现的峰谷异常值Outliers远离正常数据方差的值突兀的尖峰或凹陷长期循环Long-run cycle独立于季节性的长周期波动如持续超过一年的经济下行跨越数年的缓坡起伏恒定方差Constant variance随时间保持的稳定波动幅度振幅大致恒定的锯齿曲线突变Abrupt changes数据中需要进一步分析的突然变化如 COVID 导致的企业关停断崖式跳变如果把这些特征视为想分析的有效信号那么它们往往是需要被识别并必要时通过统计手段抵消的噪声。在动手建模之前先把这些噪声认出来、写下来是时间序列分析的第一课。跑通能量数据的加载与可视化流程在课程作业之前需要先熟悉一个已就绪的示例使用 GEFCom2014 预测竞赛的电力负荷数据。该数据来自 2014 年全球能源预测竞赛详见 7-TimeSeries/1-Introduction/README.md 对论文的引用包含 2012–2014 三年逐小时的电力负荷与温度值。仓库中已把数据预处理为可直接读取的 CSV7-TimeSeries/data/energy.csv。1. 打开 Notebook 并引入依赖库在课程 working 目录 中打开 notebook先引入加载与可视化所需的库import os import matplotlib.pyplot as plt from common.utils import load_data %matplotlib inline这里使用了随附的common文件夹内的工具函数来搭建环境并处理数据加载。仓库中的环境定义文件 7-TimeSeries/1-Introduction/working/common/environment.yaml 列出了完整依赖pandas、matplotlib、numpy、statsmodels 等可通过conda env create -f environment.yaml复现运行环境。2. 用 load_data 读取并查看数据data_dir ./data energy load_data(data_dir)[[load]] energy.head()得到的 DataFrame 包含两列日期索引与负荷值。load_data的底层实现在 7-TimeSeries/1-Introduction/working/common/utils.py它先用pd.read_csv(..., parse_dates[timestamp])读取 CSV然后把timestamp设为索引并用energy.reindex(pd.date_range(min, max, freqH))按小时补齐最小与最大时间戳之间的所有时点。这一步很关键——它把某些小时缺失变成显式的 NaN便于检查数据完整性注释也说明该数据集本身没有缺失时段。timestampload2012-01-01 00:00:002698.02012-01-01 01:00:002558.02012-01-01 02:00:002444.02012-01-01 03:00:002402.02012-01-01 04:00:002403.03. 绘制全部三年的负荷曲线energy.plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()从全景图可以看到负荷数据跨年份的周期性起伏——冬季与夏季的用电高峰交替出现这正是典型的季节性信号为后续在下一课中构建 ARIMA 模型做好了准备。4. 放大看 2014 年 7 月的第一周时间序列索引的切片是发现微观特征的有力工具。用[起始日期:结束日期]的语法切出特定时间段energy[2014-07-01:2014-07-07].plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()放大到单周后日内节奏立刻浮现一天之中出现明显的峰谷交替白天与傍晚用电高峰这正是恒定方差与短周期波动特征的直观体现。观察后可以自问这些负荷特征受星期几影响吗夜间与白天的波动幅度一致吗仓库中的完整代码可参考工作簿 7-TimeSeries/1-Introduction/working/notebook.ipynb 与带讲解的解答版 7-TimeSeries/1-Introduction/solution/notebook.ipynb。课程作业解析寻找 3 个值得被时间序列建模的数据集现在进入核心任务。课程作业见 关联作业文档要求你已经学习了时间序列预测所适用的数据类型并可视化了能量相关数据接下来请再寻找 3 个能从时间序列预测中获益的其他数据集在 Notebook 中完成可视化并标注它们各自的特殊特征季节性、突变或其他趋势。要判断哪些数据会从时间序列预测中受益核心标尺是上一节列的六类特征数据是否随时间有序排列、是否包含可外推的周期性季节或可跟随的趋势、是否存在需要单独处理的突变与异常。能源负荷之外典型候选包括电商平台每日订单量、城市交通逐时流量、天气温度与降雨、股票与汇率日线、医院急诊每日就诊人次、网站访问量等。第一步确定数据源作业原文建议从公开数据集平台寻找候选数据。挑选时应遵循三条原则时间戳粒度明确数据必须带规范的时间/日期列且采样间隔基本固定小时、天、月均可字段可解释你能够说明该序列在业务或物理上为什么随时间变化特征够丰富优先挑选肉眼可见存在周期、趋势或历史突变事件的数据这样可视化分析才有的放矢。第二步建立统一的 Notebook 分析骨架为每个数据集复用与课程示例一致的流程即可。以仓库中 7-TimeSeries/1-Introduction/working/notebook.ipynb 的单元结构为模板建议每个数据集用如下骨架# 1) 数据加载把时间列解析为 pandas datetime import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(your_dataset.csv, parse_dates[timestamp]) df df.set_index(timestamp).sort_index() # 2) 数据完整性检查重采样/补全时间轴查看缺失 df df.reindex(pd.date_range(df.index.min(), df.index.max(), freqH)) # 3) 绘制全貌先看长期趋势与季节 df[value].plot(figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(value, fontsize12) plt.show() # 4) 切片放大观察代表性周期一周 / 一天 / 一年寻找季节与突变 df[2021-01-01:2021-01-31][value].plot(figsize(15, 8)) plt.show()对照仓库实现第 2 步与load_data的 reindex 逻辑一致见 7-TimeSeries/1-Introduction/working/common/utils.py建议在 Notebook 中同步输出df.isna().sum()之类的缺失检查体现严谨的数据处理习惯。第三步逐数据标注特征绘图只是手段标注才是得分关键。对每个数据集在对应 Markdown 单元格中按特征名 → 图中证据 → 可能的成因 → 对建模的影响四段式记录例如季节性曲线每年 12 月出现高峰 → 节假日效应 → 建模时需引入季节差分或季节性 ARIMA突变曲线在 2020 年某月断崖下跌 → 与外部事件时间吻合 → 后续预测应考虑异常段处理或单独建模趋势序列整体每年稳步上升 → 业务规模增长 → 建模前需检验平稳性或做差分恒定方差波动幅度始终稳定 → 是相对规整的信号适合直接套用经典模型。这种标注恰好呼应本课程 1-Introduction 导论 中把特征视为需要被抵消的噪声的观点写清楚每个特征就意味着你已为下一步选择模型、做差分、去除季节分量做好了准备。评分标准与自查清单作业自带明确的评分表Rubric可以作为交付前的自查依据标准优秀Exemplary合格Adequate待改进Needs Improvement内容在一个 Notebook 中绘图并解释了3 个数据集在一个 Notebook 中绘图并解释了2 个数据集绘图或解释的数据集过少或呈现的数据信息不足结合评分表交付前的 5 项自查清单是否为每个数据集独立成节且均包含全貌图 放大图两组图每个数据集是否至少明确标注 2 种以上特殊特征趋势/季节/突变/异常值等每个特征是否关联到具体的时间段与可视化证据而非泛泛而谈是否标注了数据的来源、时间跨度与采样粒度时间轴是否已按小时/天重采样并做过缺失检查若三个数据集都做到图 文 证据三者齐备即达到评分表中优秀档位若时间紧张也应优先保证两三个数据集的完整解释而非堆砌更多无解释的裸图。延伸从可视化走向预测建模本次作业的意义在于为下一课铺路——在 ARIMA 建模课 中你将基于同样类型的单变量时间序列构建 ARIMA自回归积分滑动平均模型。可视化阶段积累的特征结论将直接转化为建模决策识别出趋势就做差分识别出季节就考虑季节性参数识别出突变就谨慎划分训练/测试区间。如果后续想引入更进阶的方法仓库 7-TimeSeries/common/utils.py 中的TimeSeriesTensor类展示了如何把时间序列构造成带(samples, time steps, features)结构的张量以喂给神经网络mape与create_evaluation_df则提供了预测评估工具——它们表明时间序列分析既可由经典统计方法ARIMA驱动也可由深度学习增强这正是本课程希望传达的经典 ML 方法仍是时间序列预测重要基底的立场。作业小结先跟着仓库的电力负荷示例掌握load_data reindex plot 切片放大四步法再为每个候选数据集回答它的趋势、季节、突变、异常在哪张图里看得最清楚你就能高质量地完成可视化更多时间序列这份作业并为正式建模打下坚实的读图基本功。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考