【小白的实战】Python实用功能——分分钟就学会的词云图(下)

229 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

✔个人主页:Mr.Darcy8的掘金主页

🎉欢迎关注👀点赞👍收藏⭐留言📝以及交流人生哲理🎈学习心得🎁

❤系列专栏:小白的实战

⚽来我们一起菜鸡互啄,终成巨鸡!

接上期,我们算是可以自己完成一张看起来还不错的词云图了。

没错,仅仅只是看上去不错

哈利波特词云.png

细看你会发现,Harry、Ron、Hermione等人名占用了非常大的画幅。词也是排列得很杂。要有实际意义得话,恐怕这样一副词云图还不能让人满意。

况且我们是自己做的词云图,如果不能随心所欲自己设置一些参数,自己调整出想要得效果,那实在没必要花这么大功夫

今天我们就来一期进阶实战,和大家一起康康我们还能怎么调整词云图。

实战开始

一、回到开发页面

相信有部分小伙伴已经在做完第一幅图之后把jupyter关掉了吧?我们开始下一次实战的第一步当然是回到之前的页面,进入上次打代码的状态啦~

有人说,这么小儿科的东西也算第一步? 你是不是在水字数?

image.png

显然不是,这一步对第一次尝试jupyter的朋友来说至关重要。

别忘了这里是小白的实战,事无巨细是我们的原则。没基础的人的确会在这一步卡住,而网上没有相关资料可以带ta过关。不信你接着看:

  • 首先,jupyetr编辑产生的ipynb文件是没法直接点开进入的

image.png 看,直接点会默认打开一个你的集成式开发环境,比如我的是Vscode,你要下一些依赖和编译器啥的才可以运行,这点我暂时也不懂

  • 我们需要像一开始打开jupyter那样从任务栏或者快捷方式打开。

image.png

  • 然后找到我们之前编辑的ipynb文件,点击打开。

image.png

  • 打开就可以直接接着下去写代码了吗?当然不是。 你关闭jupyter内核之后变量的值都会丢失。你现在的f,w这些变量都不是之前值了,物是人非事事休啊。

image.png

  • 如果你直接运行最后一串代码想要输出些什么,就会出现报错

image.png

  • 同理,你如果打好了新的代码也一样运行不了。咱们要针对选定的代码cell再运行一次,来获取变量。在这里我们可以发现每一步几乎都是必要的,一环扣一环,所有我们直接全部运行一遍。

image.png

接下来,才是今天的开始

二、StopWords筛选词语

我们之前的问题是什么?

  • 无意义词语太多
  • 词语横七竖八的,太密密麻麻了
  • ……

一个一个来。首先无意义词语像大家耳熟能详的Harry啥的当然不用再出现啦,我们可以屏蔽掉吗?

显然是可以的,wordcloud提供了stopwords参数在WordCloud函数里,可以把你想要屏蔽的传入,就ok了

开始实战:

image.png

咱们在之前编辑的函数里面加上这个参数,用列表的方式把屏蔽词传入。再把这个cell和后面的一通运行。没报错。

哈利波特词云.png

回到桌面一看,我大为震惊。

啥情况?咋屏蔽了几个人名,出来这么多无意义的词呀,and of the都来了

难道我要自己一个个输入这些词把他们屏蔽?那为啥之前没设置stopwords的时候反而没有呢?

一通搜索,发现原来这是wordcloud自带的stopwords在默默奉献。

image.png

如图,这么一长串已经给你准备好了。事实上我们只需要再往里添加我们需要的屏蔽词就行了。

image.png

看,jupyter支持你在下面写你新增的代码,然后返回去运行上面的代码,他的运行顺序不再是从上到下而是你自己定的(虽然一般不建议大家乱摆cell,但这里cell少,无关紧要)

image.png

重新运行,没有报错。到桌面查看新的词云图

哈利波特词云.png

GOOD!达到了我们一开始的目的。接下来我随手再添一些屏蔽词。再用max_words参数限制一下词数,避免太密密麻麻(用法和stopwords一样,如图)

image.png

哈利波特词云.png

差不多,这张图我们可以看出,邓布利多是除了主角三人团出场率最高的,Know经常用,数字中最常出现的是one(可能跟英语一些用法有关,比如one day ,I'm the one who...)……尽情解读吧。

三、如果词云有形状的话……

没错,劲爆内容来啦。wordcloud允许自定义形状,你需要一张只表示形状的纯色图(直接搜就能搜到),比如这个

OIP-C.jpg

剪影图自然是最好的。

不过要读图,我们需要安装一个别的依赖。名叫imageio安装方法一样,直接pip install imageio就行

image.png

这里我已经装好了。直接import imageio

image.png

接下来用imageio.imread把图片传给mask变量,之后是用WordCloud的mask参数设置图片形状的:

image.png 还记得怎么设置文件路径吗?别忘了前面加r取消转义符哦

image.png

把mask参数传入。mask=mask。输出!

哈利波特词云.png

怎么回事……为啥是这样?他把外壳用词语套起来了……

猜测jpg文件无法让imageio发现图片实体,我们需要一个背景透明的png图片,除了主体都是透明的

还能怎么办?打开PS啊

这里稍微跳几步,由于篇幅我们就不带大家装ps了……

image.png

点击“选择”里的“色彩范围”,选中中间黑色部分,复制到新图层后删除背景(因为背景不透明),选择反选,然后delete删掉就行【速通PS】

image.png

完成,导出就行。记得导出png格式的。

修改代码中的相关量后润一下代码

哈利波特词云.png

看来我们的猜想是对的……

只是……

大家下次自己做,还是找一张清晰度高且简单的图片吧……555😭😭😭

结束

那么我们的词云实战英文版就到这里完结了,要不是官方只允许分上中下三篇我能写出一部韩剧(不是)。

正经地说,因为实际上做起来,一件简单的事真地也会有许多需要注意的点,零零散散写进文章,就是千字文了

希望大家之后都能写出细节上完美的代码~加油!

新人上路,欢迎互相帮扶~Mr_darcy8的掘金主页

可以的话给咱点个赞呗💖