-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_get_data.py
More file actions
67 lines (62 loc) · 3.42 KB
/
main_get_data.py
File metadata and controls
67 lines (62 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- encoding: utf-8 -*-
"""
@File: main_get_data.py
@Modify Time: 2025/4/12 11:52
@Author: Kevin-Chen
@Descriptions: 主程序: 数据获取与准备
"""
import os
from GetData.akshare_get_INDEX_data import akshare_index_main
from GetData.data_prepare import data_prepare, index_data_prepare
from GetData.tushare_get_ETF_data import get_etf_daily_data_all, get_etf_daily_data_increment
'''
本文件有以下功能:
1) 从 Tushare 获取 ETF 日频数据 (自动增量/全量判断取数)
具体数据获取的代码位于 GetData/tushare_get_ETF_data.py 文件中.
目前仅仅支持 Tushare, 使用前需要在 set_tushare.py 中设置你的 Tushare token.
获取的数据将以 dataframe 格式保存到 Data 文件夹下. 名称为 etf_daily.parquet.
etf_daily.parquet 的 dataframe 包括以下字段:
['ts_code', 'trade_date', 'pre_close', 'open', 'high', 'low', 'close', 'change', 'pct_chg', 'vol', 'amount']
你如果没有 Tushare 的权限. 你可以自行准备上述格式的 dataframe 数据并保存为 etf_daily.parquet.
2) 对 ETF 日频数据进行预处理, 生成一系列宽表数据帧
具体预处理的逻辑代码位于 GetData/data_prepare.py 文件中.
预处理后的数据将以 dataframe 格式保存到 Data 文件夹下. 名称为 wide_***_df.parquet.
预处理后的数据都是索引为日期, 字段为ETF代码的宽表数据帧.
3) 从AkShare 获取各类指数数据
具体数据获取的代码位于 GetData/akshare_get_INDEX_data.py 文件中.
目前仅仅支持 AkShare, AkShare 为免费接口, 无需设置 token.
获取的数据将以 dataframe 格式保存到 Data/Index 文件夹下. 名称为 global_xxx_daily.parquet 或 china_xxx_daily.parquet.
global_xxx_daily.parquet 和 china_xxx_daily.parquet 的字段并不统一
日期不统一, 有些是日频数据, 有些是周频数据, 有些是月频数据.
4) 对指数数据进行预处理, 生成宽表数据帧
具体预处理的逻辑代码位于 GetData/data_prepare.py 文件中.
预处理后的数据将以 dataframe 格式保存到 Data/Index 文件夹下. 名称为 wide_index_***.parquet
预处理后的数据都是索引为日期, 字段为指数代码的宽表数据帧.
'''
daily_etf_file = "./Data/etf_daily.parquet" # ETF日频数据文件名
wild_df_save_path = "./Data/" # 预处理后的一系列宽表数据帧存放文件夹
index_df_save_path = "./Data/Index" # 指数数据存放文件夹
# 判断 daily_etf_file 文件是否存在, 若不存在则全量取数
if not os.path.exists(daily_etf_file):
print("获取所有ETF日频数据 (全量取数)")
# 获取所有ETF数据
get_etf_daily_data_all(daily_etf_file)
# 数据预处理
data_prepare(min_data_req=500, # 最小数据量要求, 低于这个数据量的ETF会被剔除
read_file=daily_etf_file, # 读取文件
save_path=wild_df_save_path # 保存文件路径
)
# 若文件已经存在则增量取数
else:
print("获取所有ETF日频数据 (增量取数)")
# 增量获取所有ETF数据
get_etf_daily_data_increment(daily_etf_file)
# 数据预处理
data_prepare(min_data_req=500,
read_file=daily_etf_file,
save_path=wild_df_save_path
)
# 从AkShare获取各类指数数据
akshare_index_main(index_df_save_path)
# 处理指数数据为宽表
index_data_prepare(index_df_save_path)