第二章: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 本章知识体系

下面这张图,帮你理清整个环境搭建的脉络:

固收量化Python环境搭建 Anaconda 基础环境 Jupyter Notebook pandas + numpy 数据库连接 交互式编程 Shift+Tab 查看文档 数据清洗 + 数值计算 conda 安装防冲突 MySQL / ClickHouse pymysql / clickhouse-driver ✅ 可以开始做固收量化了

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