【问题标题】:How to plot a graph from a txt file that is not properly formatted?如何从格式不正确的 txt 文件中绘制图形?
【发布时间】:2021-08-30 02:18:04
【问题描述】:

我需要根据给定文本文件中的数据绘制图表,但文本文件的格式并不正确,无法轻松提取数据。有没有什么方法可以自动将我需要的数据提取到适当的列表或数据框中,在类似 Jupyter notebook 和 python 的东西中轻松绘制图表?这是文件当前的样子:

    ###########
    Average Hybridsort CPU time, array size 1: 110
    Average Mergesort CPU time, array size 1: 98
    
    Average Hybridsort comparisons, array size 1: 0
    Average Mergesort comparisons, array size 1: 0
    ###########
    Average Hybridsort CPU time, array size 2: 118
    Average Mergesort CPU tim, array size 2: 156
    
    Average Hybridsort comparisons, array size 2: 0
    Average Mergesort comparisons, array size 2: 1
    ###########
    Average Hybridsort CPU time, array size 3: 133
    Average Mergesort CPU time, array size 3: 175
    
    Average Hybridsort comparisons, array size 3: 1
    Average Mergesort comparison, array size 3: 4
    ###########
    Average Hybridsort CPU time, array size 4: 121
    Average Mergesort CPU time, array size 4: 170
    
    Average Hybridsort comparisons, array size 4: 2
    Average Mergesort comparisons, array size 4: 6
    ########### (and so on...)

所以文件中有明确的格式和模式,但我不确定如何仅提取绘制图形所需的值。 所以我试图从中提取数据并绘制两个图表:Hybridsort CPU Time 和 Mergesort CPU 时间与数组大小的关系图(因此在一个图中有两条线图),以及 Hybridsort 比较图和 Mergesort 比较与数组大小的比较(也一张图中的两条线图)。我熟悉 jupyter notebook 和 python,并希望将它们绘制在那里,但也欢迎使用其他方法。谢谢!

【问题讨论】:

    标签: python dataframe text graph extract


    【解决方案1】:

    您需要进行一些搜索和替换,以确保所有预期标签的名称一致(有些是复数形式,有些不是,等等)

    然后你可以使用set()提取所有标签。

    然后您可以在循环中解析出其他值。我已将数据放入字典中,如果便于绘图,您可以采用不同的格式。

    txt = """"
    ###########
    Average Hybridsort CPU time, array size 1: 110
    Average Mergesort CPU time, array size 1: 98
    
    Average Hybridsort comparisons, array size 1: 0
    Average Mergesort comparisons, array size 1: 0
    ###########
    Average Hybridsort CPU time, array size 2: 118
    Average Mergesort CPU time, array size 2: 156
    
    Average Hybridsort comparisons, array size 2: 0
    Average Mergesort comparisons, array size 2: 1
    ###########
    Average Hybridsort CPU time, array size 3: 133
    Average Mergesort CPU time, array size 3: 175
    
    Average Hybridsort comparisons, array size 3: 1
    Average Mergesort comparisons, array size 3: 4
    ###########
    Average Hybridsort CPU time, array size 4: 121
    Average Mergesort CPU time, array size 4: 170
    
    Average Hybridsort comparisons, array size 4: 2
    Average Mergesort comparisons, array size 4: 6
    """
    
    data = {}
    labels = set([x.split(",")[0] for x in txt.split("\n") if x.startswith("Average")])
    print(labels)
    for label in labels:
        for line in txt.split("\n"):
            if line.startswith(label):
                line_split = line.split(':')
                x = int([x for x in line_split[0].split() if x.isdigit()][0])
                y = int(line_split[1])
                if label not in data.keys():
                    data[label] = [(x, y)]
                else:
                    data[label].append((x, y))
    print(data)
    

    输出:

    {'Average Hybridsort comparisons', 'Average Mergesort CPU time', 'Average Mergesort comparisons', 'Average Hybridsort CPU time'}
    {'Average Hybridsort comparisons': [(1, 0), (2, 0), (3, 1), (4, 2)], 'Average Mergesort CPU time': [(1, 98), (2, 156), (3, 175), (4, 170)], 'Average Mergesort comparisons': [(1, 0), (2, 1), (3, 4), (4, 6)], 'Average Hybridsort CPU time': [(1, 110), (2, 118), (3, 133), (4, 121)]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-22
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多