2016-05-16 11 views
-1

Ich habe eine Liste der Wörterbücher:Histogramm in Python aus einer Liste von Worten

list_of_dicts = [{'user':user1, 'yob':1984, 'saves':24, 'hidden':28}, 
{'user':user2, 'yob':1989, 'saves':7, 'hidden':51}, {...}, ...] 

Und ich möchte, spart einen gestapeltes Histogramm Plot von machen und versteckt auf der y-Achse und yob auf der x-Achse . Daher sollte das Histogramm nach yob bin und die Anzahl der Speicherungen oder versteckten für jedes Wörterbuch in der Liste summieren. Zum Beispiel, wenn es 3 Wörterbücher mit dem gemeinsamen Jahr 1998 mit Speichern von 8, 19 und 4 gibt, dann sollte die Gesamtspeicherung für yob 1998 31 sein und die Hist-Plot für Saves sollte 1998 31 in der Höhe sein. So etwas wie:

Nicht sicher über die Syntax, um dies zu tun oder wie auf die Elemente in der Liste richtig zugreifen, könnte jemand helfen? Danke * Edit: Ich weiß, dass Sie eine Liste mit einer Zeichenfolge (list_of_dicts ['yob']) nicht indizieren können, aber das ist, wo ich feststecke und die Frage stelle.

Antwort

3

können Sie zunächst alles in einem einzigen Wörterbuch setzen,

master_dict = {} 
# initialize the arrays first 
for key in list_of_dicts[0]: 
    master_dict[key] = [d[key] for d in list_of_dicts] 

Verwenden Sie dann pandas zu bin von 'yob':

import pandas as pd 
df = pd.DataFrame(master_dict) 
bins = numpy.linspace(df.yob.min(), df.yob.max(), 45) 
cut = pd.cut(df.yob, bins) 
group = df.groupby(cut) 

Die folgenden Zeilen geben Sie die Summe von jedem der anderen Wörterbuch Artikel von yob:

nsaves = group.saves.sum() 
nhidden = group.hidden.sum() 

, das dann mit den oben definierten Behältern unter Verwendung von plt.step oder plt.bar:

plt.step(bins[:-1], nsaves, color='r', where='pre') 
plt.step(bins[:-1], nhidden, color='b', where='pre') 
geplottet werden kann