词云图,大家一定见过,大数据时代大家经常见,我们今天就来用python的第三方库wordcloud,来制作一个大数据词云图,同时会降到这个过程中遇到的各种坑,

举个例子,下面是我从自己的微信上抓的微信好友签名,制作的词云图:看来用的做多的还是“方得始终”啊

首先我们需要几个库,pip完了导入

 import chardet                         #检测字符类型的类
from wordcloud import WordCloud #词云库
import matplotlib.pyplot as plt #数学绘图库

咱们这个例子分2步,第一步:从文件读取一段文字,第二步制作词云图并显示出来

看代码:从桌面读取一个文件

 with open("C:\\Users\\fyc\\Desktop\\virgo.txt", "r") as f:
text = f.read()
type = chardet.detect(text)
text1 = text.decode(type["encoding"])

在这要做一个编码的工作,应为词云的generate函数接受的是一个Unicode类的对象,其他的对象会导致异常,经过层层跟进,终于在wordcloud.py文件里发现了这一行代码:

 stopwords = set(map(str.lower, self.stopwords))

 flags = (re.UNICODE if sys.version < '' and type(text) is unicode
else 0)
regexp = self.regexp if self.regexp is not None else r"\w[\w']+" words = re.findall(regexp, text, flags)

问题出在正则表达式:如果不是unicode类型,进来的text经过re.findall计算,将什么也匹配不到,words为一个空list,随后就会抛出异常

所以在generate()之前一定要转码成“Unicode”类型。

第二步:生成词云,并显示:

 wc1 = WordCloud(
background_color="white",
width=1000,
height=860,
font_path="C:\\Windows\\Fonts\\STFANGSO.ttf",#不加这一句显示口字形乱码
margin=2)
wc2 = wc1.generate(text1) #我们观察到generate()接受一个Unicode的对象,所以之前要把文本处理成unicode类型 plt.imshow(wc2)
plt.axis("off")
plt.show()

wordcloud构造处一个词云对象,然后generate()方法把传进来的文本“text"按照词出现的频率安排词的大小,其中text,我是找了一篇关于白羊座的介绍,文字如下:

豪放率真的白羊座女生,富有强大的想象力,热情勇敢,女汉子味十足。勇往直前,是你们最大的特点。所以即便面对困难挫折,白羊女都敢于迎接挑战。可以说,这是个极具战斗精神的新时代女性。如此强悍个性的白羊女,在异性的眼中却永远都少了点女人味专属的温柔,往往都是称兄道弟的份。 

  如果你期待一个林黛玉般的女孩来满足你的男子气概,碰到了她,你可真是门儿都没有了,识相的话,赶快找个窗子开溜吧!在火星守护下的白羊座女子,通常是积极而且坚强的。像小鸟依人、楚楚可怜这一类的形容词很难加诸在她身上。

  白羊座的女子应该算得上十二个星座中,独立性最强的女性。她绝对不是那种整天守在家里,等着你来接她、送她,完全缺乏独立行动能力的典型。对于大多数的白羊座女孩来说,她宁愿相信如果没有你在身边碍手碍脚,她办事效率或许要高得多。听我这么说,你或许会以为这样的女人是不需要男人的!那可就错啦!自信而骄傲的白羊座女性确有着坚强的独立生存能力。但她们内心都深深地渴望着她梦中的白马王子快点出现呢!很难相信吧!看起来那么锐利的她,其实是充满着童话般梦想的。而对所有的白羊座女子来说,她们心里最大的矛盾就是渴望征服对方,又期待着被对方征服的微妙心里。

  你现在可能有些担心,不知道该如何扮演好自已的角色了,是吗?别慌!先把你的“真心”准备好,以后的办法就好商量了,虽然有一点点辛苦,不过保证值得。

  首先,你必须认清,白羊座的女子基本上是“英雄主义”的。她会倾心于一个令她佩服的男人。她要嫁一个让她引以为傲的丈夫。她或许会比较欣赏事业有成的男人,但这并不表示她是个拜金主义者。家财万贯的花花公子是不会让她心动的,满腔理想的热血青年反而会受她的青睐。因此,如果你爱上了一个白羊座的女子,请先不必展开热烈的追求。哈巴狗一样的男人会让她既讨厌又害怕,她深怕给你一个礼貌的微笑之后,你就会死缠着她不放了。你最好先让她了解你的才干、你的魅力,引起她对你的好奇(或者应该说引起她征服你的兴趣),等你感受到她对你真有好感之后,你再诚恳的对她表示爱意,那么前途就大有可为了!

  你要像个“大男人”的样子(我说过她很英雄主义),但是你绝不能对她颐指气使。你一定要真心的关怀她,但绝对不要太纵容她。我想你应该用一种“英雄惜英雄”的态度来待你的白羊座女人,才是比较适当的。

  绝大多数的白羊座女子都很好强,她们坚持要在对方的心目中保持最重要的地位。当然她也会把你摆在她心中最重要的位置。而且她很忠实、很大方。她愿意与你分享她的一切。当然,她也会认为你应该与她分享一切,包括你的秘密。欺骗你的白羊座女人,有如犯了欺君之罪一样的严重。这一点你可千万要记住,她情愿听你令她心碎的忏悔,也不要接受美丽的谎言。你最好少在她面前夸奖其她的女孩,尤其是那种由衷的赞美,极可能会引起雷霆大火。

  由于她们那么积极坚强的个性,许多白羊座的女子都会给人一种尖锐、而且爱找麻烦的印象。在表面上,她们是不会让别人(尤其是男人)占便宜的。很多人会认为白羊座的女人总是尖嘴利牙的得理不饶人。正因为如此,她们常常会吃些暗亏,受到挫折,她们总是比其它的女孩活得辛苦一些。其实,你应该明白,她们的内心多半是正直、善良,而且脆弱的。只要你真心的关怀她,在她受了委屈的时侯,给她一个温暖的怀抱,她会成为你一生忠实可靠的伴侣。

  白羊座的女人几乎都可以成为出色的职业妇女,也同时能做称职的家庭主妇。事实上,让她拥有自已的事业对你们的婚姻是有帮助的。当她尽量在工作上发挥了她的好胜心和征服欲之后,回到家里做绵羊的机会就比较大了。如果要一个精力旺盛的白羊座女子,把心思全放在“你”的身上,我担心你会有点受不了的。至于家庭,你大可放心,她虽然柴米油盐之类的琐事,不是那么有兴趣,但好强的她,不会让自已成为一个失败的主妇的。

  还有件事你该庆幸,那就是我很少看到一个邋遢的白羊座妻子,她们大多都在婚后依然保持光鲜亮丽,不愿意别人讥笑她老公娶了个黄脸婆。就算偶尔懒散一下,只要老公稍加提醒,她们立刻就会警觉。我有个产后稍微发福的白羊座女友,就因为老公说了一句“以前我最欣赏你那双修长的腿了。”她硬是两个月减肥了二十磅。就凭她这股坚强的毅力,你能不相信她会全力以赴的做个好妻子吗?

