2017-07-13 7 views
3

Je voudrais faire une distribution de fréquence de mot, avec les mots sur l'axe des x et le compte de fréquence sur l'axe des ordonnées.Faire un histogramme de fréquence à partir de la liste avec des éléments de tuple

J'ai la liste suivante:

example_list = [('dhr', 17838), ('mw', 13675), ('wel', 5499), ('goed', 5080), 
       ('contact', 4506), ('medicatie', 3797), ('uur', 3792), 
       ('gaan', 3473), ('kwam', 3463), ('kamer', 3447), 
       ('mee', 3278), ('gesprek', 2978)] 

J'ai essayé d'abord le convertir en une trame de données de pandas géants puis utilisez la pd.hist() comme dans l'exemple ci-dessous, mais je ne peux pas comprendre et réfléchir est en fait simple mais il me manque probablement quelque chose.

import numpy as np 
import matplotlib.pyplot as plt 

word = [] 
frequency = [] 

for i in range(len(example_list)): 
    word.append(example_list[i][0]) 
    frequency.append(example_list[i][1]) 


plt.bar(word, frequency, color='r') 
plt.show() 

Répondre

3

Vous ne pouvez pas passer les word s dans le matplotlib.pyplot.bar directement. Cependant, vous pouvez créer un tableau d'indices pour bar puis remplacer ces indices avec le words en utilisant matplotlib.pyplot.xticks:

import numpy as np 
import matplotlib.pyplot as plt 

indices = np.arange(len(example_list)) 
plt.bar(indices, frequency, color='r') 
plt.xticks(indices, word, rotation='vertical') 
plt.tight_layout() 
plt.show() 

enter image description here

Le for -loop pour créer word et frequency pourrait également être remplacé par une simple zip und liste décompactage:

word, frequency = zip(*example_list) 
+1

merci pour le commentaire, c'était ce que je cherchais, aussi le zip est très utile fonction :) – jjn

+0

s'il vous plaît définir ce que libs vous utilisez lorsque vous appelez « plt » et « np ». – biogeek

+0

@biogeek Ceux-ci ont déjà été définis dans la question, donc je pense qu'il était un peu difficile de baisser la réponse pour cela. Mais pour rendre la réponse plus autonome, je les ai également inclus dans le code. Merci pour le commentaire. :) – MSeifert

4

pandas géants en utilisant:

import pandas as pd 
import matplotlib.pyplot as plt 

example_list = [('dhr', 17838), ('mw', 13675), ('wel', 5499), ('goed', 5080), ('contact', 4506), ('medicatie', 3797), ('uur', 3792), ('gaan', 3473), ('kwam', 3463), ('kamer', 3447), ('mee', 3278), ('gesprek', 2978)] 

df = pd.DataFrame(example_list, columns=['word', 'frequency']) 
df.plot(kind='bar', x='word') 

enter image description here