2. Python 基础速通(一):Python 环境搭建(Anaconda)、Jupyter Notebook 使用、变量与数据类型、列表与字典实操
说实话,很多新手在学 Python 的第一步就栽了跟头——不是代码写不对,而是环境装不好。我见过太多人花了一整天装 Python,最后连个 Hello World 都跑不出来。所以这一章,咱们先把地基打牢。
本章核心目标:30 分钟内搭建好可用的 Python 量化环境,并上手操作变量、列表和字典。
2.1 为什么选择 Anaconda?
Python 本身只是一个解释器,但做量化你需要一堆库:NumPy、Pandas、Matplotlib……一个个手动装?太累了。Anaconda 把这些打包好了,还自带包管理器 conda,省心很多。
我个人习惯用 Anaconda 还有一个原因——它内置了 Jupyter Notebook,这对量化研究来说太方便了。你想想看,写一段代码、看一段结果、再改改参数,这种交互式体验比写脚本再运行爽多了。
| 对比项 | 原生 Python | Anaconda |
|---|---|---|
| 安装难度 | 需手动配置 PATH | 一键安装 |
| 包管理 | pip,依赖冲突常见 | conda,环境隔离方便 |
| 预装库 | 无 | 150+ 科学计算库 |
| IDE 支持 | 需额外安装 | 自带 Jupyter、Spyder |
小提示:下载 Anaconda 时选 Python 3.x 版本(目前推荐 3.9+)。别选 Python 2.7,那个已经退休了。
2.2 安装与验证
安装过程很简单,一路默认就行。但有一个坑——安装界面有个「Add Anaconda to my PATH environment variable」,我建议勾上。虽然官方说不推荐,但咱们做量化经常要在终端里调 conda 命令,勾上省事。
装完后打开终端(Windows 用 Anaconda Prompt),输入:
conda --version
python --version
如果看到版本号,说明装好了。我曾经帮一个学员远程调试,他输完命令没反应——后来发现是终端没重启。嗯,这种小细节容易忽略。
2.3 Jupyter Notebook 上手
Jupyter Notebook 是量化研究的标配。为什么?因为它把代码、图表、文字说明都放在一个文件里,特别适合做探索性分析。
启动方式:在终端输入 jupyter notebook,浏览器会自动打开一个页面。点击右上角「New」→「Python 3」就能新建一个笔记本。
界面很简单:上面是菜单栏,下面是单元格。每个单元格可以写代码,也可以写 Markdown 说明。按 Shift + Enter 运行当前单元格并跳到下一个。
注意:Jupyter 的变量是全局共享的。如果你在一个单元格里定义了变量 x = 10,后面的单元格都能用。但如果你把单元格顺序打乱了再重新运行,很容易出问题。我的习惯是:每次重新分析时,点菜单栏「Kernel」→「Restart & Run All」。
2.4 变量与数据类型
Python 的变量不需要声明类型,直接赋值就行。这很灵活,但也容易踩坑。
# 基本数据类型
price = 100.5 # 浮点数
shares = 200 # 整数
symbol = "AAPL" # 字符串
is_buy = True # 布尔值
# 查看类型
print(type(price)) # <class 'float'>
print(type(shares)) # <class 'int'>
量化里最常用的是浮点数和字符串。价格、收益率都是浮点数;股票代码、日期都是字符串。
有一个细节要注意:Python 的浮点数精度问题。比如 0.1 + 0.2 的结果不是精确的 0.3,而是 0.30000000000000004。做量化计算时,这种误差累积起来会出问题。我一般用 round() 或者 Decimal 来处理。
| 数据类型 | 示例 | 量化场景 |
|---|---|---|
| int | 100, -5 | 成交量、持仓量 |
| float | 3.14, -0.05 | 价格、收益率 |
| str | "AAPL", "2024-01-01" | 股票代码、日期 |
| bool | True, False | 买卖信号 |
2.5 列表实操
列表是 Python 里最常用的数据结构之一。说白了,就是一个有序的容器,能放各种类型的数据。
# 创建列表
prices = [100.5, 101.2, 99.8, 102.1, 100.9]
# 常用操作
print(len(prices)) # 长度:5
print(prices[0]) # 第一个元素:100.5
print(prices[-1]) # 最后一个元素:100.9
print(prices[1:3]) # 切片:[101.2, 99.8]
# 添加元素
prices.append(103.0) # 末尾添加
prices.insert(0, 99.5) # 指定位置插入
# 删除元素
prices.remove(99.8) # 删除指定值
last = prices.pop() # 弹出最后一个
# 列表推导式(量化里超常用)
squared = [x**2 for x in prices]
列表推导式我几乎每天用。比如计算收益率:returns = [(prices[i] - prices[i-1]) / prices[i-1] for i in range(1, len(prices))]。一行代码搞定,比写循环清爽多了。
避坑指南:列表的切片是左闭右开的。prices[1:3] 取的是索引 1 和 2,不包括 3。我曾经在回测里因为这个问题算错了收益率,查了半天才发现是切片边界搞错了。
2.6 字典实操
字典是键值对的集合,特别适合存股票信息。比如把股票代码作为键,价格作为值。
# 创建字典
stock_prices = {
"AAPL": 150.25,
"GOOGL": 2750.80,
"MSFT": 300.45
}
# 访问值
print(stock_prices["AAPL"]) # 150.25
print(stock_prices.get("TSLA", "Not Found")) # 安全访问
# 修改和添加
stock_prices["AAPL"] = 152.00 # 修改
stock_prices["TSLA"] = 700.00 # 新增
# 遍历
for symbol, price in stock_prices.items():
print(f"{symbol}: ${price}")
# 字典推导式
squared_prices = {k: v**2 for k, v in stock_prices.items()}
字典在量化里还有一个妙用——做缓存。比如计算某个指标时,把结果存到字典里,下次直接取,不用重复计算。这在处理大量数据时能省不少时间。
2.7 本章知识体系
下面这张图把本章的核心知识点串起来了。你可以把它当作一张地图,学完后再回来看一眼,思路会更清晰。
2.8 动手练一练
光看不动手,等于白学。我建议你打开 Jupyter Notebook,跟着下面的练习敲一遍:
- 创建一个列表,包含 5 只股票代码:
["AAPL", "GOOGL", "MSFT", "AMZN", "TSLA"] - 创建一个字典,把每只股票的最新价格存进去(价格自己随便填)
- 用列表推导式计算每只股票价格翻倍后的值
- 用字典推导式创建一个新字典,键是股票代码,值是价格加 10%
- 把结果打印出来,看看对不对
我的建议:刚开始别追求完美,代码能跑就行。写错了就改,改完再跑。量化研究本身就是不断试错的过程,代码写多了自然就熟了。
好了,这一章的内容就到这里。环境搭好了,基础语法也过了一遍,接下来就可以开始真正接触量化数据处理了。