2015-01-25 3 views
-1

Я пытаюсь отобразить частоту чисел 1, 2 и 3, которые встречаются для определенных ключей в словаре (под заголовком «hat1» через «hat10»), и у меня возникают проблемы с преобразованием моих данных (показано ниже) в формат, который я мог бы отображать.Создайте гистограмму из списка диктонов

data = {'hat9': [[1, 2, 3, 1, 2]], 'hat8': [[1, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]], 'hat1': [[1, 2, 3]], 'hat3': [[1, 2, 3, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1]], 'hat2': [[1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], 'hat5': [[1, 2, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 2, 3, 1, 3, 3, 3, 3]], 'hat4': [[1, 2, 3, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 1, 3, 2, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1]], 'hat7': [[1, 2, 3, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]], 'hat6': [[1, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 1, 1, 3]], 'hat10': [[1, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 1, 2, 3, 3, 2, 3, 3, 3, 3, 3, 2, 1, 1, 3, 3, 1, 2, 2, 3, 3, 1, 3, 3, 3, 3, 3, 2, 3, 1, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 2, 1, 3, 2, 1, 3, 2, 3, 3, 1, 2, 1, 2, 3, 3, 1, 3, 2, 2, 1, 2, 3, 3, 1, 2, 3, 2, 3, 3, 1, 3, 3, 3, 3]]} 

Когда я побежал DataFrame.from_dict(data) я получил результат, который выглядит следующим образом:

In [100]: DataFrame.from_dict(data) 
Out[100]: 
     hat1            hat10 \ 
0 [1, 2, 3] [1, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 1, 2, 3, 3, ... 

               hat2 \ 
0 [1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... 

               hat3 \ 
0 [1, 2, 3, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, ... 

               hat4 \ 
0 [1, 2, 3, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, ... 

               hat5 \ 
0 [1, 2, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, ... 

               hat6 \ 
0 [1, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ... 

              hat7 \ 
0 [1, 2, 3, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2] 

               hat8    hat9 
0 [1, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ... [1, 2, 3, 1, 2] 

Я надеялся, что кто-то может быть в состоянии помочь мне получить эти данные в более работоспособное формат, который может легко преобразуются в график. Спасибо за вашу помощь.

+0

Похоже, вы используете 'pandas', так почему бы не использовать' pandas.DataFrame.hist (...) '? –

+0

Вы знаете, как конвертировать 'data' в pandas DataFrame? –

ответ

1

Если вы хотите создать вы гистограмма с Matplotlib, вы на самом деле не нужно делать гораздо больше, чем назвать его hist метод с каждым hat вы хотите показать. Например,

import pylab 
pylab.hist(data['hat4'][0], bins=(1,2,3,4), align='left') 

(Вы должны индексировать в [0], потому что по какой-то причине каждый из словарных значений список длины 1, то один элемент сам является списком значений данных).

Если вам нужно каким-то образом связать шляпы, вам нужно сказать, как это сделать.

enter image description here

Вы можете сделать то же самое с пандами DataFrame, если вы предпочитаете:

import pandas as pd 
df = pd.DataFrame(data) 
pylab.hist(df['hat4'], bins=(1,2,3,4), align='left') 
+0

Спасибо за помощь. У меня есть быстрый вопрос: как вы думаете, было бы проще попытаться преобразовать мои данные в Pandas DataFrame? –

+0

Я обновил свой ответ, чтобы показать _how_, но насколько это проще или лучше идея зависит от того, что еще вы намерены делать с вашими данными, я думаю. – xnx

1

Попробуйте это:

data = {'hat9': [[1, 2, 3, 1, 2]], 'hat8': [[1, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]], 'hat1': [[1, 2, 3]], 'hat3': [[1, 2, 3, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1]], 'hat2': [[1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], 'hat5': [[1, 2, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 2, 3, 1, 3, 3, 3, 3]], 'hat4': [[1, 2, 3, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 3, 1, 2, 1, 3, 2, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1]], 'hat7': [[1, 2, 3, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]], 'hat6': [[1, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 1, 1, 3]], 'hat10': [[1, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 1, 2, 3, 3, 2, 3, 3, 3, 3, 3, 2, 1, 1, 3, 3, 1, 2, 2, 3, 3, 1, 3, 3, 3, 3, 3, 2, 3, 1, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 2, 1, 3, 2, 1, 3, 2, 3, 3, 1, 2, 1, 2, 3, 3, 1, 3, 2, 2, 1, 2, 3, 3, 1, 2, 3, 2, 3, 3, 1, 3, 3, 3, 3]]} 


keys = [] 
values = [] 
for key,value in data.iteritems(): 
    keys.append(key) 
    a = 0 
    b = 0 
    c = 0 
    for x in value[0]: 
     if x==1: a+=1; 
     elif x ==2: b+=1; 
     elif x==3: c+=1; 
    values.append([a,b,c]) 

print keys 
print values 

Хотелось бы надеяться, что помогает. Клавиши ['hat9', 'hat8', etc.,..] и values = [[freq of 1 in 'hats9', freq of 2 in 'hats9', freq of 3 in 'hats9'], [freq of 1 in 'hats8', freq of 2 in 'hats8', freq of 3 in 'hats8'],..] (список из 3-х списков элементов)

Смежные вопросы