【问题标题】:Frequencies in a text file and creating a pie chart文本文件中的频率和创建饼图
【发布时间】:2016-04-29 20:28:03
【问题描述】:

我有一个非常大的文本文件。我想分析它并绘制这些分析。我所做的一项分析是找出 5 个最常见的词。

     f = open('story.txt','r')
        words = [x for y in [l.split() for l in f.readlines()] for x in y]
        data = sorted([(w, words.count(w)) for w in set(words)], key = lambda x:x[1], reverse=True)[:5] 

    print data

    most_words = [x[0] for x in data]
    times_used = [int(x[1]) for x in data]
    print most_words
    print times_used

显示这个:

[('the', 4826), ('of', 2276), ('and', 1825), ('a', 1761), ('to', 1693)]
['the', 'of', 'and', 'a', 'to']
[4826, 2276, 1825, 1761, 1693]

由于这是一个如此大的文件,因此需要一段时间来分析。首先,我想知道是否有办法以更快的方式做到这一点?其次,我想用这些数据创建一个饼图。我设法弄清楚如何用这些数据制作条形图,但制作饼图似乎让我望而却步。任何帮助都会很棒!

同样,如果有一种方法可以加快对大型文本文件的搜索速度,并且在进程中不使用太多 RAM,那么我在运行此程序时会听到我的计算机运行困难。谢谢!

.. 或者如果有任何您认为可能有帮助的帖子,请告诉我,我已经为我的问题寻找解决方案一个多小时了,并决定提出我自己的问题来寻求帮助!

【问题讨论】:

    标签: numpy matplotlib charts pie-chart frequency


    【解决方案1】:

    对于情节部分,您可以使用以下配方:

    import matplotlib.pyplot as plt
    
    words = [('the', 4826), ('of', 2276), ('and', 1825), ('a', 1761), ('to', 1693)]
    sizes, labels = [i[1] for i in words],[i[0] for i in words]
    plt.pie(sizes, labels=labels,autopct='%1.1i%%')
    plt.show()
    

    ,结果如下:

    您可以为颜色、爆炸等提供其他参数。查看thismatplotlib 演示。

    对于性能部分,我建议你看看这篇文章:

    Python program that finds most frequent word in a .txt file, Must print word and its count

    @ninjagecko 解决方案在我看来可能更快,但您必须对其进行测试并查看。

    【讨论】:

    • 你太棒了!另一个频率计数器工作得更好,饼图也很棒!我知道我在哪里犯了错误,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多