让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

让你的作品更出色——

词云Word Cloud的制作方法(基于python)

本文目录:


一、词云的简介

  词云,又称文字云,英文名:Word Cloud。是文本数据的视觉表示形式。

  就是对指定范围文本中出现频率较高的“关键词”予以视觉上的突出表现,从而过滤掉大量的文本信息,形成“关键词云层”或“关键词渲染”,使浏览网页者只要一眼扫过文本就可以领略文本的主题宗旨。

   简单来说,我们看到的那种上面一堆大小不一的文字,有些是通过文字形成一个特定轮廓的那种图片或图像,我们称之为词云。一个好的词云可以直观地展示一个文章的主题,方便他人快速感知了解最突出的文字,同时自定义的美观样式和颜值也很能打。

  词云的本质是点图,是在相应坐标点绘制具有特定样式的文字的结果。

  由词汇组成类似云的彩色图形词云,用于展示大量文本数据。通常用于描述特定范围内的关键字元数据(标签),或可视化自由格式文本。 每个词的重要性以字体大小或颜色显示。

  适合的数据条数:超过 30 条数据(较好效果)

二、 实现原理和流程

1、制作词云流程图

2、词云实现原理

   某个词云就是指定文章内的关键字集合体。一篇文章我们可以拆分成多个关键词,然后把每个单词出现的频率进行统计。

   比如《红楼梦诗词》文章中“林黛玉”出现了15次,“判词”出现了14次,“薛宝钗”出现了8次,这个次数就是词频。然后根据词频多少,把词频出现多的单词和词频出现少的单词根据不同的字体展示成图片,就实现了这个词云的功能。其中对文章内的关键词进行拆飞就叫做分词。

   在这个流程中还会出现一些问题,比如拆分后的关键词中会有一些我们不想要的词,例如:“【、】、(、)。。。”这些没有多大意义的词和一些本次统计数据里不想被统计到的词,如果它们被统计进词频当中,会干扰词云生成正确的结果。我们把这些不想统计的词叫做停用词,为此可以做一个停用词的列表。

三、 实现词云的方式

   目前主要有两种词云的实现库,一个是最基础的词云wordcloud,另一个是基于wordcloud实现的stylecloud。

1、安装词云相关模块库

   Python中的主流词云生成器是wordcloud,该代码针对 Python 3.7、3.8、3.9、3.10、3.11 进行了测试。

   wordcloud依赖于numpy and pillow,如果要预览或保存生成的词云图,matplotlib也是必须的。要显示统计中文数据,需要安装jieba分词 (中文分词)。

   所以,我们需要安装下面几个模块包:

安装配置好python开发环境后,

  • pip install numpy
  • pip install pillow
  • pip install matplotlib
  • pip install jieba
  • pip install wordcloud
  • pip install stylecloud

2、WordCloud库

(1)、制作简单文本内容词云

   安装好相关的python库后,我们创建一个p10.py的python文件,输入下面的代码

#-*- coding: UTF-8 -*-
from wordcloud import WordCloud
# 词云的文本内容
text = "逆境清醒、Adversity Awake、https://blog.csdn.net/weixin_69553582、逆境清醒的博客_CSDN博客、python教程、前端特效实例、python turtle绘图、three.js、源码"
wc.generate(text)
# 将词云存为本地图片png格式
wc.to_file("p10.png")

   运行p10.py文件,

   在p10.py同一个目录里,出现了一张名为:p10.png的图片,点击打开,如下图:

   我们发现词云图片里有些中文显示不出来,变成了矩形,这是因为 WordCloud 默认不支持中文的缘故,我们需要设置一个可以支持中文的字体,修改代码:

#-*- coding: UTF-8 -*-
from wordcloud import WordCloud
# 词云的文本内容
text = "逆境清醒、Adversity Awake、https://blog.csdn.net/weixin_69553582、逆境清醒的博客_CSDN博客、python教程、前端特效实例、python turtle绘图、three.js、源码"
wc=WordCloud(font_path='msyh.ttc')
wc.generate(text)
# 将词云存为本地图片png格式
wc.to_file("p10.png")

   再次运行p10.py文件,这次生成的词云图为:

(2)、制作一个由重复单词组成的词云

   用一个重复的单词制作一个词云。

import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud

text = "逆境清醒"

x, y = np.ogrid[:300, :300]

mask = (x - 150) ** 2 + (y - 150) ** 2 > 130 ** 2
mask = 255 * mask.astype(int)

wc = WordCloud(background_color="white", repeat=True, mask=mask,font_path='msyh.ttc')
wc.generate(text)

