第二章:Python环境搭建——Anaconda与Jupyter配置、pandas/numpy安装、数据库连接配置
做固收量化,第一步不是写策略,而是搭环境。
我见过太多人,策略逻辑想得挺漂亮,结果一跑代码报错,卡在环境配置上大半天。说白了,环境搭得稳,后面才能安心搞数据清洗和特征工程。这一章,咱们就把地基打牢。
2.1 为什么选Anaconda?
你想想看,固收量化涉及的数据源多——中债登、上清所、Wind、QB,每个数据格式都不一样。如果每个项目都手动装包,版本冲突能让你崩溃。
Anaconda 的好处就是:环境隔离 + 包管理。我个人的习惯是,每个项目建一个独立的虚拟环境。比如固收信用债分析一个环境,利率债策略另一个环境,互不干扰。
核心要点:Anaconda 自带 Python、Jupyter、以及 1500+ 数据科学包。你不需要一个个去装,省心。
2.2 安装与配置Jupyter
安装Anaconda很简单,去官网下载对应版本,一路默认就行。但我提醒一句:安装路径不要有中文,否则后面各种玄学报错。
装完之后,打开终端(Windows 用 Anaconda Prompt),输入:
conda create -n fixed_income python=3.9
conda activate fixed_income
conda install jupyter notebook
为什么要用 Python 3.9?因为 3.10 以上有些旧版数据库驱动不兼容。我在项目中踩过这个坑,后来统一用 3.9,稳得很。
启动 Jupyter:
jupyter notebook
浏览器会自动打开。如果你习惯用 VS Code,也可以直接在 VS Code 里连 Jupyter,我个人更推荐这种方式——写代码和看数据都在一个界面里。
小技巧:在 Jupyter 里按 Shift + Tab 可以查看函数文档,按 Tab 可以自动补全。做数据清洗时,这两个快捷键能省一半时间。
2.3 pandas 与 numpy 安装
这两个库是固收量化的左膀右臂。pandas 处理表格数据,numpy 做数值计算。
安装命令:
conda install pandas numpy
或者用 pip:
pip install pandas numpy
我个人习惯用 conda 安装,因为 conda 会自动处理依赖关系,不容易出现版本冲突。曾经有一次我用 pip 装 pandas,结果把 numpy 版本搞乱了,导致后面所有数值计算都报错,排查了半天。
验证安装:
import pandas as pd
import numpy as np
print(pd.__version__)
print(np.__version__)
如果输出版本号,说明安装成功。
2.4 数据库连接配置
固收量化离不开数据库。MySQL 存交易流水,ClickHouse 存高频行情。怎么连?我一步步说。
2.4.1 连接 MySQL
首先安装驱动:
pip install pymysql sqlalchemy
然后写连接代码:
from sqlalchemy import create_engine
import pandas as pd
# 连接配置
host = 'localhost'
user = 'root'
password = 'your_password'
database = 'bond_db'
# 创建引擎
engine = create_engine(f'mysql+pymysql://{user}:{password}@{host}/{database}')
# 读取数据
df = pd.read_sql('SELECT * FROM bond_trade LIMIT 100', engine)
print(df.head())
注意:密码不要硬编码在代码里。我建议用环境变量或配置文件管理。曾经有个同事把数据库密码直接写在 Jupyter 里,结果分享 notebook 时泄露了,教训深刻。
2.4.2 连接 ClickHouse
ClickHouse 是列式存储,适合做聚合查询。固收的日频估值数据、成交明细,用 ClickHouse 查起来飞快。
安装驱动:
pip install clickhouse-driver
连接代码:
from clickhouse_driver import Client
client = Client(host='localhost', port=9000, user='default', password='', database='bond')
# 查询
result = client.execute('SELECT * FROM bond_valuation LIMIT 10')
for row in result:
print(row)
或者用 pandas 直接读:
import pandas as pd
from clickhouse_driver import Client
client = Client(host='localhost')
df = pd.DataFrame(client.execute('SELECT * FROM bond_valuation LIMIT 1000'))
print(df.head())
经验之谈:ClickHouse 的 LIMIT 一定要加,尤其是刚接触时。我刚开始用 ClickHouse 查全表,结果返回了上千万行,Jupyter 直接卡死。嗯,从那以后我养成了先加 LIMIT 的习惯。
2.5 本章知识体系
下面这张图,帮你理清整个环境搭建的脉络:
2.6 避坑指南
- 路径问题:Anaconda 和项目路径都不要有中文或空格。我曾经因为用户名是中文,导致 Jupyter 内核启动失败,折腾了两小时。
- 版本锁定:团队协作时,用
conda env export > environment.yml导出环境配置,别人直接conda env create -f environment.yml就能复现。 - 数据库密码:用
os.getenv('DB_PASSWORD')从环境变量读取,别写死在代码里。 - ClickHouse 端口:默认 HTTP 端口是 8123,原生 TCP 端口是 9000。连接时别搞混了。
好了,环境搭好了。下一章咱们就开始真正处理数据——从 Wind 和 QB 导出的原始数据,怎么清洗成能用的格式。到时候你就知道,今天搭的环境有多重要。
公众号:蓝海资料掘金营,微信deep3321