Python+Postgresql:调用数据进行计算的理想方法(滚动/扩展窗口)+多线程?

2024-05-04 00:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的数据库(大约100个变量和几百万行)由股票数据组成。我设法通过sqlalchemy(postgreql+psycopg2)将python与数据库连接起来。我在云上运行它。你知道吗

原则上我想做几件事: 1) 所有可能组合的回归:我对每只股票进行简单的回归,即XYZ上的ABC和ABC上的XYZ,这对n=100只股票进行回归,得到n(n+1)/2个组合。 ->;我想到一个函数,它调用股票对,进行两次回归,比较结果,并根据一些标准选择一个。 我的问题是:有没有一个有效的方法来调用“阶乘”?你知道吗

2)滚动窗口:为了避免数据过载,我想只调用调查数据框,即30天,然后每天滚动,意思是我的周期是:

 1: 1D-30D
 2: 2D-31D and so on

这意味着我总是在第一天删除数据帧,然后在数据帧的末尾添加另一行。所以我有两个步骤,从第一天开始,从数据库中读取下一行。 我的问题是:这是一种有意义的方法还是Python有更好的方法?你会怎么做?你知道吗

3)扩展窗口:我没有删除第一行并添加另一行,而是保留30天,再添加30天,然后运行我的回归。这里的问题是,在某个时候,我会接受所有可能对内存来说太大的数据? 我的问题是:什么是解决办法?你知道吗

4)当我在云上运行我的分析时(比我自己的pc多几个内核),事实上我可以使用多线程,发送“批处理”作业,并让Python并行处理。我想把我的数据集分成4x25个股票,让它并行运行(垂直拆分),还是最好水平拆分? 另外,我正在使用Jupyter;我想知道如何在这里找到最好的方法,通常我有一个shell脚本调用_程序.py. 这里是一样的吗?你知道吗


Tags: and数据方法函数gt数据库标准so
1条回答
网友
1楼 · 发布于 2024-05-04 00:36:10

让我试着明确地给出答案,并记下我的观察结果。你知道吗

  1. 根据你的描述,我想你把每一张股票作为一个变量,并试图在它们之间进行两两线性回归。好消息是这是高度平行的。你所需要做的就是生成所有可能配对的唯一组合,并执行回归,然后只保留那些符合你标准的模型。你知道吗
  2. 既然股票是你的变量,我假设行是它们的价格或类似的值,但肯定是一些时间序列数据。如果我的假设是正确的,那么滚动窗口方法就有问题。在创建这些滚动窗口时,您隐式地做的是使用名为bootstrapping的数据采样方法,该方法使用随机但重复的采样。但是由于只是滚动你的数据,你没有使用随机抽样,这可能会给你的回归结果带来问题。最好的情况下,这个模型可能只是训练过度,最坏的情况下,我无法想象。因此,放下这个appraoch。另外,如果它是一个时间序列数据,那么窗口化的整个概念无论如何都是值得怀疑的。你知道吗
  3. 由于上述同样的原因,扩大窗户是没有好处的。你知道吗
  4. 关于内存和可处理性-我认为这是一个很好的场景,可以使用Spark。它正是为此目的而构建的,并且对python有极好的支持。数百万个数据点对Spark来说没什么大不了的。另外,您将能够大规模并行化您的操作。使用云基础设施还可以让您在可配置性和可扩展性方面获得优势,而不会感到头痛。我不知道为什么人们喜欢使用Jupyter,即使是对于这样的批处理任务,但是如果你执意要使用它,那么PySpark内核也会受到Jupyter的支持。垂直分裂可能是正确的方法。你知道吗

希望这些能回答你的问题。你知道吗

相关问题 更多 >