NLTK:模态频率的条形图

时间:2017-07-19 17:06:42

标签: python nltk

我是一名nltk初学者。最近,我在绘制模态频率的条形图时遇到了困难。

colors = 'rgbcmyk'
def bar_chart(categories, words, counts):
    import pylab
    ind = pylab.arange(len(words))
    width = 1 / (len(categories) + 1)
    bar_groups = []
    for c in range(len(categories)):
        bars = pylab.bar(ind+c*width, counts[categories[c]], width, 
                         color=colors[c % len(colors)])
        bar_groups.append(bars)
    pylab.xticks(ind+width, words)
    pylab.legend([b[0] for b in bar_groups], categories, loc = 'upper left')
    pylab.ylabel('Frequency')
    pylab.title('Frequency of Six Modal Verbs by Genre')
    pylab.show()

import nltk
from nltk.corpus import brown
genres = ['news', 'religion', 'hobbies', 'government', 'adventure']
modals = ['can', 'could', 'may', 'might', 'must', 'will']
cfd = nltk.ConditionalFreqDist(
        (genre, word)
        for genre in brown.categories()
        for word in brown.words(categories = genre)
        if word in modals)
counts = {}
for genre in genres:
    counts[genre] = [cfd[genre][word] for word in modals]
bar_chart(genre, modals, counts)

格式可以在运行函数'bar_chart'后由Python提供,但无法看到该栏。我怀疑Python是不是从棕色读取数据,所以我使用了:

cfd.tabulate(conditions = genres, samples = modals)

输出:

             can could   may might  must  will 
      news    93    86    66    38    50   389 
  religion    82    59    78    12    54    71 
   hobbies   268    58   131    22    83   264 
government   117    38   153    13   102   244 
 adventure    46   151     5    58    27    50 

似乎Python读取数据。我想确保错误在哪里。非常感谢你。

2 个答案:

答案 0 :(得分:2)

我总是讨厌处理条形图,尽量抽出尽可能多的努力。一种方法是使用Pandas将数据作为DataFrame加载,然后使用其绘图界面(使用matplotlib)创建条形图。

所以你可以摆脱bar_chart函数并执行类似的操作:

import pandas as pd

df = pd.DataFrame(list(counts.values()), counts.keys(), modals)
df.plot(kind='bar')

据说显示图像的麻烦实际上取决于你正在使用的环境。如果你在Jupyter,你可以使用魔术命令%matplotlib inline,并在调用绘图后立即弹出图像方法。如果您正在编写脚本并希望保存图像,则可以执行以下操作:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df.plot(kind='bar', ax=ax)
plt.tight_layout()
plt.savefig('some file name.png')

你应该得到这样的东西: enter image description here

答案 1 :(得分:0)

我想知道您是否尝试从cmdline或某些IDE运行它。在后一种情况下,IDE可能会阻止显示图表。尝试命令行。