数据分析-可视化-wordcloud词云

智能决策上手系列教程索引

image.png

我们使用已经合并在一起的拉勾网数百个职位招聘详情文件来进行这个练习。
百度云下载文件 密码:bvb8

读取文件

读取并打印出前面100个字符

text=''
with open('./lagou-job1000-ai-details.txt','r') as f:
    text=f.read()
    f.close()
print(text[:100])

输出
职位描述:岗位职责:1.展开机器学习/深度学习等相关领域研究和开发工作;2.负责从事深度学习框架搭建,包括机器学习、图像处理等的算法和系统研发;3.支持公司相关产品深度学习相关研究;岗位要求:1.机器

jieba分词

#cell-2
import jieba
words = jieba.lcut(text)
cuted=' '.join(words)
print(cuted[:100])

输出被空格分开的文本:
职位 描述 : 岗位职责 : 1 . 展开 机器 学习 / 深度 学习 等 相关 领域 研究 和 开发 工作 ; 2 . 负责 从事 深度 学习 框架 搭建 , 包括 机器 学习 、 图像处理 等 的

安装wordcloud和matplotlib

词云wordcloud的官方项目地址

推荐直接用pip3 install wordcloud进行安装。
如果是conda则要使用-c切换通道为conda-forge,命令是
conda install -c conda-forge wordcloud可能比较慢,耐心等就好。

matplotlib视觉化模块官方网址
安装命令pip3 install matplotlibconda install matplotlib

生成词云对象

#cell-3
from wordcloud import WordCloud
fontpath='SourceHanSansCN-Regular.otf'

wc = WordCloud(font_path=fontpath,  # 设置字体
               background_color="white",  # 背景颜色
               max_words=1000,  # 词云显示的最大词数
               max_font_size=500,  # 字体最大值
               min_font_size=20, #字体最小值
               random_state=42, #随机数
               collocations=False, #避免重复单词
               width=1600,height=1200,margin=10, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效
              )
wc.generate(cuted)    

首先,默认情况wordcloud是不支持中文显示的,所以要先添加一个中文字体文件,一般是.ttf或.otf格式,你可以从网上搜索‘字体下载’找到想要的字体。上面代码中使用的是思源中文字体,点击可以直接下载使用

WordCloud(...)命令包含了很多参数,其中就包含了我们上面设定的字体路径font_path
注意这里width=1600,height=1200,margin=100图像宽高只是原始图像的大小,至于后面显示出来的时候可能还会被放缩。它的更多参数可以查看下面链接wordcloud官方WordCloud方法说明

显示词云图

我们用matplotlib的imshow就是image-show把图片显示出来。

#cell-4
import matplotlib.pyplot as plt
plt.figure(dpi=100) #通过这里可以放大或缩小
plt.imshow(wc, interpolation='catrom',vmax=1000)
plt.axis("off") #隐藏坐标

可以得到如下图效果:


image.png

去除冗余单词

我们可以利用jieba的del_word功能去掉冗余单词。
修改cell-2代码:

#cell-2
import jieba

removes =['熟悉', '技术', '职位', '相关', '工作', '开发', '使用','能力','优先','描述','任职']
for w in removes:
    jieba.del_word(w)

words = jieba.lcut(text)
cuted = ' '.join(words)
print(cuted[:100])

这里用for循环依次删除了各个冗余词,也可不用for循环,改为lcut之后对words进行处理:

words = jieba.lcut(text)
words = [w for w in words if w not in removes]

整体运行,得到下图:


image.png

区分中英文

如果我们只关注英文技术点,比如python,tensorflow等,那就忽略中文内容。
使用正则表达式来匹配提取哪些由az小写字母和AZ大写字母加上0~9数字组成的单词。
修改cell-2如下:

#cell-2
import jieba
words = jieba.lcut(text)
import re
pattern = re.compile(r'^[a-zA-Z0-1]+$')
words = [w for w in words if pattern.match(w)]
cuted = ' '.join(words)
print(cuted[:100])

完整执行,得到下图:


image.png

我们可以从这个图中看到人工智能技术相关职位所需要的掌握的主要技能。

改变造型

我们让单词按照特定的造型来排列。首先我们需要一张造型图片,下面是一张AI文字造型图片,请把它右键另存为ai-mask.png文件。

image.png

