Счетчик коллекций Python не может отображать гистограмму - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь построить гистограмму, используя python seaborn, но у меня возникает ошибка, когда я хочу использовать sns.countplot

Вот мой код:

DistributionNumber =Counter(ListAlphabet)
print(DistributionNumber)

output: 
Counter({'0': 2904, 'e': 1779, 'E': 1759, 'S': 1686, 'A': 1435, 'C': 1421, '1': 1375, 'T': 1248, 'a': 1191, '2': 1180, 'R': 1118, 'U': 1037, 'N': 997, 'O': 907, 'r': 876, '3': 819, '9': 788, 't': 763, 'P': 754, 'L': 727, '4': 713, '5': 712, 'V': 630, '7': 594, 'I': 583, 'M': 548, 'D': 545, '8': 464, 'n': 449, '6': 432, 'd': 404, 'B': 344, 'G': 296, 'i': 272, '01': 265, 'F': 260, 'l': 257, 'X': 232, 'H': 226, 'h': 193, 'g': 169, 'Y': 158, 'K': 153, '00': 131, 'b': 91, 'J': 85, 'f': 81, 'W': 80, 'Z': 79, 'm': 71, 'Q': 35, 'q': 26, '02': 15, 'y': 4, 'o': 3, 'u': 3, 'p': 1})

Вот код для сюжета:

sns.countplot(DistributionNumber)

У меня есть эта ошибка:

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.unique()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable._unique()

TypeError: unhashable type: 'Counter'

Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Я бы просто преобразовал словарь в фрейм данных, а затем использовал бы plt.bar или sns.barplot:

df=pd.DataFrame(list(DistributionNumber.items()))
df=df.rename(columns={0:'Letter', 1:'Count'})

plt.bar(x=df["Letter"],height=df["Count"])
sns.barplot(x=df["Letter"],y=df["Count"])

Вы также можете использовать from_dict для создания вашего фрейма данных:

df=pd.DataFrame.from_dict(DistributionNumber,orient='index').reset_index()
df=df.rename(columns={'index':'Letter', 0:'Count'})

plt.bar(x=df["Letter"],height=df["Count"])
sns.barplot(x=df["Letter"],y=df["Count"])

вывод plt.bar:

enter image description here

и вывод sns.barplot:

enter image description here

0 голосов
/ 08 мая 2019

Первый необходимый импорт:

from collections import Counter
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline #this is needed for a jupyter notebook

Затем создание объекта:

DistributionNumber = Counter({'0': 2904, 'e': 1779, 'E': 1759, 'S': 1686, 'A': 1435, 'C': 1421, '1': 1375, 'T': 1248, 'a': 1191, '2': 1180, 'R': 1118, 
                              'U': 1037, 'N': 997, 'O': 907, 'r': 876, '3': 819, '9': 788, 't': 763, 'P': 754, 'L': 727, '4': 713, '5': 712, 'V': 630, 
                              '7': 594, 'I': 583, 'M': 548, 'D': 545, '8': 464, 'n': 449, '6': 432, 'd': 404, 'B': 344, 'G': 296, 'i': 272, '01': 265, 
                              'F': 260, 'l': 257, 'X': 232, 'H': 226, 'h': 193, 'g': 169, 'Y': 158, 'K': 153, '00': 131, 'b': 91, 'J': 85, 'f': 81, 'W': 80, 
                              'Z': 79, 'm': 71, 'Q': 35, 'q': 26, '02': 15, 'y': 4, 'o': 3, 'u': 3, 'p': 1})

Сделать это фреймом данных:

DistributionNumber_df = pd.DataFrame.from_dict(DistributionNumber, orient='index').reset_index()

И, наконец, сюжет:

sns.countplot(x=DistributionNumber_df['index'])
plt.show()

Вуаля:

enter image description here

Приведенный выше код подсчитывает количество вхождений каждой строки в столбце индекса. Возможно, вы захотите изменить это, но вы получите общее представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...