python中每列的高效多重计算

2024-04-24 11:40:45 发布

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

背景:

我对Python和编程都是新手。我想知道我的实现方法是正确的,还是应该做得更好。你知道吗

数据:

我有一个csv,大约有400种股票

Date, SH Ltd, Date, QS Ltd, Date, WX Ltd ...
26/02/18, 34, 16/06/13, 5634, 15/06/17, 100
27/02/18, 33, 17/06/13, 5763, 16/06/17, 100
28/02/18 ,35, 18/06/13, 6139, 17/06/17, 100
...

因此,每个第一列都有一些随机的开始日期,但所有日期都将从昨天开始结束。现在假设我想做三件事

1)计算最近252天的容量 2) 计算最差的三个2天的差距东股票。你知道吗

我的方法

我现在在想,我循环通过CSV的每一列,创建一个时间序列向量。然后我可以在上面运行一个方法来计算开始日期+2到今天的3天间隔。然后创建一个向量,把这个向量从大到小排序,然后吐出最小的3个。然后我用最后252天的时间,算出标准差,再乘以252的平方根。你知道吗

在此之后,我有2个输出

1)最差2天表现向量(最差5) 2) 卷的最后252天的数字

在这一点上,我把这个数据到一个二维性能和波动csv的csv。然后我继续循环其他每一列,直到它有数据并添加到上面的csv文件。你知道吗

我的问题:

这是一个非常低效的方法吗?与只使用一个向量进行一次计算相比,连续使用多个向量是否会大大降低我的程序的速度?你知道吗


Tags: csv数据方法date编程sh时间向量
1条回答
网友
1楼 · 发布于 2024-04-24 11:40:45

让我们先对问题和简短的答案进行一些清晰的解释,然后讨论一般的优化问题。你知道吗

我创建了一个包含更多行的文件,还从列名中删除了空格(使事情更简单)。你知道吗

Date,SH,Date,QS,Date,WX
26/02/18, 34, 16/06/13, 5634, 15/06/17, 100
27/02/18, 33, 17/06/13, 5763, 16/06/17, 100
1/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
2/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
3/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
4/03/18 ,39, 18/06/13, 6139, 17/06/17, 100
5/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
6/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
7/03/18 ,35, 18/06/13, 6114, 17/06/17, 100
8/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
9/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
19/03/18 ,35, 18/06/13, 6139, 17/06/17, 100

import pandas as pd

fn = "testlogs" WINDOW = 3

df = pd.read_csv(fn)

print(df.SH.rolling(WINDOW).std(ddof=0))

0          NaN
1          NaN
2     0.816497
3     0.942809
4     0.000000
5     1.885618
6     1.885618
7     1.885618
8     0.000000
9     0.000000
10    0.000000
11    0.000000
Name: SH, dtype: float64

有关VOL的更多信息,请参见here

现在,关于效率,“过早的优化是万恶之源”(Knuth)。在你的例子中,如果你只有400只股票,每天只有一行,那么100年的数据量不到14MB,而便宜的智能手机通常有16GB的RAM。因此,所有的数据都将存储在ram中,即使您多次读取每个值,VOL的计算也需要几秒钟的时间,CPU的使用率非常低。你知道吗

更多关于我的具体实现-我使用熊猫,具有以下优点: (1) 简短的代码 (2) 矢量计算效率

缺点: 需要学习这个图书馆,这可能是压倒性的初学者。你知道吗

相关问题 更多 >