python实现词云

首先我们先配置下环境: 打开命令行,输入以下命令,回车:

1
pip3 install numpy matplotlib pillow wordcloud imageio jieba snownlp itchat -i https://pypi.tuna.tsinghua.edu.cn/simple 

如果遇上权限问题的话:

在前面加上sudo

如果你遇到python pip更新问题:

输入以下命令:

sudo pip3 --upgrade pip

下面开始正式的词云学习:

1
2
3
4
5
6
7
8
9
10
11
# 导入第三方库
import wordcloud

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

#调用词云对象的generate方法,将文本传入
w.generate('and that government of the people,by the people,for the people,shall not perish from the earth.')

#将生成的词云保存到当前文件夹下
w.to_file('example1.png')

效果如下:

这只是简单的制作,我们还可以美化它:

我们可以在WordCloud()里面加入各种参数,控制词云的字体,字号,字色,背景颜色等等。

wordcloud库会非常智能地按空格进行分词及词频统计,出现次数多的词就大。

美化词云

注意字体

1
2
3
4
5
6
7
8
9
10
import wordcloud

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

# 调用词云对象的generate方法,将文本传入
w.generate('从明天起,做一个幸福的人。喂马、劈柴,周游世界。从明天起,关心粮食和蔬菜。我有一所房子,面朝大海,春暖花开')

# 将生成的词云保存为output2-poem.png图片文件,保存到当前文件夹中
w.to_file('example2.png')

常用参数

  • width 词云图片宽度,默认400像素
  • height 词云图片高度 默认200像素
  • background_color 词云图片的背景颜色,默认为黑色

background_color='white'

  • 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 指定词云形状图片,默认为矩形

通过以下代码读入外部词云形状图片(需要先pip install imageio安装imageio)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
w=wordcloud.WordCloud(
width=400,
height=200,
background_color='black',
font_path=None,
font_step=1,
min_font_size=4,
max_font_size=None,
max_words=200,
stoppwords={},
scale=1,
prefer_horizontal=0.9,
relative_scaling=0.5,
mask=None
)

从外部文件读入文本

1
2
3
4
5
6
7
8
9
10
11
12
13
import wordcloud

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

w=wordcloud.WordCloud(
width=1000,
height=700,
background_color='white',
font_path='Songti.ttc')
w.generate(txt)
w.to_file('example3.png')