plt.axis("off")
plt.imshow(wc, interpolation="bilinear")
plt.show()

   运行结果:

(3)、使用分词生成词云

   前面举的例子都是使用一个词组生成的词云, 并不算中文的句子。
   对句子进行分词需要用到jieba分词库。
   以一首歌《就算世界无童话》的歌词(句子进行分词,使用分词生成词云)来举例。

   

就算世界无童话
作词:林夕
作曲:雷颂德
演绎:卫兰

望向每双率真眼睛
似看到 最动人风景
没有嘈音只得笑声
散播到 最远的山岭
ah……
在这世间分享晚餐
有重担 有万人分担
没有染污的晚海
会看见远方的花瓣
ah……
why i smile
cos you make me smile
如所有错失都得到宽待
如计较会被换成慷慨
如纯良仍然能被记载
孤苦的得到理睬
这可算妙想天开
愿这世界如童话
抱着想象实现它
就凭摘星的手臂
为地球每夜放烟花
就算世界无童话
放下包袱完成它
就来学攀山者有心不会怕
如所有苦衷都得到体谅
如占据会被换成分享
如捱穷仍然能被敬抑
挑剔的懂得赞赏
呼吸会更加清香
若你我他一起唱歌
这世界 会动人得多
任你我他相差几多 
仍然能同座

import jieba
import jieba.analyse
from wordcloud import WordCloud
import numpy as np
from PIL import Image

text = """
就算世界无童话
作词:林夕
作曲:雷颂德
演绎:卫兰

望向每双率真眼睛
似看到 最动人风景
没有嘈音只得笑声
散播到 最远的山岭
ah......
在这世间分享晚餐
有重担 有万人分担
没有染污的晚海
会看见远方的花瓣
ah......
why i smile
cos you make me smile
如所有错失都得到宽待
如计较会被换成慷慨
如纯良仍然能被记载
孤苦的得到理睬
这可算妙想天开
愿这世界如童话
抱着想象实现它
就凭摘星的手臂
为地球每夜放烟花
就算世界无童话
放下包袱完成它
就来学攀山者有心不会怕
如所有苦衷都得到体谅
如占据会被换成分享
如捱穷仍然能被敬抑
挑剔的懂得赞赏
呼吸会更加清香
若你我他一起唱歌
这世界 会动人得多
任你我他相差几多 
仍然能同座
"""

text_after_split = jieba.cut(str(text), cut_all=False)
words=' '.join(text_after_split)
bg =np.array(Image.open("img/011a.jpg"))
wc=WordCloud(width=500,
             height=500,
             mask=bg,
             background_color='black',
             font_path="msyh.ttc"
            ) 
wc.generate(words)
wc.to_file("p11.png")

   运行结果:

(4)、制作基于.txt文件的词云

   有时我们需要统计的数据量很大,如果放在代码里有点不现实,这时我们可以将需要统计的数据保存成外部文件格式(例如.txt文件),供程序调用。

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
mask = np.array(Image.open("img/yf1.jpg"))
f = open('红楼梦诗词.txt','r',encoding = 'utf-8')
text = f.read()
f.close
wordcloud = WordCloud(background_color="white",\
                      width = 800,\
                      height = 600,\
                      max_words = 200,\
                      max_font_size = 80,\
                      mask = mask,\
                      font_path='msyh.ttc',\
                      contour_width = 2,\
                      contour_color = 'steelblue'
                      ).generate(text)
wordcloud.to_file('p21.png')

   运行效果:

(5)、WordCloud库参数说明

我们可以修改参数,将词云做成不同形状,例如:

  

参数说明
font_path :string#字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = ‘黑体.ttf’
width :int (default=400)#输出的画布宽度,默认为400像素
height :int (default=200)#输出的画布高度,默认为200像素
random_state :int or None  #为每个单词返回一个PIL颜色
colormap :string or matplotlib colormap, default=”viridis”#给每个单词随机分配颜色,若指定color_func,则忽略该方法
collocations :bool, default=True#是否包括两个词的搭配
regexp :string or None (optional)#使用正则表达式分隔输入的文本
color_func :callable, default=None#生成新颜色的函数,如果为空,则使用 self.color_func
relative_scaling :float (default=.5)#词频和字体大小的关联性
mode :string (default=”RGB”)#当参数为“RGBA”并且background_color不为空时,背景为透明
max_font_size :int or None (default=None)#显示的最大的字体大小
background_color :color value (default=”black”)#背景颜色,如background_color=’white’
stopwords :set of strings or None#设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
max_words :number (default=200)#要显示的词的最大个数
font_step :int (default=1)#字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差
min_font_size :int (default=4)#显示的最小的字体大小
scale :float (default=1)#按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍
mask :nd-array or None (default=None)#如果参数为空,则使用二维遮罩绘制词云。
prefer_horizontal :float (default=0.90)#词语水平方向排版出现的频率

