第三章:Python与金融数据分析

说实话,我见过太多人一上来就研究复杂的量化模型,结果连数据都拿不到。这就像想盖摩天大楼,结果连地基都没打。今天咱们就把地基夯实——从Python环境搭建到获取第一份股票数据。

3.1 为什么选Python做量化?

你可能要问:市面上那么多工具,为什么偏偏选Python?

我个人的经验是:Python在金融领域有三个无可替代的优势。第一,生态太丰富了。你想得到的金融数据接口、回测框架、机器学习库,几乎都有现成的。第二,代码写起来快。做量化研究,你80%的时间都在试错,Python能让你快速验证想法。第三,社区活跃。我在项目中遇到过的坑,基本都能在Stack Overflow上找到答案。

说白了,用Python做量化,就是站在巨人的肩膀上。

3.2 Anaconda:一站式环境搭建

很多新手会问:为什么要用Anaconda?直接用Python不行吗?

嗯,这里要注意。Anaconda相当于一个「全家桶」,它帮你装好了Python、Jupyter Notebook、以及常用的科学计算库。你想想看,如果手动装,光是解决各种库的依赖冲突就够你折腾半天。

我的建议: 初学者直接装Anaconda,省心。等以后熟练了,再考虑用Miniconda或纯Python环境。

安装步骤其实很简单:

  1. 去Anaconda官网下载对应系统的安装包
  2. 一路默认安装(Windows用户记得勾选「Add Anaconda to my PATH」)
  3. 打开终端或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())
避坑指南: 我曾经遇到过token失效的问题,折腾了半天才发现是token过期了。建议把token存在环境变量里,别硬编码在代码中。

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 知识体系总览

下面这张图是我自己整理的,把本章的核心逻辑串起来了:

Python金融数据分析知识体系 Anaconda环境 Pandas库 Tushare AkShare 量化分析与策略回测

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也入门了。接下来你就可以拿着这些数据,开始你的量化探索了。记住,数据质量决定分析质量——这个坑我踩过,所以多说一句:拿到数据后,先检查有没有空值、异常值,别急着跑模型。


专注资料整理