Python数据可视化:WordCloud超详细入门

Python数据可视化:WordCloud入门

WordCloud是一种很好的展现数据的方式,网上也有不少小工具和在线网页。但是有些不支持中文,有些安装复杂,所以决定用Python实现。主要参考官网,通过官网的例子,讲一下WordCloud的制作。

WordCloud是一种很好的展现数据的方式,网上也有不少小工具和在线网页。

但是有些不支持中文,有些安装复杂,所以决定用Python实现。

主要参考官网,通过官网的例子,讲一下WordCloud的制作。

主要流程
  • 获取内容的路径
  • 如果是一段文字,系统自动算频次
  • 你也可以直接导入统计好的频次
  • 设置字体
  • 一般字体路径在C:\Windows\Fonts,你可以选自己喜欢的中文或者英文字体
  • 切割中文字符
  • 英文字符就不用切割了
  • 输入WordCloud的参数
  • 背景色
  • 字号
  • 生成的形状
  • 颜色
  • 字体大小
  • 字体旋转等等
  • 生成WordCloud
  • 用matplotlib显示图片
效果图

Python数据可视化:WordCloud入门(大伙都在用)

Python数据可视化:WordCloud入门(大伙都在用)

Python数据可视化:WordCloud入门(大伙都在用)

Python数据可视化:WordCloud入门(大伙都在用)

Python数据可视化:WordCloud入门(大伙都在用)

Python数据可视化:WordCloud入门(大伙都在用)

安装库

老规矩,首先,你要安装库。

最基本的两个:



1.  pip install wordcloud #这是WordCloud的库 

3.  pip install matplotlib #显示图像 



一个单词构造WordCloud

在这个代码中,我们需要安装一个numpy库

(大部分小伙伴应该都装过,就不用再装了)



1.  pip install numpy 



这里用这个库,主要是想用数学坐标生成一个简单的背景图案,比如圆形、方形

Python数据可视化:WordCloud入门(大伙都在用)

基本步骤

  • 输入单词
  • 用numpy 生成一个形状,下面生成了一个圆形mask
  • 输入WordCloud的参数(包括背景色、是否重复、图案形状)
  • 用matplotlib显示图片


1.  import numpy as np 
2.  import matplotlib.pyplot as plt 
3.  from wordcloud import WordCloud 
4.  text = "square" #输入你要的单词 
5.  x, y = np.ogrid\[:300, :300\] #快速产生一对数组 
6.  # 产生一个以(150,150)为圆心,半径为130的圆形mask 
7.  mask = (x - 150) \*\* 2 + (y - 150) \*\* 2 > 130 \*\* 2 #此时mask是bool型 
8.  mask = 255 \* mask.astype(int) #变量类型转换为int型 
9.  wc = WordCloud( 
10.   background\_color="white", #背景颜色为“白色” 
11.   repeat=True, #单词可以重复 
12.   mask=mask #指定形状,就是刚刚生成的圆形 
13.   ) 
14.  wc.generate(text) #从文本生成wordcloud 
15.  plt.axis("off") #把作图的坐标轴关掉 
16.  plt.imshow(wc, interpolation="bilinear") 
17.  plt.show() 



生成WordCloud

最简单的生成方式,文本内容都是英文,直接用系统默认的形状(一个长方形)

我这边是导入了一个商务英语的txt,所以可以看到,出现次数最多的单词是company,然后是business、new、work等单词,我还看到了money,哈哈~

Python数据可视化:WordCloud入门(大伙都在用)

基本步骤

  • 获取内容txt的路径
  • 输入WordCloud的参数(包括背景色、字号等)
  • 生成WordCloud
  • 用matplotlib显示图片

*WordCloud有很多参数,如果你不写,都是默认的。比如背景色默认黑色。



1.  import os 
2.  from os import path 
3.  from wordcloud import WordCloud 
4.  from matplotlib import pyplot as plt 
5.  # 获取当前文件路径 
6.  d = path.dirname(\_\_file\_\_) if "\_\_file\_\_" in locals() else os.getcwd() 
7.  # 获取文本txt的路径(txt和代码在一个路径下面) 
8.  text = open(path.join(d,'BusinessEnglish.txt')).read() 
9.  # 生成词云 
10.  wc = WordCloud( 
11.   scale=2, 
12.   max\_font\_size=100, #最大字号 
13.   background\_color='white' #设置背景颜色 
14.   ) 
15.  wc.generate(text) # 从文本生成wordcloud 
16.  # wc.generate\_from\_text(text) #用这种表达方式也可以  
17.  # 显示图像 
18.  plt.imshow(wc,interpolation='bilinear') 
19.  plt.axis('off') 
20.  plt.tight\_layout() 
21.  wc.to\_file('标签云效果图.png') # 储存图像 
22.  #plt.savefig('标签云效果图.png',dpi=200) #用这个可以指定像素 
23.  plt.show() 



设置WordCloud形状

都是长方形、圆形、正方形这种,好像不够炫酷