#常用加载库

#常用加载库:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

筛选后统计
wc = collections.Counter(result_list)

获取前100最高频的词
wctop50 = word_counts.most_common(50)
print(wctop50)

设置显示词云图中无坐标轴
plt.axis(‘off’)
plt.show()

显示生成的词云图
plt.imshow(wc, interpolation=‘bilinear’)

读入文件:

f = open(‘红楼梦诗词.txt’,’r’,encoding = ‘utf-8’)
text = f.read()

绘制词云
wc = WordCloud(
background_color=‘white’, # 设置背景颜色 默认是black
width=800, height=600,
max_words=100, # 词云显示的最大词语数量100
font_path=‘simhei.ttf’, # 设置显示字体
max_font_size=99, # 设置字体最大值99
min_font_size=15, # 设置子图最小值15
random_state=50 # 设置随机生成多少种配色方案
).generate_from_frequencies(text)

文本预处理
new_data = re.findall(’[\u4e00-\u9fa5]+’, data, re.S)
new_data = ” “.join(new_data)

文本分词
seg_list_exact = jieba.cut(new_data, cut_all=True)

result_list = []
with open(‘stop_words.txt’, encoding=‘utf-8’) as f:
con = f.readlines()
stop_words = set()
for i in con:
    i = i.replace(“\n”, “”) # 去掉读取每一行数据的\n
    stop_words.add(i)

for word in seg_list_exact:
    # 设置停用词并去除单个词
    if word not in stop_words and len(word) > 1:
        result_list.append(word)
        print(result_list)

3、stylecloud库

   stylecloud基于wordcloud库。

   该库的特点有:

   支持词云图图标形状设置,
   可读取csv文件,.txt文件等
   可调色
   …

   stylecloud库,可以使用_stylecloud.gen_stylecloud()_ 方法来生成词云图,通过传递相应的文本 .txt 文件的路径和生成词云的图标样式即可。

(1)、几行代码简单词云

   我们可以通过几行代码生成一个还算不错的词云。每次生成的词云颜色和效果都不同。大家可以多保存几个来挑选。

完整python代码:

