Python 词云或标签云是一种可视化技术,通常用于显示网站的标签或关键字。这些单个单词反映了网页的上下文,并聚集在词云中。云中的单词字体大小和颜色各不相同,表明其突出性。字体大小越大,相对于其他单词的重要性就越高。词云可以根据创建者的设想采用各种形状和大小。但是,单词的数量至关重要;太多的话会使其变得杂乱,难以阅读。
虽然创建 Python 词云的方法有很多种,但最广泛使用的类型是使用 语料库中的词频。因此,我们将使用频率类型创建词云。
词云最适合用于特定场景,在这些场景中,可视化词频或突出程度至关重要。以下是适合使用词云的一些情况:
- 词云可以快速概览文本语料库中最常出现的单词,帮助研究人员识别模式和关键主题。
- 在总结大量文本时,Python词云可以有效地突出显示最相关和最重要的术语,使信息更容易被受众接受。
- 词云对于分析社交媒体平台上的情绪、主题标签或热门话题很有价值,可以简洁地表达热门主题。
- 它们为报告、演示文稿或仪表板增加了视觉吸引力和参与度,使查看者更容易从数据中掌握重要见解。
- 在比较多个文本源或文档时,词云可以帮助识别词频的相似性或差异性。
使用 Python 创建一个词云可以按照以下步骤进行:
步骤1:导入必要的库
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
步骤2:选择数据集
df = pd.read_csv("xxxxxxx.csv")
步骤3:选择词云的文本与文本量
选择用于创建 Python 词云的文本是一项重要任务。选择文本时必须检查各种因素,例如:
- 我们有问题陈述吗?
- 所选文本有意义吗?
- 我们能总结一下创建的词云吗?
- 我们的文本是否有足够数量的文本?
词云需要适量的文字,文字过多会阻碍词云的视觉效果,文字过少又没有意义。
我们可以使用 DataFrame 的 .head() 方法来检查列及其中存在的数据类型。在我们的示例中,我们将列类别设为文本。
由于列 category 在每个类别 game 之前都有一个前缀GAME,因此我们在 python 中的 wordcloud 最终会将GAME创建为最常用的单词,而 python 中的 wordcloud 在 int 中没有任何意义。因此,我们将在将category列添加到文本时执行过滤 。
步骤4:检查NULL值
需要检查我们的数据集中的空值,因为在创建词云时,它不会接受带有nan值的文本。
df.isna().sum()
步骤5:向变量添加文本
根据步骤 3 中的参数,将文本数据添加到您选择的变量中。在这里,我们将数据添加到变量文本中。
text = " ".join(cat.split()[1] for cat in df.category)
步骤 6:创建词云
创建一个 WordCloud 类的对象,并指定其名称,然后调用 generate() 方法。这里我们创建了名为word_cloud 的对象。
WordCloud() 根据需要接受多个参数。这里我们添加两个参数:
- collocations = False,将忽略文本中的搭配词
- background_color = '白色',这将使文字看起来更清晰
.generate() 方法接受我们创建的文本作为参数 。在本例中,我们将 文本 变量作为 .generate() 的参数。
word_cloud = WordCloud(collocations = False, background_color = 'white').generate(text)
步骤 7:绘制词云
使用matplotlib.pyplot 的.imshow()方法将词云显示为图像。
.imshow() 接受多个参数,但在我们的示例中,我们接受两个参数:
- 在步骤 5 中创建的 word_cloud
- 插值 = '双线性'
由于我们使用 .imshow() 创建图像,因此图像的重采样是由于图像像素大小和屏幕分辨率不匹配而完成的。此重采样由插值参数控制,以根据我们的需要生成更柔和或更清晰的图像。有几种可用的插值类型,例如高斯、二次、双三次。这里我们使用双线性插值。
在绘制图像时关闭轴,因为我们不希望图像中出现轴刻度。
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
在本次示例中,我们使用来自Kaggle的Top Games on Google Play Store | Kaggle
完整代码
#Importing Libraries
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from wordcloud import WordCloud
#Importing Dataset
df = pd.read_csv("android-games.csv")
#Checking the Data
df.head()
#Checking for NaN values
df.isna().sum()
#Removing NaN Values
#df.dropna(inplace = True)
#Creating the text variable
text = " ".join(cat.split()[1] for cat in df.category)
# Creating word_cloud with text as argument in .generate() method
word_cloud = WordCloud(collocations = False, background_color = 'white').generate(text)
# Display the generated Word Cloud
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()