第二课:环境搭建——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 本章知识体系总览

下面这张图,是我自己总结的因子挖掘环境搭建路线。你跟着走,基本不会迷路。

因子挖掘环境搭建路线图 数据获取层 Tushare / AKShare 数据存储层 SQLite 本地数据库 计算分析层 Pandas / NumPy 统计验证层 Statsmodels 工作流程: 1. 从Tushare/AKShare拉取原始数据 2. 清洗后存入SQLite本地库 3. 用Pandas/NumPy计算因子值 4. 用Statsmodels做统计检验

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,每次换电脑或重装环境时跑一遍。省心。

好了,环境搭好了,数据源也通了。接下来你就可以开始真正的因子挖掘了。记住:工欲善其事,必先利其器。这一步虽然枯燥,但值得你花时间做扎实。


专注资料整理