为了炫酷,我们可以给它设置不同的形状,比如云朵、爱心等等

下面我们用Alice的小裙子做个实例

这个图片长这样

Python数据可视化:WordCloud入门(大伙都在用)

我们生成的图片是这样的,可以看到,完整保留了上图的轮廓

Python数据可视化:WordCloud入门(大伙都在用)

基本步骤

和之前基本都是一致的,就是多了一步,导入指定图片,获取图片轮廓

  • 获取内容txt的路径
  • 输入WordCloud的参数(包括背景色、字号等),指定了生成的形状
  • 生成WordCloud
  • 用matplotlib显示图片

*代码中增加了一个stopwords,有些你觉得没意义的单词,不想显示在图片上,你就可以放在这里



1.  from os import path 
2.  from PIL import Image 
3.  import numpy as np 
4.  import matplotlib.pyplot as plt 
5.  import os 
6.  from wordcloud import WordCloud, STOPWORDS 
7.  # 获取当前文件路径 
8.  d = path.dirname(\_\_file\_\_) if "\_\_file\_\_" in locals() else os.getcwd() 
9.  # 获取文本txt的路径(txt和代码在一个路径下面) 
10.  text = open(path.join(d, 'BusinessEnglish.txt')).read() 
11.  # 读取mask的图像(图像和代码在一个路径下面) 
12.  alice\_mask = np.array(Image.open(path.join(d, "alice\_mask.png"))) 
13.  # 设置不显示单词,比如said、in、on、is这种单词 
14.  stopwords = set(STOPWORDS) 
15.  stopwords.add("said") 
16.  # 设置词云参数 
17.  wc = WordCloud(background\_color="white",  
18.   max\_words=2000,  
19.   mask=alice\_mask, 
20.   stopwords=stopwords,  
21.   contour\_width=3, #设置轮廓宽度 
22.   contour\_color='steelblue') #设置轮廓颜色 
23.  # 从文本生成wordcloud 
24.  wc.generate(text) 
25.  # 保存到文件 
26.  wc.to\_file(path.join(d, "alice.png")) 
27.  # 显示图片 
28.  plt.imshow(wc, interpolation='bilinear') 
29.  plt.axis("off") 
30.  plt.figure() #新建一个图片,把mask也显示出来 
31.  plt.imshow(alice\_mask, cmap=plt.cm.gray, interpolation='bilinear') 
32.  plt.axis("off") 
33.  plt.show() 



根据图片调整颜色

原图是这样的

Python数据可视化:WordCloud入门(大伙都在用)

如果我们直接根据上一步,获取图片轮廓,可以得到下图

Python数据可视化:WordCloud入门(大伙都在用)

我们进一步,根据原图,调整颜色

Python数据可视化:WordCloud入门(大伙都在用)

其实就是获取了图片颜色,也是一行代码



1.  image\_colors = ImageColorGenerator(alice\_coloring) 



完整代码



1.  from os import path  
2.  from PIL import Image  
3.  import numpy as np  
4.  import matplotlib.pyplot as plt  
5.  import os  
6.  from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator 

8.  # 获取当前文件路径 

10.  d = path.dirname(\_\_file\_\_) if "\_\_file\_\_" in locals() else os.getcwd()  
11.  # 获取文本txt的路径(txt和代码在一个路径下面)  
12.  text = open(path.join(d, 'BusinessEnglish.txt')).read() 

14.  # 读取我要的图片文件  
15.  alice\_coloring = np.array(Image.open(path.join(d, "alice\_color.png"))) 

17.  # 设置不显示的单词 

19.  stopwords = set(STOPWORDS)  
20.  stopwords.add("said") 

22.  # 设置词云参数 

24.  wc = WordCloud(background\_color="white",  
25.  max\_words=2000, 

27.  mask=alice\_coloring,  
28.  stopwords=stopwords,  
29.  max\_font\_size=40,  
30.  random\_state=42)  
31.  # 从文本生成wordcloud  
32.  wc.generate(text) 

34.  # 根据图片,创建颜色 

36.  image\_colors = ImageColorGenerator(alice\_coloring)  
37.  # 把图片分成3份 

39.  fig, axes = plt.subplots(1, 3)  
40.  axes\[0\].imshow(wc, interpolation="bilinear")  
41.  # recolor wordcloud and show  
42.  # we could also give color\_func=image\_colors directly in the constructor  
43.  axes\[1\].imshow(wc.recolor(color\_func=image\_colors), interpolation="bilinear")  
44.  axes\[2\].imshow(alice\_coloring, cmap=plt.cm.gray, interpolation="bilinear")  
45.  for ax in axes:  
46.  ax.set\_axis\_off() 





1.  # 单独显示图片  
2.  # plt.figure()  
3.  # plt.imshow(wc, interpolation="bilinear")  
4.  # plt.axis("off")  
5.  # plt.figure()  
6.  # plt.imshow(wc.recolor(color\_func=image\_colors), interpolation="bilinear")  
7.  # plt.axis("off")  
8.  # plt.figure()  
9.  # plt.imshow(alice\_coloring, cmap=plt.cm.gray, interpolation="bilinear")  
10.  # plt.axis("off")  
11.  plt.show() 



