158 lines
3.3 KiB
Markdown
158 lines
3.3 KiB
Markdown
|
|
# 连接器与变换操作参考
|
|||
|
|
|
|||
|
|
## ConnectorFactory — 3 种数据连接器
|
|||
|
|
|
|||
|
|
ConnectorFactory 通过 `type` 字段自动路由到对应的连接器。
|
|||
|
|
|
|||
|
|
### csv — CSV 文件连接器
|
|||
|
|
|
|||
|
|
从本地 CSV 文件加载 DataFrame。
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "csv", "path": "data/stock.csv", "encoding": "utf-8"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- `path`: 相对于 `data_dir`(默认 `ppt-st/data/`)或绝对路径
|
|||
|
|
- `encoding`: 默认 `utf-8`
|
|||
|
|
|
|||
|
|
### xlsx — Excel 文件连接器
|
|||
|
|
|
|||
|
|
从 Excel 文件加载 DataFrame。
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "xlsx", "path": "data/report.xlsx", "sheet_name": "Sheet1"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- `path`: 同 csv
|
|||
|
|
- `sheet_name`: 工作表名,默认第一个
|
|||
|
|
|
|||
|
|
### tushare — Tushare 金融数据连接器
|
|||
|
|
|
|||
|
|
从 Tushare Pro API 获取 A 股市场数据。
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"type": "tushare",
|
|||
|
|
"api_name": "pro_bar",
|
|||
|
|
"ts_code": "600519.SH",
|
|||
|
|
"start_date": "20240101",
|
|||
|
|
"end_date": "20241231"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
支持的 `api_name`:
|
|||
|
|
- `index_daily`: 指数日线数据(需 `ts_code` 或 `index_code`)
|
|||
|
|
- `pro_bar`: 通用日线数据,前复权(需 `ts_code`)
|
|||
|
|
|
|||
|
|
返回的 DataFrame 自动按 `trade_date` 升序排列,`trade_date` 列已转为 datetime。
|
|||
|
|
|
|||
|
|
前置条件: `TUSHARE_TOKEN` 环境变量或 `.env` 文件。
|
|||
|
|
|
|||
|
|
## DataFrameTransformer — 7 种变换操作
|
|||
|
|
|
|||
|
|
变换在 `transforms` 中定义,每个变换指定 `from`(数据源)和 `ops`(有序操作列表)。
|
|||
|
|
|
|||
|
|
### 多源合并
|
|||
|
|
|
|||
|
|
`from` 支持字符串(单源)或数组(多源 concat):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"from": ["stock_data", "index_data"], "ops": [...]}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
多源使用 `pd.concat(axis=1)` 按列合并。
|
|||
|
|
|
|||
|
|
### groupby — 分组聚合
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "groupby", "by": ["year"], "agg": {"close": "mean", "vol": "sum"}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### pivot — 透视表
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "pivot", "index": "trade_date", "columns": "indicator", "values": "value"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### compute — 计算新列
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "compute", "expr": "close / close.iloc[0] - 1", "output_col": "cumulative_return"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
使用 `pandas.DataFrame.eval()`,支持列名引用。
|
|||
|
|
|
|||
|
|
### filter — 条件过滤
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "filter", "condition": "close > 100 and vol > 10000"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
使用 `pandas.DataFrame.query()`。
|
|||
|
|
|
|||
|
|
### sort — 排序
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "sort", "sort_by": ["trade_date"], "ascending": true}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### rename — 重命名列
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"type": "rename", "map": {"trade_date": "日期", "close": "收盘价"}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### merge — 未实现
|
|||
|
|
|
|||
|
|
会抛 `NotImplementedError`。替代方案:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"from": ["src1", "src2"], "ops": [...]}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用 `from` 数组实现 concat,然后用其他 ops 整理。
|
|||
|
|
|
|||
|
|
## 常用组合模式
|
|||
|
|
|
|||
|
|
### 合并两个 Tushare 序列
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"datasources": {
|
|||
|
|
"stock": {"type": "tushare", "api_name": "pro_bar", "ts_code": "600519.SH"},
|
|||
|
|
"index": {"type": "tushare", "api_name": "pro_bar", "ts_code": "000300.SH"}
|
|||
|
|
},
|
|||
|
|
"transforms": {
|
|||
|
|
"combined": {
|
|||
|
|
"from": ["stock", "index"],
|
|||
|
|
"ops": [
|
|||
|
|
{"type": "rename", "map": {"close": "stock_close"}}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 计算累计收益率
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"ops": [
|
|||
|
|
{"type": "sort", "sort_by": ["trade_date"]},
|
|||
|
|
{"type": "compute", "expr": "close / close.iloc[0] - 1", "output_col": "累计收益率"}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 过滤后重命名
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"ops": [
|
|||
|
|
{"type": "filter", "condition": "trade_date >= '2024-01-01'"},
|
|||
|
|
{"type": "rename", "map": {"trade_date": "日期", "close": "收盘价"}},
|
|||
|
|
{"type": "sort", "sort_by": ["日期"]}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|