import stylecloud
from PIL import Image
text1="逆境清醒、Adversity Awake、https://blog.csdn.net/weixin_69553582、逆境清醒的博客_CSDN博客、python教程、前端特效实例、python turtle绘图、three.js、源码、python、python、前端技术、tomcat、three.js、python、python、前端技术、tomcat、three.js、python、python、前端技术、tomcat、three.js"
stylecloud.gen_stylecloud(
text=text1,
background_color='black',
font_path="msyh.ttc",
output_name =  'p31.png'

   运行效果: 

(2)、图标形状词云图

   完整python代码:

import stylecloud

stylecloud.gen_stylecloud(file_path='股票基本知识1.txt',
                          icon_name='fas fa-dog',
                          palette='colorbrewer.diverging.Spectral_11',
                          font_path="msyh.ttc",
                          background_color='black',
                          output_name='p25.png')

   运行效果: 

      同一段代码,只要更换图标形状代码,即可显示出不同形状效果的词云。

      icon_name参数的模板【fas fa-iconname】只需要改动iconname即可。

      iconname并不是随便起的,必须能在https://fontawesome.com/license/free 搜到才可以。

      运行效果如下图:

   (3)、stylecloud库参数说明

text:str = None,# 输入文本,最好在直接调用函数时使用
file_path:str = None,# 输入文本的文件路径
size:int = 512,# 词云图长宽大小
icon_name:str = “fas fa-flag”,#stylecloud 形状的图标名称
palette:str = “cartocolors.qualitative.Bold_5”,# 配色方案
colors:Union[str, List[str]] = None,colors=None,    #文本颜色
background_color:str = “white”,# 控制词云图底色,可传入颜色名称或16进制色彩
max_font_size:int = 200,# stylecloud 中的最大字号
max_words:int = 2000,# stylecloud 可包含的最大单词数
stopwords:bool = True, # 布尔值,用于筛除常见禁用词
custom_stopwords:Union[List[str], set] = STOPWORDS,# 传入自定义的停用词List
add_stopwords:bool = False,
icon_dir:str = “.temp”,
output_name:str = “stylecloud.png”,# stylecloud 的输出文本名
gradient:str = None,# 梯度方向
font_path:str = os.path.join(STATIC_PATH, “Staatliches-Regular.ttf”),# stylecloud 所用字体,若要正确显示中文字符,需要指定中文字体
random_state:int = None,# 控制单词和颜色的随机状态
collocations:bool = True,
invert_mask:bool = False,
pro_icon_path:str = None,
pro_css_path:str = None,

(4)、调色板库

   Palettable(以前称为brewer2mpl)是Python的调色板库。 它是用纯Python编写的,没有依赖关系, 但它可以为 Matplotlib 提供彩色地图。 您可以使用Palettable自定义matplotlib图或 为 Web 应用程序提供颜色。

调色板库调用方式:

palette='colorbrewer.diverging.Spectral_11'

palette=’colorbrewer.qualitative.Dark2_7′
palette=’cartocolors.qualitative.Bold_5′
palette=’colorbrewer.qualitative.Set1_8′

(5)、图标形状名字索引表

      同一段代码,只要更换图标形状代码,即可显示出不同形状效果的词云。

      icon_name参数的模板【fas fa-iconname】只需要改动iconname即可。

四、总结

        本文通过多个实例和完整python代码,举例说明了python环境下如何制作有自己特色的词云的方法。 wordcloud 和stylecloud这两种主流的python 词云库,结合jieba中文分词和 numpy、pillow、matplotlib能够满足大多数词云制作的需求。做出有特色的词云需要多练习。

        还有一些在线制作词云的网站,资料待更新。

          推荐阅读:

计算机视觉__基本图像操作(显示、读取、保存)直方图(颜色直方图、灰度直方图)直方图均衡化(调节图像亮度、对比度)

 语音识别实战(python代码)(一)

 人工智能基础篇

 计算机视觉基础__图像特征

93d65dbd09604c4a8ed2c01df0eebc38.png

 matplotlib 自带绘图样式效果展示速查(28种,全)

074cd3c255224c5aa21ff18fdc25053c.png

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

fe88b78e78694570bf2d850ce83b1f69.png

cb4b0d4015404390a7b673a2984d676a.png

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦

 Python 3D可视化(一)

 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

e84d6708316941d49a79ddd4f7fe5b27.png

938bc5a8bb454a41bfe0d4185da845dc.jpeg

0a4256d5e96d4624bdca36433237080b.png

 python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

python爱心源代码集锦(18款)

dc8796ddccbf4aec98ac5d3e09001348.jpeg

0f09e73712d149ff90f0048a096596c6.png

40e8b4631e2b486bab2a4ebb5bc9f410.png

 Python中Print()函数的用法___实例详解(全,例多)

 Python函数方法实例详解全集(更新中…)

 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念

09e08f86f127431cbfdfe395aa2f8bc9.png

用代码过中秋,python海龟月饼你要不要尝一口?

 python练习题目录

03ed644f9b1d411ba41c59e0a5bdcc61.png

daecd7067e7c45abb875fc7a1a469f23.png

17b403c4307c4141b8544d02f95ea06c.png

草莓熊python turtle绘图(风车版)附源代码

 ​草莓熊python turtle绘图代码(玫瑰花版)附源代码

 ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

4d9032c9cdf54f5f9193e45e4532898c.png

c5feeb25880d49c085b808bf4e041c86.png

 巴斯光年python turtle绘图__附源代码

皮卡丘python turtle海龟绘图(电力球版)附源代码

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

fea225cb9ec14b60b2d1b797dd8278a2.png

bba02a1c4617422c9fbccbf5325850d9.png

37d6aa3e03e241fa8db72ccdfb8f716b.png

2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特

 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套)

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

5d409c8f397a45c986ca2af7b7e725c9.png

6176c4061c72430eb100750af6fc4d0e.png

1f53fb9c6e8b4482813326affe6a82ff.png

【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)

 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

80007dbf51944725bf9cf4cfc75c5a13.png

1ab685d264ed4ae5b510dc7fbd0d1e55.jpeg

1750390dd9da4b39938a23ab447c6fb6.jpeg

 Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)

 色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)

2023年4月多家权威机构____编程语言排行榜__薪酬状况

aa17177aec9b4e5eb19b5d9675302de8.png

38266b5036414624875447abd5311e4d.png

6824ba7870344be68efb5c5f4e1dbbcf.png

 手机屏幕坏了____怎么把里面的资料导出(18种方法)

【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)

 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决

fffa2098008b4dc68c00a172f67c538d.png

5218ac5338014f389c21bdf1bfa1c599.png

c6374d75c29942f2aa577ce9c5c2e12b.png

 tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

 Tomcat端口配置(详细)

 Tomcat 启动闪退问题解决集(八大类详细)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年8月28日
下一篇 2023年8月28日

相关推荐