Python分词及词云制作——基于wordcloud库

对于行研报告、咨询报告以及路演 ppt 而言,图表“颜值”有着至关重要的作用。多次行研实习的我,别的本领没学会,对排版和图表“颜值”的要求却被惯得越来越高。So,词云这个如此方便的可视化利器,怎么可以放过。
(CSDN 排版让人满意真的好难)

  • 本文将基于爬虫得到的《三国演义》全文,借助jieba、wordcloud库进行分词并绘制词云;
  • 词云类型由易到繁分为三类:普通型,特定形状型,特定形状和颜色型;

本文目录

    • 库的安装
    • jieba分词
    • 普通词云
    • 特定形状型
    • 特定形状和颜色型

库的安装

本文用到的jieba和wordcloud库比较朴素,不像ta-lib容易出幺蛾子,可以直接在 cmd 或 自己创建的环境中用 pip 安装。但是我个人在安装wordcloud库的过程中,出现了安装不成功的小概率事件,故在此提供一个解决方案。

当普通的pip安装不成功时,可以考虑到 Python库大本营 下载需要的库文件(.whl)到本地,之后再 pip install 库文件本地存储路径 进行安装。该方法通用性较广,其他库下载安装不成功时,也可以尝试该方法。

pip install jieba
pip install wordcloud
pip install "F:\Program_Files\wordcloud-1.7.0-cp38-cp38-win_amd64.whl"  # 这是我随便找的路径,给大家打个样,换成自己的就ok

jieba分词

import jieba
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt

text = open('三国.txt', "r",encoding='utf-8').read()  # 文件读取 
cut_text = jieba.lcut(text)  # 结巴分词,生成列表
result = " ".join(cut_text)  # 必须给个符号将分隔开的词重新拼成字符串,否则不能绘制词云

普通词云

不管是哪种词云图,基本流程都是一致的,创建WordCloud对象,generate生成词云,to_file()保存词云。我们需要关注的是创建WordCloud对象过程中需要的参数,常用参数展示如下。重点说明两个:1) font_path,可以到“控制面板——外观和个性化——字体” 中找到心仪的字体文件,复制到当前py文件的同一路径下,这样路径不会太长,好看一点;2) colormap,指定色系,下面左图是不加colormap参数的效果,右图是加colormap='Blues’的效果。如果不知道colormap都有哪些,可以随便写一个错的运行,报错信息中会列示colormap们(最下面的图)。

wc = WordCloud(       
        background_color='white',  # 设置背景色
        mode = 'RGBA',  # 默认为“RGB”
        width=500,  # 设置背景宽,默认为400像素
        height=350,  # 设置背景高,默认为200像素
        max_font_size=50,  # 最大字体
        min_font_size=10,  # 最小字体
        font_path='simkai.ttf',  # 由于要显示中文,需要设置字体,否则会出现乱码
        max_words = 200,  # 最大词汇个数
        # colormap='Blues'  # 指定词云色系,默认随机分配颜色
        )
wc.generate(result)  # 产生词云
wc.to_file("./image/wordcloud_1.png")   # 保存图片

Python分词及词云制作——基于wordcloud库_第1张图片
Python分词及词云制作——基于wordcloud库_第2张图片

特定形状型

特定形状型实际上是以特定图片为蒙版制作,处理较为简单,只需要在前面一版的基础上加图片读取和mask参数即可完成。推荐使用色彩对比鲜明的图片,这样词云图可以与原图更相似,还可以通过调参绘制出更为美观的词云图。在这里我想说明一点的是,之前看许多大佬的文章,蒙版创建都是用PIL库,后来发现其实更为大家熟悉的 plt 也能实现同样的功能。

bg_img = plt.imread('./image/男生.jpeg')
wc = WordCloud(
        background_color='white',
        max_font_size=50,
        min_font_size=10,
        font_path='simkai.ttf',
        colormap='Blues',
        mask=bg_img
        )
wc.generate(result)
wc.to_file("./image/wordcloud_2.png") 

Python分词及词云制作——基于wordcloud库_第3张图片

特定形状和颜色型

不仅想用特定图片的形状,还想用它的颜色,就可以根据蒙版生成词云图的颜色,之后对 WordCloud 对象进行 recolor ,不清楚为什么最后的效果并不理想,我再研究一下,如果解决了会放到评论区。

bg_img = plt.imread('./image/男生.jpeg')
wc = WordCloud(
        max_font_size=50,
        font_path='simkai.ttf',
        colormap='Blues',
        mask=bg_img
        )
wc.generate(result)
image_color = ImageColorGenerator(bg_img)  # 生成颜色
wc_color = wc.recolor(color_func=image_color)  # 重新上色
wc_color.to_file("./image/wordcloud_3.png")   # 保存云图

Python分词及词云制作——基于wordcloud库_第4张图片

你可能感兴趣的