你需要这样用QADataStruct
发布于 22 天前 作者 J-1n 274 次浏览 最后一次编辑是 21 天前 来自 问答

本贴已得到解决。现特留此贴给那些还在学习QA中的人。若您有更多的意见或建议,请不吝赐教!

原帖内容

----------------事件概述---------------- 对比电脑读取CSV数据、MongoDB数据及QA本地数据(其实也是存在MongoDB中)的速度。 理论上来说读取数据库肯定比比读取CSV文件快。 然而。。。请继续往下看

----------------电脑概况---------------- 系统:Win10 64位 专业版 内存:16G 硬盘:固态硬盘

----------------数据来源---------------- CSV数据:自行抓取的A股市场所有股票从2017-06-15到2020-01-23的日线数据; MongoDB数据:就是把上面的CSV数据文件存入到MongoDB中; QA本地数据:进入client后,先save all,然后在策略中选取2017-06-15到2020-01-23的股票日线数据。

----------------策略思路---------------- 就是一个非常简单的测试,可能都谈不上策略。 遍历每支股票,计算出其五日均线,找到五日均线中的最大值,然后把结果存到excel表中。

----------------跑分结果---------------- 在数据和代码几乎完全相同的情况下,分别把三种不同的数据格式转换成pandas.DataFrame, 然后挨个单独跑策略,耗时情况如下: QA(QA.DataStruct→pd.DataFrame):255秒 MongoDB(json→pd.DataFrame):48秒 CSV(csv→pd.DataFrame):29秒

看到这个结果,我也只能用[黑人问号脸.jpg]来表达当时的感受了。

----------------作者疑问---------------- 是否属于操作不当?还望大佬慷慨解答为谢!

----------------相关附件---------------- 由于论坛好像不能上传附件,所以源代码请到我github去查看吧https://github.com/J-1n/Mongo_vs_CSV 或者从网盘中下载完整的代码+数据文件链https://pan.baidu.com/s/1RfWXIJG2kHuAZnCkOqqhGw 提取码: gv7j

7 回复

image.png

这种操作简直交丧心病狂

加上max 你看看要几秒 image.png

我每一个教程里都无数遍呼吁不要用for循环 QADataStruct也是专门为大量股票来优化的

重新总结一下

  1. 你的场景有独特性 在全量数据读取的时候 csv/hdf5模式是走io的 io-》内存的速度在 1gb/s 如果是ssd 而 网卡的模式 (数据库/rpc) 传输速度收到网卡限制 在10mb/s 这个天然会慢

  2. 钻研精神非常好 但是你的代码非常完美的表达了一个错误示范 pandas 很多时候就是被非常不合理的方式给用慢了 大量重复创建索引和内存拷贝会非常消耗速度 导致了你以为的速度慢

  3. 示例已经给了 你可以自己跑一边试试 看看我写的速度到底是不是你所震惊的

@yutiansut 非常感谢天神的亲自莅临并详细指导。用了天神的方法后,耗时确实降了。我就说嘛,255秒肯定是哪里操作不当。看来还是自己对QA的了解不够。

回到顶部