【Python】wordcloud 词云图
发布日期:2021-05-07 02:49:16 浏览次数:20 分类:精选文章

本文共 3251 字,大约阅读时间需要 10 分钟。


文章目录


一、词云图介绍

近年来,互联网、新媒体等行业报告中都会看到精美的词云图。它的原理主要是对文章内容进行分词,统计各个词出现的次数,然后根据出现的次数,设置显示样式,例如大小、颜色等,从而使读者快速领略文本的主旨

Python中提供的 wordcloud库 可以快速生成词云图。但主要是针对英文,通过空格进行分词比较流行的中文分词库为 jieba可将其与 wordcloud库联合使用从而对中文文章生成相应的词云图


二、环境配置

# -*- coding: utf-8#  @Time    : 2021/1/14 10:01#  @Author  : ZYX#  @File    : Test1.py# @software: PyCharmimport jieba          # 中文解析import numpy as np    # Numpyfrom PIL import Image # Image 加载读取图片import matplotlib.pyplot as plt # Matplotlib 绘图

如果通过Pycharm导入不了就通过pip~

在这里插入图片描述


三、WordCloud()解析及用法

在这里插入图片描述

♦ 参数

font path:字体路径,默认不支持中文,可通过该参数指定字体,支持OTF和TF格式;

width、 height:画布的宽度和高度,单位为像素;
margin:文字之间的边距;
mask:指定图片的形状,忽略白色部分,通常为 ndarray
max words:最多显示的词的数量,默认为200;
min font size、 max font size:最小字体大小、最大字体大小;
font_step:字体大小增加步长,默认为1
background_ color:词云图的背景颜色,默认为黑色

♦ 方法

generate(text):根据文本生成词云图,返回当前对象本身;

to image0:将词云对象转化为图片;
to_file(文件名):将词云对象转化为文件;
to array():将词云对象转化为数组。

♦ 基本步骤

创建wordcloud对象设定基本信息

调用generate()方法生成词云
保存或显示词云


四、基础案例展示

• 英文

  • Python中提供的 wordcloud库 可以快速生成词云图。但主要是针对英文,通过空格进行分词。所以要对随机生成的文本内容按照空格进行join()拼接
# -*- coding: utf-8#  @Time    : 2021/1/14 10:01#  @Author  : ZYX#  @File    : Test1.py# @software: PyCharmimport randomimport wordcloud as wc# 1.创建对象world_cloud =  wc.WordCloud()# 2.自定义文本#   随机生成选项里的文本100个res = random.choices(["Python","Java","PHP","Spark","Hadoop","C#","C++"],k=100)#   以空格拼接text = " ".join(res)# 3.生成词云world_cloud.generate(text)# 4.保存world_cloud.to_file(r"G:\Projects\pycharmeProject\Python_Sklearn\词云图\result\cloud2.png")

通过生成的随机文本和wordcloud绘制出的词云图如下所示:

在这里插入图片描述


• 中文

  • 默认的wordcloud是对英文字符进行处理,若要显示中文,需要设定参数font_path,指定字体样式。
# -*- coding: utf-8#  @Time    : 2021/1/14 18:18#  @Author  : ZYX#  @File    : Test2.py# @software: PyCharmimport wordcloud as wcimport random# 1.创建对象 --- 指定中文样式word_cloud = wc.WordCloud(font_path="词云图/resource/msyh.ttc")m = random.choices(["江苏","山东","浙江","北京","上海","四川","湖北"],k=100)# 2.自定义文本text = " ".join(m)# 3.生成词云图word_cloud.generate(text)# 4.保存word_cloud.to_file(r"G:\Projects\pycharmeProject\Python_Sklearn\词云图\result\cloud_CN.png")

在这里插入图片描述


五、jieba库

  • jieba库分词的三种模式:

    • (1) 精准模式:把文本精准地分开,不存在冗余;
    • (2) 全模式:把文中所有可能的词语都扫描出来,存在冗余;
    • (3) 搜索引擎模式:在精准模式的基础上,再次对长词进行切分;
  • 主要函数:

    • jieba.cut(sentence,cut_all=False,hmM=true): sentence表示需要分词的句子, cut_all表示是否采用全模式,HMM表示是否使用HMM(隐马尔可夫模型)模型;
    • jieba. cut_for_search(sentence,HMM=true): sentence表示需要分词的句子,HMM表示是否使用HMM模型,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细;
    • jieba.cut()方法和 jieba.cut_for_search()方法返回的结果都是可迭代对象,可使用for循环获取分词后得到的每一个词语,此外, jieba.lcut()和 jieba. lcut_for_search()效果分别和 jieba.cut()和 jieba.cut_for_search()效果类似,直接返回列表;
    • add_word(word, freq=None,tag=None)del_word(word)可在程序中动态修改词典;

简单应用一:读取文档生成词云图

在这里插入图片描述

简单应用二:生成带有形状的词云图

  • mask:指定图片的形状,忽略白色部分,通常为 ndarray
  • 通过读取图片获取图片形状的ndarry
# -*- coding: utf-8#  @Time    : 2021/1/14 19:06#  @Author  : ZYX#  @File    : Test4.py# @software: PyCharmimport jiebaimport numpy as npimport wordcloud as wcfrom PIL import Imageimport matplotlib.pyplot as plt# 1.读取文本数据、分词with open("./resource/洒满星星的河流.txt",'r',encoding="utf-8") as fp:    context = fp.read()res = jieba.lcut(context)text = " ".join(res)# 2.读取图片信息mask = np.array(Image.open("./resource/pikaqiu.png"))# 3.创建词云图对象word_cloud = wc.WordCloud(font_path="./resource/msyh.ttc",mask=mask) # 这里可以设置背景颜色# 4.生成词云图word_cloud.generate(text)plt.imshow(word_cloud)plt.show()

在这里插入图片描述


上一篇:【MapReduce】基础案例 ---- 排序 ( 按手机好分区,每个区中按照总流量排序 )
下一篇:【MapReduce】基础案例 ---- 排序 ( 按手机总流量降序排序 )

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月24日 03时52分25秒