附录 B:Python 入门
本附录提供课程所需的 Python 最小基础。你不需要先成为软件工程师,但需要能够读懂 notebook(交互式笔记本)、修改参数、运行函数、安装包,并把模型输出整理成表格和图形。
学习目标¶
完成本附录后,你应该能够:
使用 Python 做基础计算。
理解变量、字符串、列表和索引。
使用内置函数和第三方模块。
定义简单函数并阅读 docstring。
使用
pip安装课程依赖。
本地 Jupyter 环境¶
如果你还没有 Python 环境,我们建议先安装 Anaconda。Windows 用户从 Anaconda 官网选择 64 位图形安装包;macOS 用户注意区分 Intel 芯片和 Apple Silicon 芯片。安装过程可以使用图形安装器,一路按提示完成即可。
安装后打开 Anaconda Navigator 或开始菜单中的 Anaconda 文件夹,启动 Jupyter Notebook。Jupyter 会在浏览器中打开一个文件列表,这个列表对应你电脑上的某个本地目录。新建 notebook 时选择 Python kernel(Python 内核),然后先运行一个最简单的单元:
3 + 4如果输出 7,说明 notebook 基本可用。给 notebook 重命名并保存后,会得到一个 .ipynb 文件。Windows 上启动 Jupyter 时通常还会打开一个黑色终端窗口;不要关闭它,否则浏览器里的 notebook 也会断开。
Python 作为计算器¶
Python 可以直接做算术:
3**2
17 - 4
4 / 2
(5 + 4) * 3注意 ** 表示乘方,^ 不是乘方。在 Python 中,^ 是异或运算。取余使用 %:
x = 2004
print(x % 100 == 0)
print(x % 4 == 0)这类表达式常用于日期、周期和分组判断。
变量¶
变量(variable)用等号 = 赋值:
a = 3
b = 5
c = a + b
c变量是给值起名字。预测代码中常见变量包括 df、train_df、test_df、h、model_name 和 freq。阅读 notebook 时,先弄清每个变量保存了什么对象。
字符串¶
字符串(string)可以用单引号或双引号:
last_name = "Li"
first_name = "Feng"反斜杠会触发转义。普通字符串中 \n 表示换行,原始字符串前加 r:
print("Hello\nWorld")
print(r"Hello\nWorld")字符串可以拼接和重复:
"time" + "series"
"ha" * 3在 API 预测中,prompt 本质上就是字符串。构造 prompt 时要特别注意换行、引号和变量插入。
后续章节中的 JSON 输出和模型提示词都可以从这里理解:prompt 是字符串,模型返回是待解析文本,预测结果最终要进入 DataFrame 才能画图、合并和评估。
索引与切片¶
Python 索引(indexing)从 0 开始:
name = "Feng Li"
name[0]
name[-1]
name[0:4]切片(slicing)[a:b] 取从 a 到 b 之前的位置,不包含 b。时间序列中也常用类似思想,例如取最后 12 期:
tail = values[-12:]列表¶
列表(list)用于存放一组值:
values = [1, 5, 7, 9, 12]
len(values)
values[0]
values[-2:]列表可以修改:
values[2] = 1000
values.append(9999)预测任务中,列表常用于保存多个模型名、多个指标、多个预测步长或多条记录。
内置函数¶
Python 有很多内置函数(built-in functions),例如 len、sum、min、max、print、range、type 和 help。遇到不熟悉的函数,可以先查看帮助:
help(len)调试 notebook 时,type(obj) 很有用。它能告诉你对象是字符串、列表、字典、DataFrame 还是其他类型。
导入模块¶
很多功能需要导入模块(module):
import math
math.exp(0)也可以只导入某个函数:
from math import exp
exp(0)本课程常用模块包括:
pandas:数据表(DataFrame)处理。numpy:数值计算。matplotlib:画图。openai:调用兼容 OpenAI 风格的 API。nixtla:调用 TimeGPT,这类 API 把时间序列基座模型封装成 Python 工作流 Garza et al., 2024。utilsforecast:评估预测结果。tsfeatures或类似工具:把时间序列转换成趋势、自相关、线性度等特征表。
定义函数¶
函数把重复逻辑封装起来。一个简单例子:
def fib(n):
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while a < n:
print(a, end=" ")
a, b = b, a + b预测 notebook 中也应使用函数减少重复,例如:
def split_train_test(df, h):
train = df.iloc[:-h].copy()
test = df.iloc[-h:].copy()
return train, test函数的好处是让实验更可复现。你只需要改变参数,而不是复制粘贴整段代码。
后续如果计算时间序列特征,代码通常也是这个思路:输入一个包含 unique_id、ds 和 y 的 DataFrame,函数返回一张特征表。每一行对应一条序列,每一列对应一个特征,例如 trend、linearity、curvature 或 acf。理解函数输入和输出,比背某个包的名字更重要。
安装第三方包¶
在 notebook 中可以安装第三方包(third-party packages):
!python -m pip install pandas课程中会用到 nixtla 等预测相关包。你可以直接在 notebook 或终端运行:
python -m pip install nixtla安装成功后,再在 notebook 中测试:
import nixtla在终端中也可以安装:
python -m pip install pandas
python -m pip install pandas -U
python -m pip uninstall pandas推荐使用 python -m pip,因为它更明确地使用当前 Python 环境。不要在不了解环境的情况下随意加 --break-system-packages,除非你清楚它会修改系统 Python 管理规则。
Windows、Anaconda、Jupyter 和服务器环境可能各自使用不同 Python。安装包时先确认这个 python 就是当前 notebook 的 kernel;很多初学错误不是代码逻辑错,而是包安装到了另一个环境。
这个原则在本地 AI 设备上同样成立。无论是在普通笔记本、集群、云服务器还是本地 AI 盒子上运行 Chronos、PyTorch 或其他深度学习包,先确认当前 Python,再安装依赖。Chronos 这类本地时间序列基座模型尤其依赖正确的模型文件、运行库和解释器环境 Ansari et al., 2024。硬件变强不能自动解决环境问题;如果 notebook 使用的 kernel 和终端里安装包的 Python 不一致,仍然会出现 ModuleNotFoundError。
涉及 GPU 或本地模型时,可以在 notebook 中先做最小检查:
import sys
print(sys.executable)
import torch
print(torch.cuda.is_available())如果模型只能在 CPU 上运行,也不代表不能做练习,只是推理速度可能更慢。本书中的小型时间序列预测模型通常可以先在 CPU 上跑通,再根据需要迁移到 GPU 或共享内存设备。
课程中的最小 Python 工作流¶
一个常见预测实验会按下面流程写:
import pandas as pd
df = pd.read_csv("data.csv")
df["ds"] = pd.to_datetime(df["ds"])
df = df.sort_values(["unique_id", "ds"])
h = 12
train = df.iloc[:-h].copy()
test = df.iloc[-h:].copy()之后再调用模型、生成预测、合并真实值并计算误差。只要理解变量、DataFrame、函数和模块,就能读懂大部分课程代码;更系统的时间序列实践可以继续参考 Forecasting: Principles and Practice 的 Python/R 思路与评价框架 Hyndman & Athanasopoulos, 2021。
因此,本附录不是孤立语法课。变量、列表、函数和模块的最终目的,是让你能读懂 notebook 中的数据流:历史数据如何变成训练集,预测步长如何传给模型,模型输出如何进入评估表。
常见错误¶
NameError 通常表示变量还没有定义,可能是前面的 notebook 单元没有运行。
ModuleNotFoundError 表示当前 Python 环境没有安装某个包,或者安装到了另一个环境。
KeyError 常见于 DataFrame 列名写错,例如使用了 date 但实际列名是 ds。
TypeError 常见于把字符串当数字、把列表当函数、或者参数类型不匹配。
遇到错误时不要只看最后一行。错误信息会告诉你出错的文件、行号和对象名称。
小结¶
学习本课程需要的 Python 并不复杂。重点是能读懂 notebook 中的数据流:读入数据、清洗列、切分训练测试、调用模型、保存预测、计算误差。先把这些基本动作练熟,再学习更复杂的模型。
练习¶
用 Python 计算
12个月后日期对应的预测步长变量h。创建一个包含 5 个销量数字的列表,取最后 2 个值。
写一个函数,输入真实值和预测值,返回绝对误差。
导入
math,计算 。用
python -m pip检查当前环境是否安装了pandas。
参考文献¶
- Garza, A., Challu, C., & Mergenthaler-Canseco, M. (2024). TimeGPT-1. 10.48550/arXiv.2310.03589
- Ansari, A. F., Stella, L., Turkmen, C., Zhang, X., Mercado, P., Shen, H., Shchur, O., Rangapuram, S. S., Arango, S. P., Kapoor, S., Zschiegner, J., Maddix, D. C., Wang, H., Mahoney, M. W., Torkkola, K., Wilson, A. G., Bohlke-Schneider, M., & Wang, Y. (2024). Chronos: Learning the Language of Time Series. 10.48550/arXiv.2403.07815
- Hyndman, R. J., & Athanasopoulos, G. (2021). 预测:方法与实践. OTexts. https://otexts.com/fpp3cn/