Tengo una larga lista de palabras, y quiero generar un histograma de la frecuencia de cada palabra en mi lista. Yo era capaz de hacer que en el código siguiente:

import csv
from collections import Counter
import numpy as np

word_list = ['A','A','B','B','A','C','C','C','C']

counts = Counter(merged)

labels, values = zip(*counts.items())

indexes = np.arange(len(labels))

plt.bar(indexes, values)
plt.show()

No, sin embargo, mostrar las papeleras por rango (es decir, por la frecuencia, por lo de más alta frecuencia es el primero de reciclaje en la izquierda y así sucesivamente), aunque cuando puedo imprimir counts se ordena para mí Counter({'C': 4, 'A': 3, 'B': 2}). ¿Cómo puedo lograr esto?

OriginalEl autor BKS | 2016-02-24

1 Comentario

  1. 11

    Puede lograr el resultado deseado por la organización de los datos en primer lugar y, a continuación, pasar a la orden de las matrices a bar; a continuación yo uso numpy.argsort para que. La trama se ve entonces como sigue (también he añadido las etiquetas de la barra):

    Cómo generar una palabra histograma de frecuencia, donde las barras son ordenados de acuerdo a su altura

    Aquí está el código que produce la parcela con un par de comentarios en línea:

    from collections import Counter
    import numpy as np
    import matplotlib.pyplot as plt
    
    word_list = ['A', 'A', 'B', 'B', 'A', 'C', 'C', 'C', 'C']
    
    counts = Counter(word_list)
    
    labels, values = zip(*counts.items())
    
    # sort your values in descending order
    indSort = np.argsort(values)[::-1]
    
    # rearrange your data
    labels = np.array(labels)[indSort]
    values = np.array(values)[indSort]
    
    indexes = np.arange(len(labels))
    
    bar_width = 0.35
    
    plt.bar(indexes, values)
    
    # add labels
    plt.xticks(indexes + bar_width, labels)
    plt.show()

    En el caso de que sólo desea trazar la primera n entradas, puede reemplazar la línea

    counts = Counter(word_list)

    por

    counts = dict(Counter(word_list).most_common(n))

    Que en el caso anterior, counts entonces sería

    {'A': 3, 'C': 4}

    para n = 2.

    Si quieres quitar el marco de la trama y de la etiqueta de las barras directamente, usted puede comprobar este post.

    Tengo más de 4000 palabras para contar, así como generar palabra histograma de frecuencia de sólo la parte superior de 20 palabras?
    Usted puede utilizar counts.most_common(20) es decir,counts = Counter(word_list).most_common(20).
    AttributeError Traceback (la mayoría de llamada reciente pasado) <ipython-de entrada-33-704ddcc6ce26> <módulo>() 5 cargos = Contador(df[‘Texto’]).most_common(10) 6 —-> 7 etiquetas, valores = zip(*cuenta.los elementos()) 8 9 # ordenar los valores en orden descendente AttributeError: ‘lista’ el objeto no tiene ningún atributo ‘elementos’
    Cierto, most_common devuelve una lista, no un diccionario, he actualizado el post. Así, dict(Counter(word_list).most_common(20)) debe trabajar para usted ahora.

    OriginalEl autor Cleb

Dejar respuesta

Please enter your comment!
Please enter your name here