python 词云可视化

安装python环境

pip install numpy matplotlib pillow wordcloud imageio jieba snownlp itchat

有些库以及安装过了
在这里插入图片描述

制作词云

一个简单的例子

# 导入词云制作第三方库
import wordcloud

# 创建词云对象
word = wordcloud.WordCloud()

# 传入文本
word.generate('and that government of the people, by the people, for the people, shall not perish from the earth.')

# 保存图片
word.to_file('output.png')

运行效果:
在这里插入图片描述
可以看到词云绘制出来的词的大小和出现的频率有关,并且去掉了一些没用的词。

设置词云属性

import wordcloud

# 设置词云图片宽、高、字体、背景颜色等参数
word = wordcloud.WordCloud(width=1000,height=700,background_color='white',font_path='msyh.ttc')

word.generate('从明天起,做一个幸福的人。喂马、劈柴,周游世界。从明天起,关心粮食和蔬菜。我有一所房子,面朝大海,春暖花开')

word.to_file('output.png')

运行效果:
在这里插入图片描述
绘制词云的时候单词大小有一定的随机性。
常用参数:

  • width 词云图片宽度,默认400像素
  • height 词云图片高度 默认200像素
  • background_color 词云图片的背景颜色,默认为黑色
  • font_step 字号增大的步进间隔 默认1号
    font_path 指定字体路径 默认None,对于中文可用font_path='msyh.ttc'
  • mini_font_size 最小字号 默认4号
  • max_font_size 最大字号 根据高度自动调节
  • max_words 最大词数 默认200
  • stop_words 不显示的单词 stop_words={"python","java"}
  • Scale 默认值1。值越大,图像密度越大越清晰
  • prefer_horizontal:默认值0.90,浮点数类型。表示在水平如果不合适,就旋转为垂直方向,水平放置的词数占0.9?
  • relative_scaling:默认值0.5,浮点型。设定按词频倒序排列,上一个词相对下一位词的大小倍数。有如下取值:“0”表示大小标准只参考频率排名,“1”如果词频是2倍,大小也是2倍
  • mask 指定词云形状图片,默认为矩形

通过外部文件导入文本

import wordcloud

# 从外部.txt文件中读取大段文本,存入变量txt中
file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()

word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc')

word.generate(txt)

word.to_file('output.png')

运行效果:
在这里插入图片描述

增加中文分词

import jieba
import wordcloud

word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc')

file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()
# 对文本进行中文分词,得到string
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)

word.generate(string)

word.to_file('output.png')

运行效果:
在这里插入图片描述
显示的内容以及从句子变成了单词。
中文分词库jieba的常用方法:

  • 精确模式(最常用,只会这个就行):每个字只用一遍,不存在冗余词汇。jieba.lcut('动力学和电磁学')
  • 全模式:把每个字可能形成的词汇都提取出来,存在冗余。jieba.lcut('动力学和电磁学',cut_all=True)
  • 搜索引擎模式:将全模式分词的结果从短到长排列好。jieba.lcut_for_search('动力学和电磁学')

改变词云形状

import jieba
import wordcloud

# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
mk = imageio.imread("wujiaoxing.png")

# 注意要加scale参数,提高清晰度
# 设置mask参数,改变形状
word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', mask=mk, scale=15)

file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)

word.generate(string)

word.to_file('output.png')

模板图片:
在这里插入图片描述
运行效果:
在这里插入图片描述
这图片一定要是白底的。

勾勒出形状的轮廓线

import wordcloud

string = open('hamlet.txt').read()

import imageio
mk = imageio.imread("alice.png")

# 增加参数contour_width和contour_color设置轮廓宽度和颜色
word = wordcloud.WordCloud(background_color="white", mask=mk, contour_width=1, contour_color='steelblue')

word.generate(string)

word.to_file('output.png')

模板图片:
在这里插入图片描述
运行效果:
在这里插入图片描述
据说不能用做的太清晰,不然不好看。

按照模板图片的颜色绘制词云

# 导入ImageColorGenerator提取图片颜色
from wordcloud import WordCloud,ImageColorGenerator

text = open('alice.txt').read()

import imageio
mk = imageio.imread("alice_color.png")

word = WordCloud(background_color="white", mask=mk,)

word.generate(text)

# 调用wordcloud库中的ImageColorGenerator()函数,提取模板图片各部分的颜色
image_colors = ImageColorGenerator(mk)

# 给词云对象按模板图片的颜色重新上色
word_color = word.recolor(color_func=image_colors)

word_color.to_file('output.png')

模板图片:
在这里插入图片描述
运行效果:
在这里插入图片描述

参考资料

视频地址
github

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值