python - 如何在条形图中从一列列表中绘制词频
问题描述
我有数据框
我正在努力在条形图中显示所有推文、真实推文和虚假推文的前 10 个单词。有什么建议么?
将所有文本分成单词,计算频率,选择 10 个最常见的并绘制它们。我认为这样的事情可以工作,但作为一个新手,我不确定如何实现这一点。
提前感谢您的帮助:)
解决方案
- 主要要求是用于
pandas.Series.explode
分隔 a 中的所有值list
以分隔行。 .groupby
并聚合.count
列中的值,然后.sort_values
- 用于
pandas.DataFrame.plot.bar
绘制单词
import pandas as pd
import matplotlib.pyplot as plt
# test dataframe
df = pd.DataFrame({'lemmatized': [['se', 'acuerdan', 'de', 'la', 'pelicula el', 'dia'], ['milenagimon', 'miren', 'sandy', 'en', 'ny', 'tremenda'], ['se', 'acuerdan', 'de']]})
# display(df)
lemmatized
0 [se, acuerdan, de, la, pelicula el, dia]
1 [milenagimon, miren, sandy, en, ny, tremenda]
2 [se, acuerdan, de]
# use explode to expand the lists into separate rows
dfe = df.lemmatized.explode().to_frame().reset_index(drop=True)
# groupby the values in the column, get the count and sort
dfg = dfe.groupby('lemmatized').lemmatized.count() \
.reset_index(name='count') \
.sort_values(['count'], ascending=False) \
.head(10).reset_index(drop=True)
# display(dfg)
lemmatized count
0 acuerdan 2
1 de 2
2 se 2
3 dia 1
4 en 1
5 la 1
6 milenagimon 1
7 miren 1
8 ny 1
9 pelicula el 1
# plot the dataframe
dfg.plot.bar(x='lemmatized')
替代实现
- 使用
.value_counts
代替.groupby
# use value_counts and plot the series
dfe.lemmatized.value_counts().head(10).plot.bar()
- 使用
seaborn.countplot
import seaborn as sns
# plot dfe
sns.countplot(x='lemmatized', data=dfe, order=dfe.lemmatized.value_counts().iloc[:10].index)
plt.xticks(rotation=90)
推荐阅读
- php - PHP 表单确认
- azure - 在 Azure 中移动云控制台的位置
- c# - 来自连接不同设备的一个程序实例的多个客户端套接字 - 工作速度非常慢
- android - 通过 Android Studio 手动将文件附加到内部存储
- swift - 使用 Swift 从闭包中捕获一个值(不正常)
- javascript - 为什么我的 JavaScript 第二个计数器不起作用?
- tampermonkey - 有没有办法在 Tampermonkey 上加载所需资源时捕获错误?
- javascript - 无法通过 zip 中的异步读取同时获取 csv 的文件名及其内容
- c# - ASP.NET 5.0 中的脚手架标识错误(没有 MVC 的 WebApp)
- algorithm - 如果 f(n) = O(n) 且 g(n) = O(n),证明 f(g(n)) = O(n)