Tushare数据本地化多进程版本——如何快速一次性获取全部股票数据
在上一篇文章我们从Tushare平台获取数据并保存为.csv文件之后,又有一个问题浮现水面:
如果我们需要读取数据,那么通过什么方式读取数据最快呢?
一个免费的次优解:
根据VNPY官方公众号给出的测试结果,他们的DolphinDB在读取方面是最快的,应用层面最多的情况就是读取数据。
但是这个海豚数据库似乎需要付费~
于是我将目光看向了排名第二的Arctic。
关于arctic,可以直接上github看他们的官方文档。但是简单来说arctic数据库是基于MongoDB的,但是针对数据读写进行了优化!
免费!免费!免费!
重要事情说三遍,这个库免费,而且它并不差。
安装Arctic的坑:
首先,因为arctic基于mongodb,所以你需要先安装mongodb,这玩意儿csdn上教程太多了我就不写了。
下面讲一下安装这个数据库的坑,只有一个,就是pandas的版本要降到1.1.5这种1.1开头的版本,因为在后续pandas移除了panel这个部分,所以如果你直接安装的话会报错无法从pandas中导入panel。
pip install pandas==1.1.5
数据的读取和写入:
相较于Mysql,也是tushare平台推荐的方式。我个人认为arctic要简单非常多(至少在我的经历看来)。
首先,Mysql的macos版本会出现不少不可预知的安装问题,而且因为是mac系统,国内的解决贴非常少。(但是win10可能没有这个困惑)
其次,Mysql的代码前置的乱七八糟的东西还是蛮多的说实话,比如可以看一下tushare官方是如何介绍mysql的。。。
因为这玩意儿更像一个正儿八经的Access那样的数据库,而不是专门支持时序数据的arctic。
下面直接给出arctic的数据写入和读取代码!
import os
import pandas as pd
from arctic import Arctic
def log(text):
print('-' * 15)
print(text)
def write_data(lib):
current_dir = os.getcwd()
work_dir = os.path.join(current_dir, 'stock_finance')
for file in os.listdir(work_dir):
file_path = os.path.join(work_dir, file)
df = pd.read_csv(file_path)
file_name = file[:6]
# 写入数据
lib.write(file_name, df)
log(f'已写入:{file_name}')
# 连接到本地MONGODB
store = Arctic('localhost')
# 创建一个库
store.initialize_library('STOCK_FINANCE')
print(store.list_libraries())
# 连接数据库
lib = store['STOCK_FINANCE']
# 写入数据
write_data(lib)
# 读取数据
item = lib.read('000001.SZ')
data = item.data
可以看到的是,arctic无论是写入还是读取都异常简单。
# 写入数据
lib.write(file_name, df)
# 读取数据
item = lib.read('000001.SZ')
data = item.data
更多的内容可以参考官方文档。
这些内容都只是为了接下来做因子研究做准备,接下来可能还会分享关于A股市场的因子研究。在我刚刚步入Python大坑的时候,CSDN的论坛帖子的前辈给了我很多帮助,现在我想我有一定的能力回报这个社区,这就是互联网精神吧。
有兴趣的话欢迎大家关注我的个人公众号:梧承 Book House