第三章:Python与金融数据分析
说实话,我见过太多人一上来就研究复杂的量化模型,结果连数据都拿不到。这就像想盖摩天大楼,结果连地基都没打。今天咱们就把地基夯实——从Python环境搭建到获取第一份股票数据。
3.1 为什么选Python做量化?
你可能要问:市面上那么多工具,为什么偏偏选Python?
我个人的经验是:Python在金融领域有三个无可替代的优势。第一,生态太丰富了。你想得到的金融数据接口、回测框架、机器学习库,几乎都有现成的。第二,代码写起来快。做量化研究,你80%的时间都在试错,Python能让你快速验证想法。第三,社区活跃。我在项目中遇到过的坑,基本都能在Stack Overflow上找到答案。
说白了,用Python做量化,就是站在巨人的肩膀上。
3.2 Anaconda:一站式环境搭建
很多新手会问:为什么要用Anaconda?直接用Python不行吗?
嗯,这里要注意。Anaconda相当于一个「全家桶」,它帮你装好了Python、Jupyter Notebook、以及常用的科学计算库。你想想看,如果手动装,光是解决各种库的依赖冲突就够你折腾半天。
安装步骤其实很简单:
- 去Anaconda官网下载对应系统的安装包
- 一路默认安装(Windows用户记得勾选「Add Anaconda to my PATH」)
- 打开终端或Anaconda Prompt,输入
conda --version验证
我曾经帮一个朋友远程调试,他装了半天装不上,最后发现是下载了32位版本。所以记得看清楚系统位数。
3.3 Pandas:金融数据的瑞士军刀
Pandas这个库,说白了就是Python里的Excel。但它比Excel强大得多。我刚开始做量化时,每天跟它打交道的时间比跟家人还多。
核心就两个数据结构:
- Series:一维数据,类似Excel里的一列
- DataFrame:二维表格,类似整个Excel工作表
来看个最简单的例子:
import pandas as pd
# 创建一个简单的DataFrame
data = {
'股票代码': ['000001', '000002', '600519'],
'收盘价': [12.5, 15.8, 1850.0],
'成交量': [1000000, 800000, 500000]
}
df = pd.DataFrame(data)
print(df)
运行结果会显示一个整齐的表格。嗯,这就是你量化之路的第一步。
df.head()- 查看前几行数据df.info()- 查看数据基本信息df.describe()- 查看统计摘要df['列名']- 选取某一列
3.4 获取股票数据:Tushare vs AkShare
数据是量化分析的基础。没有数据,再牛的模型也是空中楼阁。国内常用的两个数据源是Tushare和AkShare。
| 对比项 | Tushare | AkShare |
|---|---|---|
| 数据丰富度 | 非常丰富,含财务、宏观等 | 丰富,偏重实时数据 |
| 是否需要注册 | 需要,获取token | 大部分接口不需要 |
| 上手难度 | 中等 | 简单 |
| 我的推荐 | 做深度研究用 | 快速验证用 |
我个人习惯是:快速验证想法用AkShare,做正式研究用Tushare。为什么?AkShare不用注册,拿来就用;Tushare数据更全,但需要申请token。
3.4.1 用Tushare获取数据
import tushare as ts
# 设置token(需要先在tushare官网注册)
ts.set_token('你的token')
pro = ts.pro_api()
# 获取贵州茅台的历史日线数据
df = pro.daily(ts_code='600519.SH', start_date='20240101', end_date='20240301')
print(df.head())
3.4.2 用AkShare获取数据
import akshare as ak
# 获取贵州茅台的历史数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20240101", end_date="20240301", adjust="qfq")
print(df.head())
你看,AkShare的代码更简洁,参数也更直观。adjust="qfq"表示前复权,这个在做回测时特别重要。
3.5 知识体系总览
下面这张图是我自己整理的,把本章的核心逻辑串起来了:
3.6 实战:获取并分析第一份数据
光说不练假把式。咱们来写一个完整的实战案例:
import pandas as pd
import akshare as ak
# 1. 获取数据
df = ak.stock_zh_a_hist(symbol="000001", period="daily",
start_date="20240101", end_date="20240301", adjust="qfq")
# 2. 数据清洗
df.columns = ['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额',
'振幅', '涨跌幅', '涨跌额', '换手率']
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 3. 简单分析
print("数据概览:")
print(df.info())
print("\n统计摘要:")
print(df[['收盘', '成交量']].describe())
# 4. 计算20日均线
df['MA20'] = df['收盘'].rolling(window=20).mean()
print("\n最后5行数据:")
print(df.tail())
这段代码做了四件事:获取数据、清洗格式、查看概况、计算均线。你想想看,这就是量化分析的雏形了。
好了,环境搭好了,数据拿到了,Pandas也入门了。接下来你就可以拿着这些数据,开始你的量化探索了。记住,数据质量决定分析质量——这个坑我踩过,所以多说一句:拿到数据后,先检查有没有空值、异常值,别急着跑模型。