导入后组织数据的好方法是什么

时间:2019-10-29 09:48:09

标签: python database pandas dataframe data-structures

我为使用不同材料的实验进行了测量,我想将这些材料导入python中以便以后进行分析。我提供的原始数据为每种材料都有一个文件夹。在每个文件夹中,都有可能存在用于不同形式材料的子文件夹,最后一级是文件夹,其名称包含实验中2个不同方面的值,这些值可以更改。最后,这些文件夹包含同一实验的多次运行的原始数据文件,我知道该如何导入到熊猫数据框中。

这些原始数据文件中包含的数据实质上是一张表格,其中包含实验运行期间不同时间点的测量值。可以找到一个示例原始文件here,并且我已经包含了一个示例文件夹结构here(txt文件只是为了允许我创建文件夹)。我打算对每个数据集进行某种形式的曲线拟合,我很欣赏它不是我要共享的实际数据,我对上下文不是很特别,但是我希望这对于更笼统的问题不是太重要关于组织这样的结构。

我正在寻找一种遍历此结构并以合理的结构化方式导入数据以支持进一步分析的方法。我当时想我可以将嵌套字典与该材料的字典一起使用,然后每个实验条件都需要更多的子字典,但是字典对于切片数据而言并不理想。理想情况下,我希望能够为磨机速度为5个单位的所有运行调用数据。

我是使用python进行数据分析的初学者,因此我可以想象需要进行澄清,我将尝试立即进行更新。

2 个答案:

答案 0 :(得分:0)

如果没有更多有关数据的信息就很难说,但是您可能为此类甚至类拥有一个自定义类,例如一种用于材料,另一种用于实验。如果您提供了示例结构,我可以修改答案以包含一些示例代码。

编辑:这应该为您提供一个基本结构:

class MaterialCollection:
    def __init__(self,name,mats):
        self.name = name
        self.materials = materials #an array of Materials

    def __getitem__(self,i): #allows you to do MaterialsCollection['Iron']
        for mat in self.materials:
            if mat.name == i:
                return mat

class Material:
    def __init__(self, name,children):
        self.name = name
        self.submaterials = children #an array of submaterials


class SubMaterial:
    def __init__(self,name,parentMaterial,experiments ):
        self.name = name
        self.parentMaterial= parentMaterial
        self.experiments = experiments #an array of experiments



class Experiment:
    def __init__(self,filename,idi,submaterial):
        self.filename = filename
        self.idi = idi
        self.submaterial= submaterial
        self.material = self.submaterial.parentMaterial


    def parseData(self):
        f = open(filename,'rb').read()
        #do something with your data ex:
        self.speed = f[0]

答案 1 :(得分:0)

  

一种明智的结构化方法来支持进一步分析

一种明智的,结构化的数据存储方式位于数据库中。

如果您只是习惯使用Python,我不想增加工作量,但这是关系数据库的理想用例。就个人而言,我将使用SQLite和sqlite3 Python软件包。

在SQL中,创建一个类似于以下内容的表:

create table experimental_results (
    material_name text,
    facet_1_name  text,
    facet_2_name  text,
    date_of_run   date,
    v1            real,
    v2            real,
    ...           
);

然后按照SQLite examples查询数据。

相关问题