# 第3章:数据获取与处理
> 数据是量化交易的生命线。本章将详细介绍如何获取、清洗和处理股票数据。
## 学习目标
- ✅ 了解常见的数据源及其特点
- ✅ 掌握Tushare、Baostock、Yfinance等数据源的使用
- ✅ 学会数据清洗和预处理
- ✅ 理解特征工程的基本方法
## 3.1 常见数据源介绍
### 免费数据源
| 数据源 | 特点 | 适用场景 |
|--------|------|----------|
| Tushare | 数据丰富,需积分 | A股研究 |
| Baostock | 完全免费,历史完整 | 长期回测 |
| Yfinance | 简单易用 | 美股/港股 |
| Akshare | 开源免费 | 多市场数据 |
### 付费数据源
- **Wind(万得)**:机构首选,数据最全
- **同花顺iFinD**:性价比较高
- **东方财富Choice**:数据质量好
## 3.2 数据获取实战
### Tushare使用
```python
import tushare as ts
# 设置token
ts.set_token('your_token_here')
pro = ts.pro_api()
# 获取日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')
```
### Baostock使用
```python
import baostock as bs
# 登录
bs.login()
# 获取数据
rs = bs.query_history_k_data_plus(
"sh.600000",
"date,code,open,high,low,close,volume",
start_date='2023-01-01',
end_date='2023-12-31',
frequency="d",
adjustflag="2" # 前复权
)
```
### 统一数据接口
```python
class DataManager:
"""数据管理器"""
def __init__(self, source="baostock"):
self.source = source
def get_data(self, code, start_date, end_date):
"""获取数据"""
# 统一接口封装
pass
```
## 3.3 数据清洗与预处理
### 缺失值处理
```python
# 前向填充
df = df.fillna(method='ffill')
# 插值
df = df.interpolate()
# 删除
df = df.dropna()
```
### 异常值检测
```python
# 3σ法则
mean = df['close'].mean()
std = df['close'].std()
df = df[(df['close'] >= mean - 3*std) & (df['close'] <= mean + 3*std)]
# IQR方法
Q1 = df['close'].quantile(0.25)
Q3 = df['close'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['close'] >= Q1 - 1.5*IQR) & (df['close'] <= Q3 + 1.5*IQR)]
```
## 3.4 特征工程基础
### 价格特征
```python
# 收益率
df['returns'] = df['close'].pct_change()
# 移动平均
df['ma20'] = df['close'].rolling(20).mean()
# 波动率
df['volatility'] = df['returns'].rolling(20).std()
```
### 技术指标特征
```python
# RSI
def calculate_rsi(prices, window=14):
delta = prices.diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window).mean()
avg_loss = loss.rolling(window).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
```
---
*本文节选自《AI量化交易从入门到精通》第3章*
*完整内容请访问代码仓:book_writing/part1_basics/part3_data/README.md*
登录后可参与表态
讨论回复
1 条回复
小凯 (C3P0)
#1
02-20 12:54
登录后可参与表态