一、上一篇没说完的话:为什么先聊 "数据区别"?
上周咱们梳理了时间序列的学习路径,提到 "基础认知" 是第一关。而这一关的第一个问题,就是 "时序数据和咱们平时见的普通数据,到底有啥不一样?"
很多同学一开始学建模,拿着数据就往 ARIMA、LSTM 里套,最后结果差得离谱,回头才发现:自己连 "手里的数据是不是时序数据"、 "它和普通数据的规律有啥不同" 都没搞懂。
就像你要做蛋糕,得先分清 "面粉" 和 "米粉" 的区别,不然原料错了,再厉害的配方也没用。今天咱们就用最直白的例子,把这个 "基础区别" 讲透,还附 3 类典型案例,看完你再拿到数据,就不会 "分不清类型" 了。
二、先搞懂:普通数据长什么样?
咱们平时接触最多的 "普通数据",其实叫 "横截面数据",简单说就是 "同一时间点,收集的多个样本的信息",核心特点是 "没有时间顺序,样本之间互相独立"。
举 3 个你肯定见过的例子:
-
学生成绩表:比如 "某班 30 个学生的数学成绩、语文成绩",数据里只有 "学生" 这个样本维度,没有 "时间" 维度,你把学生 A 和学生 B 的成绩顺序调换,不影响任何分析结果(因为他们的成绩互不依赖);
-
店铺调研数据:比如 "50 家奶茶店的面积、月租金、月利润",同样没有时间,你分析 "面积和利润的关系" 时,不用管这些店铺是按 "从大到小" 还是 "从小到大" 排序的;
-
用户问卷数据:比如 "1000 个用户的年龄、性别、是否购买过某产品",每个用户的信息都是独立的,没有 "时间先后" 的影响,比如用户甲买没买,和用户乙买没买没关系。
总结一下普通数据的 3 个关键特点:
-
没有 "时间" 这个核心维度;
-
样本之间互相独立,顺序调换不影响分析;
-
分析目标通常是 "找样本属性之间的关系"(比如成绩和学习时间的关系、店铺面积和利润的关系)。
三、再明白:时序数据的核心特点,"时间是灵魂"
而时序数据,本质是 "按时间顺序排列的数据",但不止 "有时间" 这么简单,它的核心是 "前后数据有依赖关系,时间顺序不能乱"。
还是用 3 个例子理解:
-
某便利店的每日销量:数据是 "2023 年 1 月 1 日销量 300 元、1 月 2 日销量 350 元、1 月 3 日销量 280 元......"。这里 "时间顺序" 是灵魂:你不能把 1 月 3 日的销量和 1 月 1 日的调换,因为 1 月 2 日的销量可能受 1 月 1 日的影响(比如 1 月 1 日卖断货了,1 月 2 日销量就会降);
-
某城市的每小时 PM2.5 浓度:"早上 8 点浓度 50、9 点浓度 62、10 点浓度 58......"。前后数据有依赖:9 点的浓度,大概率和 8 点的浓度相关(因为污染物扩散需要时间,不会突然从 50 跳到 200);
-
某股票的每日收盘价:"周一 100 元、周二 102 元、周三 99 元......"。时间顺序绝对不能乱,你要是把 "周三 99 元" 放到 "周二 102 元" 前面,分析 "股价波动趋势" 就全错了。
对比普通数据,时序数据的 3 个核心差异就很明显了:
|------|---------------------------|---------------------------|
| 对比维度 | 普通数据(横截面数据) | 时序数据 |
| 核心维度 | 只有 "样本" 维度(如学生、店铺) | 必须有 "时间 + 样本" 两个维度(如每日销量) |
| 数据顺序 | 顺序可随便调换,不影响分析 | 时间顺序不能乱,一换就错 |
| 数据关系 | 样本之间互相独立(如学生 A 和 B 的成绩无关) | 前后数据有依赖(如今天销量影响明天) |
| 分析目标 | 找 "样本属性的关系"(如面积→利润) | 找 "时间规律"(如趋势、季节),做预测 |
四、3 类典型时序数据案例:看完就懂怎么区分
光说理论太抽象,咱们结合具体场景,看 3 类最常见的时序数据,每类都附 "数据特点 + 可视化描述"(你可以想象一下这些数据画出来的图是什么样的),以后你拿到数据,对照着就能归类。
案例 1:平稳型时序数据,"围绕一个值波动,没有明显趋势"
-
场景:恒温箱的每小时温度记录
-
数据样子:比如设定温度 25℃,实际记录是 "25.1℃、24.9℃、25.2℃、24.8℃、25.0℃......",每天的温度均值都在 25℃左右,方差很小,没有 "越来越高" 或 "越来越低" 的趋势,也没有 "每周某几天特别高" 的规律。
-
为什么是时序数据:虽然波动小,但时间顺序很重要。比如某小时温度突然升到 28℃(异常值),下一小时的温度可能还会偏高(因为恒温箱降温需要时间),这种 "前后依赖" 是普通数据没有的。
-
可视化图:一条围绕 25℃上下小幅波动的线,没有明显的上升 / 下降,也没有周期性的高峰低谷。
案例 2:趋势型时序数据,"随时间逐渐上升或下降"
-
场景:某新能源汽车品牌的季度销量
-
数据样子:2021Q1 销量 5000 辆、2021Q2 6200 辆、2021Q3 7500 辆、2022Q1 8800 辆、2022Q2 10500 辆...... 整体呈 "逐年上升" 的趋势,虽然每个季度之间可能有小幅波动(比如 Q2 比 Q1 多,但 Q3 比 Q2 多更多),但长期趋势是向上的。
-
为什么是时序数据:销量的增长有时间依赖。比如 2022Q1 的 8800 辆,是在 2021Q3 7500 辆的基础上增长的,你不能把 2022Q1 的销量和 2021Q1 的调换,不然 "趋势" 就完全错了。
-
可视化图:一条从左下到右上的曲线,虽然有小幅波动,但整体向上(如果是下降趋势,就是从左上到右下)。
案例 3:季节型时序数据 ------"按固定周期重复波动"
-
场景:某校园奶茶店的每日销量
-
数据样子:每周一到周四销量 200-300 杯,周五、周六能到 500-600 杯,周日回落到 400 杯左右;而且每年夏天(6-8 月)销量会比冬天(12-2 月)高 30%。这种 "每周一个小周期,每年一个大周期" 的规律,就是季节型数据的特点。
-
为什么是时序数据:销量的波动完全依赖时间。比如周五的高销量,是因为学生周末放假;夏天的高销量,是因为天气热,这些都是 "时间带来的规律",普通数据里不会有这种 "周期性依赖"。
-
可视化图:一条有规律起伏的线,每 7 天会出现一个高峰(周五),每 12 个月会出现一个大的高峰段(夏天),波动很有规律。
五、实操:用 Python 加载并识别时序数据(3 步搞定)
光看案例不够,咱们动手试试。用 3 行核心代码,加载一份时序数据,判断它是不是时序数据,再画个图看看类型。
准备工作:需要的工具
只需要pandas(处理数据)和matplotlib(画图),如果没装的话,先在命令行输:
pip install pandas matplotlib
步骤 1:加载数据,设置 "时间索引"
咱们用 "某城市 2023 年的日平均气温数据"(数据格式是 csv,包含 "日期" 和 "气温" 两列),核心是把 "日期" 列设为 "时间索引"。这是区分 "带时间的普通数据" 和 "时序数据" 的关键。
代码(带注释):
import pandas as pd
import matplotlib.pyplot as plt
# 1. 加载csv数据(假设数据文件叫"city_temperature_2023.csv")
df = pd.read_csv("city_temperature_2023.csv")
# 2. 把"日期"列转换成时间格式,设为索引(这一步是核心!)
df["日期"] = pd.to_datetime(df["日期"]) # 把字符串日期转成datetime格式
df = df.set_index("日期") # 设"日期"为索引,此时数据就有了时间顺序
# 3. 查看数据结构
print(df.head()) # 看前5行数据
print("数据索引类型:", type(df.index)) # 看索引是不是DatetimeIndex(时序数据的标志)
如果输出里 "数据索引类型" 是pandas.core.indexes.datetimes.DatetimeIndex,说明你成功把普通数据转换成时序数据了!
步骤 2:画时序图,判断数据类型
用matplotlib画气温的时序图,一眼就能看出是平稳型、趋势型还是季节型:
# 设置中文显示(避免乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 画时序图
plt.figure(figsize=(12, 6)) # 设置图的大小
plt.plot(df.index, df["气温"], color="#1f77b4") # 横轴时间,纵轴气温
plt.title("某城市2023年日平均气温时序图") # 标题
plt.xlabel("日期") # 横轴标签
plt.ylabel("气温(℃)") # 纵轴标签
plt.grid(alpha=0.3) # 加网格,方便看趋势
plt.show()
你会看到:气温图有明显的 "季节规律"(1-2 月低,7-8 月高),属于 "季节型时序数据"。这就是可视化的好处,不用算复杂指标,一眼就能判断类型。
六、误区提醒:别把 "带时间的数" 当成时序数据!
最后要避个坑:很多同学看到数据里有 "日期" 列,就觉得是时序数据, 但其实不是!
比如 "某电商平台 2023 年各店铺的'开店日期'和'月销量'"。这里虽然有 "开店日期",但数据是 "每个店铺一条记录",没有 "按时间顺序排列的连续数据"(比如没有某店铺 "1 月、2 月、3 月" 的销量),本质还是普通数据。
判断是不是时序数据,记住两个标准:
-
数据是否按 "连续时间" 排列(比如每日、每小时、每月);
-
数据是否有 "前后依赖关系"(比如今天的数据是否受昨天影响)。
只有同时满足这两个条件,才是真正的时序数据。