使用Python筛选大型数据集并存储要在另一个脚本中分析的数据位

时间:2017-05-14 04:35:45

标签: python arrays storage analysis

我已经知道自己想做什么,但我不确定这是否是最佳方式。要点是我拥有大量数据。这些数据作为具有我可以轻松提取的属性的对象存储在集群中。我正在根据对象的一个​​参数筛选这些数据,并随之拉出一些其他属性。然后该脚本应该进一步分析数据,但这方面不是问题。

我对如何存储我想要的数据的想法是创建一个类,我们称之为'cutData'。并遍历原始数据集中的所有对象,创建一个新的,更简单的对象进行分析。

这是一些伪代码来说明我的意思:

class cutData(object):
    def _init_(self, a, b, c, d):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
#For loop
    #Call parameter for a (requires some shenanigans)
    #Call parameter for b-d (trivial)
    #Assign to object cutData

以下是我的问题:

  1. 对象类中的'a'是从原始数据的一个参数计算的时间尺度差异。使用其他脚本调用时,此参数以下列形式给出:

    Vector([[39552, 39553], [123166, 12476], [203800, 203900]], dtype = int32)
    
  2. 因此,对于数据中的每个对象,此参数采用多个值。其他3个参数很容易分离。但是我不知道python的语法,它允许我为这个时间刻度参数的每个indice创建单独的对象,每个参数应该带有b,c和d,它们在集群数据中的每个对象都是相同的。值得注意的是,虽然我有三个索引,但是没有设定值的设定值。

    这样做的最终意义是,如果a有9个时间刻度索引,则需要创建9个对象,每个对象具有相同的b,c和d,然后再转移到群集上的下一个对象。

    1. 如上所述,我的想法是创建一大组对象,并使用方法调用我创建的每个对象的各个方面。我不太熟悉脚本如何存储大量数据。它是在脚本运行时存储在内存中,一旦完成收集就可以调用它。或者我是否需要将其写入文件才能从文件中调用它?这个问题更多地与我的经验不足有关,如果我写的是不可理解的,请随时让我详细说明。
    2. 感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

我会在前面说我不太明白你在这里使用什么数据,或者在存储它之前你可能需要或不需要做任何计算/处理;如果这个答案没有真正帮助让我知道,并试图更具体一点:)。话虽如此,我会尽力帮助。

我的一些一般性观察:

  • 如果要导出较大数据集的子集,并且只需要移动数据,而不需要任何单独的方法来操作或转换数据(想想使用类中的数据执行操作的类方法)例如,您可能希望将此数据存储为字典。然后,您可以将该字典序列化为json,然后您可以轻松地将其作为字典重新加载到另一个脚本中。 这很简单:

    导入json export_data = {}

    使用较大集合的迭代添加数据,这些迭代符合您的导出标准......

    export_data ['data_identifier_here'] = {'key':'value','other_key':'other_value'} 使用open(“exported_data.json”,“w”)作为f:     json.dump(export_data,f)

    将其加载回来:

    open(“exported_data.json”,“r”)为f:     exported_data = json.load(f)

如果你这样做,你需要在添加数据时对数据进行任何必要的计算/处理,或者只是将你想要的所有内容转储到该特定事物的密钥下,然后让另一个脚本执行任何所需的处理。

  • 如果一件事有多个值,它应该是一个列表而不是字符串,int或其他什么。无论您是坚持使用基于类的方法还是使用词典,这都适用。
  • 如果您确定要继续使用cutData的类实例,则可以使用pickle模块序列化实例。如果您有多个类实例,则可以选择它们的列表。我非常确定当你取消数据时,你需要导入你保存它时所用的相同类别。
  • 至于关于内存的问题:是的,类实例存储在内存中,直到没有更多引用它们为止,此时它们会自动被垃圾回收。由于您要将某些内容导出为另一个脚本可以轻松使用的格式,因此您需要将此数据写入文件。
  • 如果你真的需要类方法并且能够在每个方法上操作/获取数据,但是你不想弄乱特定的酸洗实例,你可以创建一个实例列表,然后为每个实例创建一个抓住它的 dict 并将其打包在json中。这样你就可以获得原始类的所有属性,但是没有代码。 您可以在提取要导出的数据时运行所需的任何方法,并且在完成所有操作后,可以保存每个实例的所有已处理数据。

这可能类似于:

# an example class; you can do the same with your cutData
class fruit(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color
    # you can define any methods you need to manipulate the data in this class, and then run them

a = fruit("apple", "red")
o = fruit("grape", "purple")
fruits = [a, o] # a list of class instances
data = [] # a list that just holds class data as a dict for each, and not instances
for i in fruits:
    data.append(i.__dict__)
# you can now serialize the data list however you like, keeping the data but not the methods

让我知道这是否有帮助,或者它是否有用。