我有一个包含13k Kickstarter项目的数据集及其在项目期间的推文。每个项目都包含一个列表,其中包含每天的推文数量,
例如[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这是一个简单的方法吗?
这些列表也可以在Pandas数据框中访问:
df = pd.DataFrame.from_dict(data, orient='index')
df1 = df[['tweets']]
答案 0 :(得分:2)
直方图可能不是您需要的。如果你有一个数字列表(例如,人的智商)并且你想将每个数字归为一个类别(f.e.79-,80-99,100 +),这是一个很好的解决方案。将有3个箱子,每个箱子的高度将代表适合相应类别的数量。
在你的情况下,你已经拥有每个bin的高度,所以(据我所知)你想要的是一个看起来像直方图的 plot 。这个(据我所知)不受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。