2015-09-20 5 views
2

У меня есть набор данных с проектами Kickstarter 13k и их твиты в течение всего проекта. Каждый проект содержит список с количеством твитов за каждый день, , например. [10, 2, 4, 7, 2, 4, 3, 0, 4, 0, 1, 3, 0, 3, 4, 0, 0, 2, 3, 2, 0, 4, 5, 1, 0, 2, 0, 2, 1, 2, 0].Как построить гистограмму нескольких списков?

Я взял подмножество данных, установив продолжительность проектов на 31 день, чтобы каждый список имел одинаковую длину, содержащую 31 значение.

Этот фрагмент кода гравюр каждый список твитов:

for project in data: 
     data[project]["tweets"] 

Что это самый простой способ построить гистограмму с Matplotlib? Мне нужно частотное распределение общего количества твитов за каждый день. Как подсчитать значения из каждого индекса? Их простой способ использовать Pandas для этого?

списки также доступны в кадре данных панды:

df = pd.DataFrame.from_dict(data, orient='index') 
    df1 = df[['tweets']] 
+1

Вы пробовали поиск в googling 'matplotlib histogram'? – cel

+0

Да, примеры показывают только, если у вас есть один список. Необходимо собрать около 3000 списков до одного путем накопления значений для каждого индекса в списках @cel –

ответ

2

Гистограмма, вероятно, не то, что вам нужно. Это хорошее решение, если у вас есть список номеров (например, IQ людей), и вы хотите присвоить каждому номеру категории (например, 79-, 80-99, 100+). Будут 3 бункера, а высота каждого бункера будет представлять количество чисел, которые соответствуют соответствующей категории.

В вашем случае у вас уже есть высота каждого бункера, поэтому (как я понимаю), что вы хотите, это график , который выглядит как гистограмма. Это (как я понимаю) не поддерживается matplotlib и потребует использования matplotlib не так, как предполагалось, чтобы он использовался.

Если вы согласны с использованием графиков вместо гистограмм, это то, что вы можете сделать.

import matplotlib.pyplot as plt 

lists = [data[project]["tweets"] for project in data] # Collect all lists into one 
sum_list = [sum(x) for x in zip(*lists)] # Create a list with sums of tweets for each day 

plt.plot(sum_list) # Create a plot for sum_list 
plt.show() # Show the plot 

Если вы хотите, чтобы сделать сюжет похож на гистограмме, вы должны сделать это:

plt.bar(range(0, len(sum_list)), sum_list) 

вместо plt.plot.

+0

Спасибо за ваш ответ, вы правы в отношении гистограммы. Сюжет достаточно хорош, чтобы делать выводы. –

+0

Найден способ сделать сюжет похожим на гистограмму, отредактировал мой ответ. @MauriceStam –

+0

Решает ли ваша проблема (показывая количество твитов, написанных каждый день)? @MauriceStam –