python 中大数据的堆积条形图

Stacked bar plot of large data in python

我想从 python 中的 csv 文件绘制堆积条形图。我有三列数据

year word frequency
2018 xyz 12
2017 gfh 14
2018 sdd 10
2015 fdh 1
2014 sss 3
2014 gfh 12
2013 gfh 2
2012 gfh 4
2011 wer 5
2010 krj 4
2009 krj 4
2019 bfg 4
... 300+ rows of data. 

我需要遍历所有数据并绘制一个根据年份分类的堆积条形图,因此 x 轴是单词,y 轴是频率,图例颜色应显示年份。我想看看每个词的演变是如何逐年发生的。每年都会重复使用一些技术词汇,因此堆栈条形图应在顶部添加值并绘制,例如 gfh 最初绘制 14 表示 2017 年,然后在 2014 年我希望 gfh 绘制(不同颜色)在 2017 年 gfh 之上的值为 12。我该怎么做?到目前为止,我在我的代码中调用了 csv 文件。但我不明白它怎么能遍历所有行并适当地堆叠单词(因为有些单词多年来一直重复)。非常感谢任何帮助。此外,年份在 csv 中以随机顺序排列,但我按年份对它们进行了排序以使其更容易。我只是在学习 python 并试图理解这个绘图程序,因为我有 40 年的数据和 ~20 个单词。所以我认为堆叠条形图是表示它们的最佳方式。也欢迎任何其他可视化方法。

这可以使用 pandas 来完成:

import pandas as pd

df = pd.read_csv("file.csv")

# Aggregate data
df = df.groupby(["word", "year"], as_index=False).agg({"frequency": "sum"})
# Create list to sort by
sorter = (
    df.groupby(["word"], as_index=False)
    .agg({"frequency": "sum"})
    .sort_values("frequency")["word"]
    .values
)

# Pivot, reindex, and plot
df = df.pivot(index="word", columns="year", values="frequency")
df = df.reindex(sorter)
df.plot.bar(stacked=True)

输出: