第4章:Python与金融数据——环境搭建与数据处理实战
说实话,做量化投资这么多年,我见过太多人一上来就急着写策略。结果呢?环境没配好,数据拿不到,折腾半天连个K线都画不出来。这一章,咱们就把地基打牢。
4.1 Python环境搭建:为什么我推荐Anaconda
刚入行那会儿,我还在手动装Python、装包、配路径。遇到依赖冲突,那叫一个头疼。后来用了Anaconda,嗯,真香。
Anaconda是什么? 说白了,就是一个Python全家桶。它帮你装好了Python解释器、常用科学计算库,还自带一个包管理器叫conda。
核心优势:
- 一键安装,省去手动配置的麻烦
- 环境隔离,不同项目用不同Python版本
- 预装200+常用库,包括pandas、numpy、matplotlib
下载地址我就不贴了,直接搜“Anaconda下载”,选对应系统的版本。安装时记得勾选“Add Anaconda to my PATH environment variable”。
注意: 我曾经遇到过学生装完Anaconda后,又去官网单独装了Python,结果两个版本冲突,import pandas都报错。记住,有Anaconda就够了,别画蛇添足。
4.2 Pandas基础:处理金融数据的瑞士军刀
金融数据长什么样?说白了就是时间序列。日期是索引,开盘价、收盘价、成交量是列。Pandas就是为这种数据而生的。
核心数据结构:
- Series:一维数组,带标签。比如某只股票每天的收盘价。
- DataFrame:二维表格,行和列都有标签。比如多只股票的历史行情。
我习惯用pandas来清洗数据。举个例子,你从Yahoo Finance拿到的数据,经常有缺失值。用df.dropna()直接扔掉,或者用df.fillna(method='ffill')向前填充。
import pandas as pd
# 创建一个简单的DataFrame
data = {
'日期': ['2024-01-01', '2024-01-02', '2024-01-03'],
'收盘价': [100.5, 101.2, 99.8],
'成交量': [10000, 12000, 9500]
}
df = pd.DataFrame(data)
print(df.head()) # 查看前几行
我的习惯: 拿到数据后,先调df.info()看数据类型,再调df.describe()看统计特征。这一步能帮你发现很多问题,比如某列全是NaN,或者价格出现了负数。
4.3 NumPy基础:高性能数值计算
Pandas底层依赖NumPy。你想想看,金融数据动不动几十万行,用Python原生列表做计算,慢得你想砸电脑。NumPy用C语言实现,速度能快几十倍。
核心概念:
- ndarray:N维数组,所有元素类型相同
- 向量化操作:不用写循环,直接对整个数组做运算
import numpy as np
# 创建数组
prices = np.array([100.5, 101.2, 99.8, 102.1, 98.5])
# 计算收益率
returns = (prices[1:] - prices[:-1]) / prices[:-1]
print(returns) # 一行代码搞定,不用写for循环
我在做因子分析时,经常用NumPy的矩阵运算。比如计算协方差矩阵,np.cov(returns_matrix)一行搞定。如果用纯Python写,得嵌套三层循环。
避坑指南: 我曾经在计算夏普比率时,直接用Python列表做除法,结果跑了一个小时没出结果。换成NumPy数组后,3秒搞定。记住,金融数据计算,能用NumPy就别用原生列表。
4.4 获取金融数据:Yahoo Finance API实战
数据是量化投资的命根子。Yahoo Finance提供了免费的API,虽然偶尔抽风,但胜在方便。
安装yfinance库:
pip install yfinance
获取单只股票数据:
import yfinance as yf
# 下载苹果股票数据
aapl = yf.download('AAPL', start='2024-01-01', end='2024-12-31')
print(aapl.head())
获取多只股票数据:
# 同时下载多只股票
tickers = ['AAPL', 'MSFT', 'GOOGL']
data = yf.download(tickers, start='2024-01-01', end='2024-12-31')
# 只取收盘价
close_prices = data['Close']
print(close_prices.head())
注意: Yahoo Finance的API有请求频率限制。我曾经写了个循环下载500只股票,结果被IP封了24小时。建议每次请求间隔1秒,或者用time.sleep(1)控制节奏。
4.5 知识体系总览
下面这张图,是我自己总结的本章知识结构。你把它存下来,学完这章后对照着检查,看哪个环节还不熟。
4.6 实战小练习:从数据获取到简单分析
光说不练假把式。咱们来个完整的例子,把今天学的串起来。
import pandas as pd
import numpy as np
import yfinance as yf
# 1. 获取数据
ticker = 'AAPL'
data = yf.download(ticker, start='2024-01-01', end='2024-12-31')
# 2. 计算日收益率
data['Return'] = data['Close'].pct_change()
# 3. 计算移动平均线
data['MA20'] = data['Close'].rolling(window=20).mean()
# 4. 查看结果
print(data[['Close', 'Return', 'MA20']].head(10))
# 5. 简单统计
print(f"平均日收益率: {data['Return'].mean():.4f}")
print(f"收益率标准差: {data['Return'].std():.4f}")
print(f"最大回撤: {data['Close'].min():.2f}")
我的建议: 第一次跑这个代码,别急着改参数。先理解每一步在干什么。等跑通了,再换成其他股票试试,比如'TSLA'、'BTC-USD'。你会发现,不同资产的收益率特征差别很大。
嗯,这一章的内容就到这儿。环境搭好了,数据拿到了,基础库也练了。下一章咱们开始真正做资产配置优化,到时候这些基础都会用上。
公众号:蓝海数据掘金营,微信deep3321