前面在wc = WordCloud(font_path=fontpath...中有很多参数可以设置,其中就有mask遮罩参数,可以指定一张读取的图片数据,根据官方说明,这个数据应该是nd-array格式,这是一个多维数组格式(N-dimensional Array)。

我们使用PIL模块中的Image.open('...')可以读取图片,然后利用numpy来转换为nd-arry格式。
修改cell-3,读取图片并增加mask参数:

#cell-3
from wordcloud import WordCloud
fontpath='SourceHanSansCN-Regular.otf'

import numpy as np
from PIL import Image
aimask=np.array(Image.open("ai-mask.png"))

wc = WordCloud(font_path=fontpath,  # 设置字体
               background_color="white",  # 背景颜色
               max_words=1000,  # 词云显示的最大词数
               max_font_size=100,  # 字体最大值
               min_font_size=5, #字体最小值
               random_state=42, #随机数
               collocations=False, #避免重复单词
               mask=aimask, #造型遮盖
               width=1600,height=1200,margin=2, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效
              )
wc.generate(cuted)  

完整执行后得到下图:


image.png

可以看到原本图片上白色的部分被留空,有颜色的部分才会放置单词。

改进颜色

默认情况图片上文字的颜色都是随机的,我们可以使用图片来控制文字的颜色。

WordCloud方法提供了一个color_func颜色函数的参数,用一个函数来改变每个词的颜色,在这里我们直接使用上面深色的AI图片颜色来控制。

from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
fontpath='SourceHanSansCN-Regular.otf'

import numpy as np
from PIL import Image
aimask=np.array(Image.open("ai-mask.png"))

genclr=ImageColorGenerator(aimask)

wc = WordCloud(font_path=fontpath,  # 设置字体
               background_color="white",  # 背景颜色
               max_words=1000,  # 词云显示的最大词数
               max_font_size=100,  # 字体最大值
               min_font_size=5, #字体最小值
               random_state=42, #随机数
               collocations=False, #避免重复单词
               mask=aimask, #造型遮盖
               color_func=genclr,
               width=1600,height=1200,margin=2, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效
              )
wc.generate(cuted)    

在上面,我们引入了from wordcloud import ImageColorGenerator方法,它是直接用来生成一个color_func颜色函数的,它括号里需要一个nd-array多维数组的图像,恰好我们上面的aimask就是这个格式,直接用就可以。

重新运行得到最开始看到的图,
和原图对比,就能看到文字颜色的规律了:


image.png

汇总

  1. 读取文件
  2. jieba分词
  3. 利用re正则表达式选出英文单词
  4. 生成词云对象,利用图片遮罩形状和改变颜色
  5. 使用Matplotlib来显示图片

完整代码如下:

#cell-1
text=''
with open('./lagou-job1000-ai-details.txt','r') as f:
    text=f.read()
    f.close()
print(text[:100])

#cell-2
import jieba
words = jieba.lcut(text)
import re
pattern = re.compile(r'^[a-zA-Z0-1]+$')
words = [w for w in words if pattern.match(w)]
cuted = ' '.join(words)
print(cuted[:500])

#cell-3
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
fontpath='SourceHanSansCN-Regular.otf'

import numpy as np
from PIL import Image
aimask=np.array(Image.open("ai-mask.png"))

genclr=ImageColorGenerator(aimask)

wc = WordCloud(font_path=fontpath,  # 设置字体
               background_color="white",  # 背景颜色
               max_words=1000,  # 词云显示的最大词数
               max_font_size=100,  # 字体最大值
               min_font_size=5, #字体最小值
               random_state=42, #随机数
               collocations=False, #避免重复单词
               mask=aimask, #造型遮盖
               color_func=genclr,
               width=1600,height=1200,margin=2, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效
              )
wc.generate(cuted)  

#cell-4
import matplotlib.pyplot as plt
plt.figure(dpi=150) #通过这里可以放大或缩小
plt.imshow(wc, interpolation='catrom',vmax=1000)
plt.axis("off") #隐藏坐标

智能决策上手系列教程索引

每个人的智能决策新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 都说世界上有两样东西是憋不住的,一件是喷嚏,一件是爱情。此刻看来,还漏了一件,那那就是剧烈的疼痛。 瑾宣已经痛的大...
    风一样的哥阅读 265评论 0 1
  • 一起走过的路,上次下着小雨,你撑着伞自顾往前走。我戏称你不给我打伞一会把你娃淋感冒了咋办…… 这条路下雪了,很厚,...
    她在笑啊阅读 174评论 0 0
  • 由于apple沙盒机制的限制,App之间的文件系统是不能相互访问的,也就是说A是不能访问B的文件数据的,好在app...
    mrChan1234阅读 1,204评论 0 1
  • 培养孩子的阅读习惯和阅读能力,需要一个长期的过程,家长在这个过程中的作用非常重要。 对于培养孩子的阅读能力,有很多...
    Friz阅读 925评论 0 8