【写在前面】

以前看到过一些大神制作的词云图 ,觉得效果很有意思。如果有朋友不了解词云图的效果,可以看下面的几张图(图片都是网上找到的);

网上找了找相关的软件,有些软件制作 还要付费。结果前几天在大神的公众号里的文章中看到了python也能实现,而且效果也很不错 。那还等什么,不赶紧盘它?

【示例代码】

# coding=utf-8
# @Auther : "鹏哥贼优秀"
# @Date : 2019/7/31
# @Software : PyCharm
import numpy as np
import jieba
from PIL import Image
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt def draw_word_cloud(word):
words = jieba.cut(word)
wordstr = " ".join(words)
sw = set(STOPWORDS)
sw.add("ok")
mask = np.array(Image.open('2.jpg'))
wc = WordCloud(
font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
mask=mask,
max_words=200,
max_font_size=100,
stopwords=sw,
scale=4,
).generate(wordstr) # 显示词云图
plt.imshow(wc)
plt.axis("off")
plt.show()
# 保存词云图
wc.to_file('result.jpg') if __name__ == "__main__":
with open("test2.txt", "rb") as f:
word = f.read()
draw_word_cloud(word)

【效果如下】

【知识点】

1、词云图 制作前,需要先准备几个东西:

(1)下载python wordcloud库,也是词图库制作的关键库。我在下载这个库 时,经常因为网络超时导致下载失败,怎么办呢?多试几次呗;

(2)numpy库,用于图片处理,将图片读取后解析成数组;

(3)如果要对中文句子进行分词,那么需要jieba库;如果是英文分词,那可以不下载;

(4)如果要在界面上直接展示词云图 ,那么需要matlplotlib来画图;

(5)要处理图片,根据少不了PIL,毕竟它可是官方的图像处理库;

2、接下来,就是准备要分析的内容。示例代码中的txt内容,是我上一篇文章。然后就是词云图的形状。示例代码中的图片2.jpg原图如下:

3、准备工作 做完了,那自然就开始编码了。

(1)jieba.cut():就是对txt内容进行分词了,注意得到的是个generator,因此需要将其转成字符串;当然也可以使用jieba.lcut(),这 样得到的就是列表了;

(2)STOPWORDS集合的设置:停用词有什么呢?主要是对一些你不想要的单词进行过滤,比如“好的”“可以”这 类单词。另外,在对停用词进行过滤时,有两种方法,一种是像示例代码,将stopwords作为wordcloud方法的参数,这样最简单;也可以自己写段代码,人为过滤停用词;

(3)将你要的词云图形状图片打开,并作为参数传给wordcloud方法

(4)wordcloud方法各参数的意义,可以参考其他帖子:

https://blog.csdn.net/kouyi5627/article/details/80530569

里面我想着重讲的是regexp参数,即正则表达式。没错,就是正则表达式,有了这个参数,我们可以用正则表达式规则进一步实现自己的单词过滤,比如\d只显示数字。我之前遇到过 这 个坑,下面再讲。

另外,scale=4生成的图片一般是500KB左右,如果不填,默认只有10几KB;

(5)对内容进行生成词云图时,generate方法最简单,直接将字符串传进来就可以;generate_from_frequencies方法的话,需要传入字典,并自己统计好每个单词的次数;

(6)界面显示词云图的代码很简单,axis("off")是为了不显示坐标,这样更美观;

(7)即将生成的词云图保存到本地,也不多解释。

综上,大致就是示例代码 的流程,是不是蛮简单的?那自己动手来玩一次吧。

4、下面我再讲讲自己在制作词云图遇到的坑。

一开始我是想对各期双色球号码进行词云图分析的,结果一直报错,错误如下:

ValueError: We need at least 1 word to plot a word cloud, got 0.

意思就是说我传入的wordstr是空的?怎么可能呢,我明明有数字呀?最后我在wordcloud方法的官方说明中找到了原因:

看到没?regexp参数如果不填写的话,默认是会自动过滤掉单个词的,因此数字就是因为这个原因一直被过滤了。怎么解决呢?有两个办法,第一就是传入regexp参数,比如regexp="\d*";第二种方法就是用

generate_from_frequencies方法,这样因为有每个数字的频繁在,就不会自动被过滤掉了。从我自己的使用结果来看,还是用第二种方法的效果好看点。

如果大家觉得看了有所帮助或者喜欢的话,可以关注我的公众号“鹏哥贼优秀”,谢谢大家!

作者:华为云云享开发者 鹏哥贼优秀

【Python成长之路】词云图制作的更多相关文章

  1. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  2. python根据文本生成词云图

    python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...

  3. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  4. 【Python成长之路】装逼的一行代码:快速共享文件

    [Python成长之路]装逼的一行代码:快速共享文件 2019-10-26 15:30:05 华为云 阅读数 335 文章标签: Python编程编程语言程序员Python开发 更多 分类专栏: 技术 ...

  5. Python模块---Wordcloud生成词云图

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...

  6. python成长之路第三篇(1)_初识函数

    目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...

  7. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

    2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...

  8. 【Python成长之路】从零学GUI -- 制作智能聊天机器人

    [写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...

  9. Python成长之路第二篇(1)_数据类型内置函数用法

    数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...

随机推荐

  1. [考试反思]0820NOIP模拟测试27:幻影

    注:某让我把“傻孩子”三个字全部删掉了语法不通之处自行脑补(这句本身就语法不通) skyhAK 我和以及milk_feng220 还真的没有考虑过如果我考前3的话这个颜色该怎么表示(自从不粘排行榜以来 ...

  2. Asp.net Core 系列之--3.领域、仓储、服务简单实现

    ChuanGoing 2019-11-11  距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...

  3. 小程序的基本概念-生命周期(组件 wxml)

    一.组件生命周期:一个组件从创建开始到使用中最后被销毁的过程 ---onLoad事件:组件(创建成功并且加载完成)触发一次 (1)当此事件触发发送请求获取数据 (2)获取其他组件传递数据(option ...

  4. Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客 - 推酷 - 360安全浏览器 7.1

    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客 时间 2014-02-11 21:08:00  博客园-所有随笔区 ...

  5. PHP Laravel-包含你自己的帮助函数

    你可能想创建一个在应用的任何地方都可以访问的函数,这个教程将帮你实现

  6. nyoj 596-谁是最好的Coder (greater, less)

    596-谁是最好的Coder 内存限制:64MB 时间限制:1000ms 特判: No 通过数:15 提交数:28 难度:0 题目描述: 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的co ...

  7. C# XML解析之DOM模型

    DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,这里的含义其实是把文档对象化,文档中每个节点对应着模型中一个对象 ...

  8. python进程池与线程池

    为什么会进行池化? 一切都是为了效率,每次开启进程都会分配一个属于这个进程独立的内存空间,开启进程过多会占用大量内存,系统调度也会很慢,我们不能无限的开启进程. 进程池原来大概如下图 假设有100个任 ...

  9. flexpaper跨服务器访问swf不显示问题

    在项目中使用flexpaper.html在线预览时,发现文件存放在本地localhost能访问,在服务器上的无法访问,通常报错“loadswf() is not defined” 研究发现是跨域问题导 ...

  10. php为什么需要异步编程?php异步编程的详解(附示例)

    本篇文章给大家带来的内容是关于php为什么需要异步编程?php异步编程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我对 php 异步的知识还比较混乱,写这篇是为了 ...