创建Python管道以转换数据

时间:2020-05-22 16:20:52

标签: python

大家好,

我对Python完全没有经验,想问一下是否可以帮助我如何在Python中建立管道。首先将一个csv文件(无流数据)导入Python并转换此数据文件,以便我可以将转换后的数据用于机器学习分析。

一段时间以来,我一直在使用生成策略代码来交易股票市场的软件。 该软件结合了不同的指标。在开始制定策略之前,您必须手动将指标数量设置在1到5之间。 如果指示器为1,则日志文件仅包含一列带有指示器的列。如果Python代码能够识别数据文件中使用的指示符数量并转换所有数据,那就太好了。 例如,我将指标的数量设置为3。在构建过程之后,日志文件如下所示:

GSB_ID          Indic. 1 ID     Indic. 2 ID     Indic. 3 ID
125783-x8nh6    DMIMinus        AdaptiveMovAvg  DMIMinus
042610-UuLxc    DMIMinus        GSB_Highest     ADXR
544959-uZimb    ADXR            AvgTrueRange    DMIMinus
204155-NxrYo    AdaptiveMovAvg  GSB_Highest     GSB_Highest

Column1显示策略名称。 第2列至第4列使用的3个指标。通常,每个策略有3个不同的指标,但是有时同一指标会被多次使用。例如,第一行中显示的策略:DMIMinus在该策略中使用了两次。

转换管道: 对于每个策略(行),我想查看指标使用的次数。我想将显示的日志文件转换为如下内容:

GSB_ID AdaptiveMovAvg ADXR AvgTrueRange DMIMinus GSB_Highest
125783-x8nh6    1   0   0   2   0
042610-UuLxc    0   1   0   1   1
544959-uZimb    0   1   1   1   0
204155-NxrYo    1   0   0   0   2

因此对于第一行的策略:AdaptiveMovAvg一次使用(1),DMIMinus两次使用(2)。

有关数据的更多信息: 日志文件最多可以包含100,000个策略(行)。 该软件最多可以使用100个不同的指标,因此转换将产生100个不同的列。有时会添加新的指标,因此有些灵活性会很好。

如果您能帮助我朝正确的方向在Python中进行设置,我将不胜感激。预先感谢!

祝一切顺利,再次感谢您的帮助, 沙龙

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

from collections import Counter
def read_and_transform_log_file():
    all_indicators = set()
    data = []

    with open("logfile.txt", "r") as input_data:
        input_data.readline()
        for line in input_data:
            strategy, *indicators = line.strip().split()
            indicators = Counter(indicators)
            all_indicators.update(indicators.keys())
            data.append((strategy, indicators))

    all_indicators = list(all_indicators)
    with open("output.txt", "w") as output:
        print("\t".join(["GSB_ID"] + all_indicators), file=output)
        for strategy, indicators in data:
            row = [strategy] + [str(indicators.get(x, 0)) for x in all_indicators]
            print("\t".join(row), file=output)

输出

GSB_ID  ADXR    DMIMinus    AdaptiveMovAvg  GSB_Highest AvgTrueRange
125783-x8nh6    0   2   1   0   0
042610-UuLxc    1   1   0   1   0
544959-uZimb    1   1   0   0   1
204155-NxrYo    0   0   1   2   0