如何使用python生成词云(超详细注解)?如何生成透明背景的词云? O(≧▽≦)O Python趣用

文章目录

  • 安装
    • 环境报错解决思路
  • WordCloud方法介绍
  • 简单词云生成实例
  • wordcloud中其他的方法
  • 生成自定义样式和颜色的图片

本博客偏向于萌新教程,如果想更深入了解制作词云可以查看 官方文档

安装

首先是我们需要用到的两个库,一个是wordcloud用于生成词云,还有一个是jieba(外号:结巴)用于进行中文的分词,如果你制作的图云中不包含中文,那么可以不用下载结巴。

环境报错解决思路

如果你是用的pycharm或者其他类似的虚拟环境,安装的时候应该会出现关于C++环境缺少的报错,就算你已经安装了c++环境,还是照样报错。这时候就需要用到离线安装包了
如何使用python生成词云(超详细注解)?如何生成透明背景的词云? O(≧▽≦)O Python趣用_第1张图片
wordcloud离线安装包下载地址
(https://www.lfd.uci.edu/~gohlke/pythonlibs/#Wordcloud)
首先你需要下载离线安装包,然后在命令行执行安装命令
我当前执行的安装命令为F:\我的大学\项目代码\python环境\未知领域环境\未知领域\Scripts\python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade F:\个人资料\安装 包\wordcloud-1.6.0-cp38-cp38-win_amd64.whl

其中F:\我的大学\项目代码\python环境\未知领域环境\未知领域\Scripts\python.exe是我虚拟环境的地址,如果你用的不是虚拟环境,这里直接写python即可,然后F:\个人资料\安装 包\wordcloud-1.6.0-cp38-cp38-win_amd64.whl是我当前下载的离线wordcloud的地址。中间那一部分我之所以使用了-i https://pypi.tuna.tsinghua.edu.cn/simple是安装wordcloud如果出现依赖其他库需要下载时用国内镜像源下载。
如何使用python生成词云(超详细注解)?如何生成透明背景的词云? O(≧▽≦)O Python趣用_第2张图片
上面的库中,除了pymysql外都为wordcloud和其依赖库。

WordCloud方法介绍

WordCloud方法是wordcloud库中使用频率最高的为作用最大的方法, 主要用于词云的生成和绘制。

wordcloud属性 作用
font_path 字符串类型, 字体路径(windows下默认字体路径为C:\\Windows\\Fonts\\如果是自行安装的字体,可能会在C:\\Users\\用户名\\AppData\\Local\\Microsoft\\Windows\\Fonts\\)
width 整数类型, 生成词云的宽度, 默认:400
height 整数类型, 生成词云的高度, 默认:200
prefer_horizontal 浮点类型,词语水平方向排版出现的频率,默认:0.9
mask 遮罩图, 下方会详细介绍。默认:无
scale 浮点类型, 按照比例进行放大画布, 默认:1
min_font_size 整数类型, 显示的最小的字体大小, 默认:4
max_font_size 整数类型, 显示的最大的字体大小, 默认:无
margin 整数类型, 边缘空白宽度, 默认:2
font_step 整数类型, 字体步长, 默认:1
max_words 整数类型,要显示的词的最大个数 ,默认:200
background_color 字符串类型, 背景颜色,默认:黑色
stopwords 设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
relative_scaling 浮点类型,词频和字体大小的关联性,默认:auto。
regexp 字符串类型,使用正则表达式分隔输入的文本
collocations 布尔类型, 是否包括两个词的搭配
colormap 给每个单词随机分配颜色,若指定color_func,则忽略该方法。
normalize_plurals 布尔类型,是否删除单词中的s,如果使用generate_from_frequencies,则将其忽略。默认:True
contour_width 浮点类型,如果mask遮罩不是None和contour_width > 0,则绘制mask遮罩轮廓。默认:0
contour_color 字符串类型, mask遮罩轮廓颜色。默认: black
repeat 布尔类型,是否重复单词和短语,直到达到max_wordsmin_font_size。默认:False
include_numbers 布尔类型,是否将数字包含为短语。默认:False
min_word_length 整数类型,一个单词必须包含的最小字母数。默认:0
mode 颜色模式,默认“RGB”。如果想设置透明底色的云词图,那么可以设置background_color=None, mode=“RGBA”
被弃用属性 ranks_only
wordcloud方法 作用
fit_words(frequencies) 根据词频生成词云(frequencies,为字典类型),generate_from_frequencies(frequencies)的简写
generate(text) 根据文本生成词云,generate_from_text(text)的简写
generate_from_frequencies(frequencies, max_font_size=None) 根据词频生成词云
generate_from_text(text) 根据文本生成词云
process_text(text) 将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, …]) 对现有输出重新着色。重新上色会比重新生成整个词云快很多。
to_array() 转换为numpy数组。
to_file(filename) 输出到文件(filename为输出文件名)
to_svg([embed_font, …]) 导出为SVG格式。

