第二课:环境搭建——Python量化生态与数据源实战
说实话,很多新手在因子挖掘这条路上栽跟头,不是策略不对,而是环境没搭好。我见过太多人花了两周写代码,最后发现是pandas版本冲突导致结果对不上。嗯,这节课我们就来把地基打牢。
2.1 Python量化生态:三驾马车
做因子挖掘,说白了就是跟数据打交道。Python里最趁手的工具,我个人习惯用这三样:
- Pandas:处理表格数据的瑞士军刀。我项目中90%的数据清洗工作都靠它。
- NumPy:数值计算的底层引擎。因子计算里的矩阵运算,背后都是它。
- Statsmodels:统计建模的专家。做因子有效性检验时,你离不开它。
你想想看,这三样东西配合起来,基本能覆盖因子挖掘从数据清洗到回测验证的全流程。
我的经验之谈:刚开始别追求最新版本。我踩过坑——某次升级pandas到2.0,结果一堆旧代码报错。建议锁定pandas 1.5.x、numpy 1.24.x、statsmodels 0.14.x,稳定第一。
2.2 数据源获取:Tushare vs AKShare
数据是因子挖掘的粮食。国内常用的两个数据源,我分别说说它们的脾气。
| 特性 | Tushare | AKShare |
|---|---|---|
| 数据质量 | 高,经过校验 | 中,部分数据需清洗 |
| 获取方式 | 需要token,有积分限制 | 免费,无需注册 |
| 更新频率 | 实时+历史 | 偏历史数据 |
| 适合场景 | 专业研究、高频因子 | 学习、快速验证 |
我个人习惯是:学习阶段用AKShare,零门槛上手快;正式研究用Tushare,数据干净省心。曾经有一次,我用AKShare拉了一年的日线数据,结果发现某只股票有三天停牌但数据没标记,差点导致因子计算全错。从那以后,我每次都会做数据完整性检查。
2.2.1 快速上手代码
# 安装(建议用国内镜像)
pip install tushare akshare pandas numpy statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple
# AKShare获取股票日线
import akshare as ak
df = ak.stock_zh_a_hist(symbol="000001", period="daily",
start_date="20230101", end_date="20231231")
print(df.head())
# Tushare获取(需要先注册获取token)
import tushare as ts
ts.set_token('你的token')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ', start_date='20230101',
end_date='20231231')
print(df.head())
避坑指南:我曾经因为Tushare的token过期,半夜跑因子时突然报错。建议把token写在配置文件里,别硬编码在代码中。
2.3 本地数据库搭建:SQLite
数据量大了以后,每次都从网络拉取太慢。我的做法是:建一个本地数据库,把数据存下来,后续分析直接从本地读。
为什么选SQLite?说白了就三点:
- 零配置,不需要安装数据库服务器
- 一个文件就是一个库,方便迁移
- Python内置支持,import sqlite3就能用
2.3.1 实战:搭建你的第一个因子数据库
import sqlite3
import pandas as pd
# 创建数据库文件
conn = sqlite3.connect('factor_data.db')
cursor = conn.cursor()
# 创建股票日线表
cursor.execute('''
CREATE TABLE IF NOT EXISTS daily_data (
ts_code TEXT,
trade_date TEXT,
open REAL,
high REAL,
low REAL,
close REAL,
vol REAL,
PRIMARY KEY (ts_code, trade_date)
)
''')
# 批量插入数据(假设df是pandas DataFrame)
df.to_sql('daily_data', conn, if_exists='append', index=False)
# 查询验证
query_df = pd.read_sql("SELECT * FROM daily_data WHERE ts_code='000001.SZ'", conn)
print(query_df.head())
conn.close()
注意:SQLite不支持并发写入。如果你有多个进程同时写库,可能会报错。我一般用单线程写入,或者用锁机制控制。
2.4 本章知识体系总览
下面这张图,是我自己总结的因子挖掘环境搭建路线。你跟着走,基本不会迷路。
2.5 环境验证清单
搭建完环境后,我建议你跑一遍这个验证脚本,确保所有组件都能正常工作:
import pandas as pd
import numpy as np
import statsmodels.api as sm
import akshare as ak
import sqlite3
print("Pandas版本:", pd.__version__)
print("NumPy版本:", np.__version__)
print("Statsmodels版本:", sm.__version__)
# 测试数据获取
df = ak.stock_zh_a_hist(symbol="000001", period="daily",
start_date="20240101", end_date="20240110")
print("数据获取成功,共{}条记录".format(len(df)))
# 测试数据库写入
conn = sqlite3.connect('test.db')
df.to_sql('test_table', conn, if_exists='replace')
result = pd.read_sql("SELECT COUNT(*) as cnt FROM test_table", conn)
print("数据库写入成功,记录数:", result['cnt'][0])
conn.close()
print("✅ 环境搭建完成,一切正常!")
我的小建议:把这个验证脚本保存为 check_env.py,每次换电脑或重装环境时跑一遍。省心。
好了,环境搭好了,数据源也通了。接下来你就可以开始真正的因子挖掘了。记住:工欲善其事,必先利其器。这一步虽然枯燥,但值得你花时间做扎实。