“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”。从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
“词云”就是数据可视化的一种形式。给出一段文本的关键词,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白文章主旨。
词云
词云是对文本内容进行可视化呈现的一种方式,它会对文本中出现频率较高的词进行视觉上的突出, 词语出现的频率越高,字体就会越大,颜色也会越醒目。通过查看词云图,我们能快速获取文本中的主要内容。
创建词云图需要导入wordcloud库, 然后通过词云3步曲
来制作词云。
import wordcloud
text = 'Word Cloud, or Tag Cloud is a visual representation of text data. Word Cloud could display a list of words. The size and color of each word in a Word Cloud indicates its frequency or importance in the text.'
w = wordcloud.WordCloud() //第一步:创建词云对象
w.generate(text) //第二步:加载词云文本
w.to_file('词云.png') //第三步:保存词云图片
第一步:创建词云对象
w = wordcloud.WordCloud()
代码作用:创建词云对象并赋值给变量w 小括号中填写参数,用来设置词云对象的属性 书写时注意区分大小写。
w = wordcloud.WordCloud( //词云库,全小写;创建词云对象的命令 W和C大写
width=1000, //宽
height=600, //高
background_color='white', //背影颜色
colormap='Blues', //字体色系
stopwords=s, //停用词,s是存放着停用词的集合
font_path=mac //中文字体,需要根据自己的电脑系统选择不同系统使用的默认中文字体: mac = 'PingFang.ttc', win = 'simhei.ttf'
)
第二步:加载词云文本
w.generate()
w 是第1步中赋值的变量, 小括号中需要填写字符串
制作中文词云时,需要对文本进行jieba分词
import wordcloud
import jieba
f = open('少年中国说.txt', 'r', encoding='utf-8')
text = f.read()
f.close
lst = jieba.lcut(text) //使用jieba库的lcut()方法对中文文本text进行分词
s = ''.join(lst) //使用join()命令,把分词结果用空格拼接成字符串
mac = 'PingFang.ttc'
win = 'simhei.ttf'
w = wordcloud(font_path=mac)
w.generate(s) //把分词后的文本字符串作为generate()的参数
join()命令
作用:
将列表元素用指定字符拼接成字符串
使用方法:
‘拼接字符’.join(列表)
第三步:保存词云图片
w.to_file()
w是第1步中赋值的变量, 小括号中填写完整的图片名称
完整代码如下:
//导入需要的第三方库
from PIL import Image
import wordcloud
import jieba
//如果文本内容存放在文件中,需要先读取出来
f = open('少年中国说.txt', 'r', encoding='utf-8')
text = f.read()
f.close
//对中文文本进行jieba分词 并把分词结果拼接成字符串
lst = jieba.lcut(text)
s = ''.join(lst)
//不同系统自带的中文字体
mac = 'PingFang.ttc'
win = 'simhei.ttf'
m = {'强则', '智则', '富则', '而全'} //停用词集合
//词云3步曲
w = wordcloud(
width=1000,
height=600,
background_color='white',
colormap='Blues',
stopwords=s,
font_path=mac)
w.generate(m)
w.to_file('词云.png')
//打开并显示图片
p = Image.open('词云.png')
p.show()
创意词云图
重复显示词语
当文本中包含的词语太少时,可以设置wordcloud()中的repeat参数让词语重复显示,使词云图更饱满。
text = '生日快乐 HappyBirthday'
w = wordcloud.WordCloud(
...
repeat=True
...
)
w.generate(text)
w.to_file('海报.png')
参数repeat: 设置词语是否可以重复
repeat=False //词语不重复 (默认)
repeat=True //词语重复 (每个词重复次数相同)
限制词语数量
wordcloud()中的max_words参数可以设置词云图中词语的最大数量,默认值是200。
调节max_words,可以调整词云图中词语的密集程度。数值越大,词语越密集;数值越小,词语越稀疏。
设置词云形状
准备好设置词云形状的图片,通过设置WordCloud()中的mask参数,可以生成特定形状的词云图。
WordCloud()会按照给定图片的大小创建词云对象,并识别出图片中的彩色区域,让词云只在彩色区域显示文字,而不在白色区域显示文字。
//获得图片的颜色数据
image = Image.open('heart.jpg')
img = numpy.array(image)
w = wordclound.WordCloud(
...
mask=img, //设置mask参数
...
)
设置mask参数后,词云图片的宽和高 会与给定图片相同,就不需要再设置width和height这两个参数了。
匹配图片颜色
设置WordCloud()中的color_func参数,可以让词云图中字体 的颜色更接近给定图片的颜色。
1. 生成字体颜色。使用wordcloud库中的颜色生成器ImageColorGenerator()生成字体需要的颜色,括号中 填写存储图片信息的变量。
2. 结果赋值给color_func参数。
image = Image.open('heart.jpg')
img = numpy.array(image)
image_color = wordcloud.ImageColorGenerator(img)
WC = wordcloud.WordCloud(
...
mask=img,
color_func=image_color,
...
)
添加词云轮廓
WordCloud()中的contour_width,contour_color参数,可以分别设置词云图中轮廓线的宽度、颜色。
设置词云轮廓
contour_width //设置轮廓线宽度(大于0的浮点)
contour_color //设置轮廓线颜色(默认黑色)
例:设置灰色、宽度为2的轮廓线
WC = wordcloud.WordCloud(
...
mask=img,
color_func=image_color,
contour_width=2,
contour_color='grey',
...
)