简单词云生成实例

使用上述的方法和属性我们就可以生成一个自己的词云。

# 制作词云使用
from wordcloud import WordCloud
# 中文分词使用
import jieba

# 获取制作词云的文本路径
path_txt = '词云.txt'

# 打开文本
with open(path_txt, 'r', encoding='UTF-8') as f:
    # 结巴分词,生成字符串,wordcloud无法直接生成正确的中文词云
    cut_text = " ".join(jieba.cut(f.read()))
    # 设置词云属性
    wordcloud = WordCloud(
        # 设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
        font_path="C:\\Users\\xunmi\\AppData\\Local\\Microsoft\\Windows\\Fonts\\WenCangShuFang.ttf",
        # 设置了背景(当前为透明)
        background_color=None,
        mode='RGBA',
        # 宽
        width=1000,
        # 高
        height=880
    )
    # 生成词云
    wordcloud.generate(cut_text)
    # 设置词云图片保存路径
    wordcloud.to_file("图云.png")

当前我使用的是文藏书房字体,这是一套免费商用字体,需要的可以自行百度获得。
如何使用python生成词云(超详细注解)?如何生成透明背景的词云? O(≧▽≦)O Python趣用_第3张图片

wordcloud中其他的方法

wordcloud从除了WordCloud外,还有

  • ImageColorGenerator : 基于彩色图像的颜色生成器。根据RGB图像生成颜色。单词将使用彩色图像中包围矩形的平均颜色进行着色。
    • 测试
  • random_color_func : 随机色调颜色生成。
  • colormap_color_func : 给每个单词指定颜色
  • get_single_color_func : 创建一个颜色函数,该函数返回单个色调和饱和度。

生成自定义样式和颜色的图片

使用maks属性即可帮助我们生成带蒙版的词云,但需要注意的是我们不能直接将一个图片给maks,否则会报错AttributeError: 'str' object has no attribute 'dtype'大致意思就是str(字符串)没有dtype属性。这里我们需要用到matplotlib.pyplot库中的.imread('')属性。颜色方面我们可以使用recolor进行重新着色,使用ImageColorGenerator读取背景颜色。

# 制作词云使用
from wordcloud import WordCloud, ImageColorGenerator
# 中文分词使用
import jieba
# 转化蒙版图片
import matplotlib.pyplot as plt

# 获取制作词云的文本路径
path_txt = '词云.txt'

# 打开文本
with open(path_txt, 'r', encoding='UTF-8') as f:
    # 结巴分词,生成字符串,wordcloud无法直接生成正确的中文词云
    cut_text = " ".join(jieba.cut(f.read()))
    # 设置背景图片
    backgroud_image = plt.imread('蒙版图.jpg')
    # 设置词云属性
wordcloud = WordCloud(
    # 设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
    font_path="C:\\Users\\xunmi\\AppData\\Local\\Microsoft\\Windows\\Fonts\\WenCangShuFang.ttf",
    # 设置了背景(当前为透明)
    background_color=None,
    mode='RGBA',
    # 宽
    width=1000,
    # 高
    height=880,
    # 设置背景蒙版
    mask=backgroud_image
)
# 生成词云
wordcloud.generate(cut_text)
# 将字体颜色重新着色为背景颜色(recolor方法必须在generate之后执行)
wordcloud.recolor(color_func=ImageColorGenerator(backgroud_image))
# 设置词云图片保存路径
wordcloud.to_file("图云.png")

你可能感兴趣的:(如何使用python生成词云(超详细注解)?如何生成透明背景的词云? O(≧▽≦)O Python趣用)