还记得我们曾经抓取过豆瓣电影TOP250的详细信息吗?在二十多个字段中,有一个字段就是每部电影被贴上最多的标签。
想要学习更多可视化知识的话,可以到我的历史文章中查阅更多分享,比如《从零开始学Python可视化》系列、《7天学会Python最佳可视化工具Seaborn》系列、《一天一图学Python可视化》系列等。同时我还会分享许多关于爬虫、数据分析与挖掘、机器学习等的知识,欢迎感兴趣的同学关注我!
当我们想要查看哪些标签最多时(事实上它就是一个分类变量,每个标签是其中的一个分类),一种方法是使用条形图。但是当标签太多时,展示的效果会非常差,我们可以先来看一下。
from collections import Counterimport matplotlib.pyplot as plt## 生成列表tags = reduce(lambda x, y: x + y, df.tags)## 统计词频并拆分键值对counter = Counter(tags)counter_items = counter.items()tag_list = [i[0] for i in counter_items]count_list = [i[1] for i in counter_items]## 条形图plt.figure(figsize=(100, 10))plt.bar(x=tag_list, height=count_list);
看下效果:
完全没有可读性。。四百多个分类挤在一起,什么都看不见。那在遇到这种分类特别多的情况时,我们应该怎么办呢?
一个很好的解决方案,就是使用词云图。那么接下来我们再来看下词云图的效果:
from functools import reducefrom wordcloud import WordCloudtags = reduce(lambda x, y: x + y, df.tags)result = ' '.join(tags)wc = WordCloud( font_path='msyh.ttf', #字体 background_color='white', #背景颜色 width=1000, height=500, max_font_size=100, #字体大小 min_font_size=10, max_words=100)wc.generate(result)plt.figure('豆瓣电影标签', figsize=(16,8))plt.imshow(wc)plt.axis('off')plt.show()
是不是美观了许多?什么标签多什么标签少一目了然。
其实词云图最主要的应用场景并不是用于处理常见的分类变量。顾名思义,用词构成的云图,词云图常常用于展示文章中不同词(文字、单词)的使用频率情况,假如我们的数据是原始的文章字符串的话,那么我们一般需要使用jieba来做一下分词,然后去除停用词(比如的、啊、嗯等语气词),然后再传递给我们的wordcloud对象生成词云图。
接下来我们详细解释下代码:
第一步,我们导入了必要的库。
第二步,我们将数据转换成我们需要的格式。wordcloud需要的是一个字符串,在这个字符串中,每个词之间以空格连接。我们不需要提供词频等统计,只需要将原始的单词以空格分隔后传入即可,它会自动进行必要的统计。由于我们数据的格式是pandas DataFrame,标签是其中的一列,且是列表格式。所以我们将所有列表以追加方式融合成一个列表,然后使用字符串的join方法连接成一整个字符串。
第三步,我们生成一个WordCloud对象,在这里我们指定了中文字体(必需,因为wordcloud默认不支持中文),然后我们设置背景颜色为白色,设定宽高以及字体的大小范围,最后我们还设置仅保留最多的一百个词。然后我们用我们的WordCloud对象去拟合我们的数据。
第四步,我们设置图形大小,然后使用plt.imshow()来读取图片数据,去除坐标轴,展示图片。
在词云图中,我们甚至还可以设置图形的形状(给mask参数指定一个特定形状的图片文件),这会使得我们的图片更加有趣。
你学会了吗?