关于构造方法的介绍需要说明几点:第一,用的是关键词参数,无需记住参数位置,技术参数的关键词就行。

关于参数的含义,在pycharm中查看快速文档,说明如下:

class WordCloud(object)  def __init__(self, font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode="RGB", relative_scaling=.5, regexp=None, collocations=True, colormap=None, normalize_plurals=True)  Documentation is missing. The following is copied from class WordCloud.
Word cloud object for generating and drawing. font_path:
(string) Font path to the font that will be used (OTF or TTF). Defaults to DroidSansMono path on a Linux machine. If you are on another OS or don't have this font, you need to adjust this path.
width:
(int (default=400)) Width of the canvas.
height:
(int (default=200)) Height of the canvas.
prefer_horizontal:
(float (default=0.90)) The ratio of times to try horizontal fitting as opposed to vertical. If prefer_horizontal < 1, the algorithm will try rotating the word if it doesn't fit. (There is currently no built-in way to get only vertical words.)
mask:
(nd-array or None (default=None)) If not None, gives a binary mask on where to draw words. If mask is not None, width and height will be ignored and the shape of mask will be used instead. All white (#FF or #FFFFFF) entries will be considerd "masked out" while other entries will be free to draw on. [This changed in the most recent version!]
scale:
(float (default=1)) Scaling between computation and drawing. For large word-cloud images, using scale instead of larger canvas size is significantly faster, but might lead to a coarser fit for the words.
min_font_size:
(int (default=4)) Smallest font size to use. Will stop when there is no more room in this size.
font_step:
(int (default=1)) Step size for the font. font_step > 1 might speed up computation but give a worse fit.
max_words:
(number (default=200)) The maximum number of words.
stopwords:
(set of strings or None) The words that will be eliminated. If None, the build-in STOPWORDS list will be used.
background_color:
(color value (default="black")) Background color for the word cloud image.
max_font_size:
(int or None (default=None)) Maximum font size for the largest word. If None, height of the image is used.
mode:
(string (default="RGB")) Transparent background will be generated when mode is "RGBA" and background_color is None.
relative_scaling:
(float (default=.5)) Importance of relative word frequencies for font-size. With relative_scaling=0, only word-ranks are considered. With relative_scaling=1, a word that is twice as frequent will have twice the size. If you want to consider the word frequencies and not only their rank, relative_scaling around .5 often looks good.
color_func:
(callable, default=None) Callable with parameters word, font_size, position, orientation, font_path, random_state that returns a PIL color for each word. Overwrites "colormap". See colormap for specifying a matplotlib colormap instead.
regexp:
(string or None (optional)) Regular expression to split the input text into tokens in process_text. If None is specified, r"\w[\w']+" is used.
collocations:
(bool, default=True) Whether to include collocations (bigrams) of two words.
colormap:
(string or matplotlib colormap, default="viridis") Matplotlib colormap to randomly draw colors from for each word. Ignored if "color_func" is specified.
normalize_plurals:
(bool, default=True) Whether to remove trailing 's' from words. If True and a word appears with and without a trailing 's', the one with trailing 's' is removed and its counts are added to the version without trailing 's' – unless the word ends with 'ss'.
Notes
Larger canvases with make the code significantly slower. If you need a large word cloud, try a lower canvas size, and set the scale parameter.
The algorithm might give more weight to the ranking of the words than their actual frequencies, depending on the max_font_size and the scaling heuristic.

大家使用百度翻译应该能看明白,这里说明几个比较关键的参数:

font_path:这个是在词云图中显示文字的字体存放的路径,特别是在显示中文的时候,这个参数尤为重要,如果缺省的话容易造成乱码,如下:

width,height  顾名思义,画布的长宽。

prefer_horizontal :词云的字体优先水平放置
mask:这是背景的形状,缺省是画布的形状。

其他几个参数就不说了

第三步就是用matplotlib库将词云图显示出来,这一段代码比较固定,没什么变化,死记硬背了

 plt.imshow(wc2)
plt.axis("off")
plt.show()

其中,axis是显示坐标,这里我们选择不现实坐标。整体效果如下:


												

词云wordcloud类介绍&python制作词云图&词云图乱码问题等小坑的更多相关文章

  1. 如何用Python 制作词云-对1000首古诗做词云分析

    公号:码农充电站pro 主页:https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作词云. 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视 ...

  2. scrapy-redis爬取豆瓣电影短评,使用词云wordcloud展示

    1.数据是使用scrapy-redis爬取的,存放在redis里面,爬取的是最近大热电影<海王> 2.使用了jieba中文分词解析库 3.使用了停用词stopwords,过滤掉一些无意义的 ...

  3. python制作词云

    需要模块wordcloud,pip install wordcloud安装即可.代码: , #边距background_color='black',#指定背景颜色font_path='simhei.t ...

  4. e分钟带你利用Python制作词云图

    随着大数据时代的来临,数据分析与可视化,显得越来越重要,今天给小伙伴们带来一种最常见的数据可视化图形-词云图的制作方法. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法 ...

  5. 词云wordcloud入门示例

    整体简介: 词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨. 基于Python的词云生成类库 ...

  6. python中关于传递参数模块argprase的一些小坑

    今天在写代码的时候遇到了一个关于parser的一些小坑,记录在此备用. 我们知道在python中可以用argprase来传递一些参数给代码执行,来看下面的例子,假设现在有一个test文件夹,下面有3个 ...

  7. Python - 利用词云wordcloud,jieba和中国地图制作四大名著的热词图

    热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...

  8. 词云-wordcloud

    import jiebabook = "2015.txt"txt = open(book).read()ex = {'不是','就是','的话','1.1','docin','ww ...

  9. Python创建二维数组(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...

随机推荐

  1. 多线程下载文件,ftp文件服务器

    1: 多线程下载文件 package com.li.multiplyThread; import org.apache.commons.lang3.exception.ExceptionUtils; ...

  2. Oracle数据库返回字符类型-1~1的结果处理

    如果实体类中定义的字段是String类型,Oracle数据库中返回的是数字类型,那么Oracle返回0.xxx的时候会丢失前面的0. 要想不丢失0,那么数据库返回的就要是字符串类型的,所以要将返回值转 ...

  3. 接口测试xml格式转换成json

    未经允许,禁止转载!!!! 接口测试一般返回的是xml和json,现在大多数时候是返回成json的格式,但是有时候也会出现xml格式, 由于xml格式的文件阅读起来不是很容易懂,所以尽量将xml转换成 ...

  4. 简单的js动态显示当前时间

    js中获取当前时间首先我们要new一个时间对象 var data = new Date(); 然后可以点出很多方法.获取不同的时间格式 自己可以去尝试

  5. Twitter OA prepare: Equilibrium index of an array

    Equilibrium index of an array is an index such that the sum of elements at lower indexes is equal to ...

  6. #C++初学记录(算法3)

    C - 不要62 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...

  7. php中in_array使用注意

    可能会导致长耗时: http://www.jb51.net/article/41446.htm

  8. webp格式

    有时候你右键保存了一张图片,然后好气啊,打不开.这要么是webp格式,要么,,,,要么有问题啊. WebP格式,谷歌大法开发的一种旨在加快图片加载速度的图片格式.图片压缩体积大约只有JPEG的2/3, ...

  9. cf249D

    这题说的是给了一个n*m的网格,然后每个格子的点事黑色的或者是白色的然后每个点如图所示    然后只能用白点和图中给出的边建立三角形然后询问三角形的个数有多少个,这样说每个三角形的边必须是图中有的边, ...

  10. linux常用命令:chkconfig 命令

    chkconfig命令用来安装,查看或修改 services随系统启动的启动选项的设置.是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各 ...