用频率绘制WordCloud

上面是直接把一个txt输进去,系统自动给你算出现次数的

但是实际过程中,我们有时候,是知道单词出现次数的,我们就想根据已知的次数显示

这一步,其实就改了一行代码,

原来是这样的



1.  wc.generate(text) # 这里的text是一段文字 



现在是这样的



1.  wc.generate\_from\_frequencies(text) 

3.  # 这里的text是一个字典 

5.  # 'ken': 1, 'was': 47, 'hot': 2, 'water': 2 



如果你已经有一个字典,直接代进去就好了

这里给大家详细看一下,如果假设我没有这个字典

我还是一段文字,我想先生成这个字典,再代入进去

这里,你需要安装一个库multidict,创建一键多值字典



1.  pip install multidict 



用multidict这个库,我可以把文本变成一个字典

Python数据可视化:WordCloud入门(大伙都在用)

通过上图就可以看到,这个字典有1105个组合,每一个单词,都统计了出现次数



1.  import multidict as multidict 
2.  import numpy as np 
3.  import os 
4.  import re 
5.  from PIL import Image 
6.  from os import path 
7.  from wordcloud import WordCloud 
8.  import matplotlib.pyplot as plt 
9.  def getFrequencyDictForText(sentence): 
10.   fullTermsDict = multidict.MultiDict() 
11.   tmpDict = {} 
12.   # making dict for counting frequencies 
13.   for text in sentence.split(" "): 
14.   if re.match("a|the|an|the|to|in|for|of|or|by|with|is|on|that|be", text): 
15.   continue 
16.   val = tmpDict.get(text, 0) 
17.   tmpDict\[text.lower()\] = val + 1 
18.   for key in tmpDict: 
19.   fullTermsDict.add(key, tmpDict\[key\]) 
20.   return fullTermsDict 
21.  def makeImage(text): 
22.   alice\_mask = np.array(Image.open("alice\_mask.png")) 
23.   wc = WordCloud( 
24.   background\_color="white", 
25.   max\_words=1000,  
26.   mask=alice\_mask 
27.   ) 
28.   # generate word cloud 
29.   wc.generate\_from\_frequencies(text) 
30.   # show 
31.   plt.imshow(wc, interpolation="bilinear") 
32.   plt.axis("off") 
33.   wc.to\_file('frequency.png') # 储存图像 
34.   plt.show() 
35.  # 获取当前文件路径 
36.  d = path.dirname(\_\_file\_\_) if "\_\_file\_\_" in locals() else os.getcwd() 
37.  # 获取文本txt的路径(txt和代码在一个路径下面) 
38.  text = open(path.join(d, 'BusinessEnglish.txt'), encoding='utf-8') 
39.  text = text.read() 
40.  makeImage(getFrequencyDictForText(text)) 



生成中英文WordCloud

生成一个中英文混搭的WordCloud

如果你的txt全是中文,那就是全中文的

Python数据可视化:WordCloud入门(大伙都在用)

基本步骤

和之前基本也都一样,就是中文字符,需要增加一个中文词语切割

这就需要添加一个库



1.  pip install jieba # 中文切割 



  1. 获取内容txt的路径
  2. 设置字体
  3. 切割中文字符
  4. 输入WordCloud的参数(包括背景色、字号等),指定了生成的形状
  5. 生成WordCloud
  6. 用matplotlib显示图片


1.  import os 
2.  from os import path 
3.  from wordcloud import WordCloud 
4.  from matplotlib import pyplot as plt 
5.  import jieba 
6.  # 获取当前文件路径 
7.  d = path.dirname(\_\_file\_\_) if "\_\_file\_\_" in locals() else os.getcwd() 
8.  # 获取文本txt 
9.  text = open(path.join(d,'商务英语.txt'),encoding='utf-8').read() 
10.  # 设置中文字体 
11.  font\_path = 'C:\\Windows\\Fonts\\\\simfang.ttf' # 字体路径 
12.  # 精确切割中文字符 
13.  text = ' '.join(jieba.cut(text, cut\_all = False)) 
14.  # 生成词云 
15.  wc = WordCloud( 
16.   font\_path = font\_path, #字体路径 
17.   scale=2, 
18.   max\_words = 100, #最多词个数 
19.   max\_font\_size=100, #最大字号 
20.   background\_color='white' #背景色 
21.   ) 
22.  wc.generate(text) 
23.  # 显示图像 
24.  plt.imshow(wc,interpolation='bilinear') 
25.  plt.axis('off') 
26.  plt.tight\_layout() 
27.  # 储存图像 
28.  #wc.to\_file('标签云效果图.png') 
29.  #plt.savefig('标签云效果图.png',dpi=200) 
30.  plt.show() 



🤝 期待与你共同进步

🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦

关于Python学习指南


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值