接上期,我们算是可以自己完成一张看起来还不错的词云图了。
没错,仅仅只是看上去不错
细看你会发现,Harry、Ron、Hermione等人名占用了非常大的画幅。词也是排列得很杂。要有实际意义得话,恐怕这样一副词云图还不能让人满意。
况且我们是自己做的词云图,如果不能随心所欲自己设置一些参数,自己调整出想要得效果,那实在没必要花这么大功夫
今天我们就来一期进阶实战,和大家一起康康我们还能怎么调整词云图。
实战开始
一、回到开发页面
相信有部分小伙伴已经在做完第一幅图之后把jupyter关掉了吧?我们开始下一次实战的第一步当然是回到之前的页面,进入上次打代码的状态啦~
有人说,这么小儿科的东西也算第一步? 你是不是在水字数?
显然不是,这一步对第一次尝试jupyter的朋友来说至关重要。
别忘了这里是小白的实战,事无巨细是我们的原则。没基础的人的确会在这一步卡住,而网上没有相关资料可以带ta过关。不信你接着看:
首先,jupyetr编辑产生的ipynb文件是没法直接点开进入的
看,直接点会默认打开一个你的集成式开发环境,比如我的是Vscode,你要下一些依赖和编译器啥的才可以运行,这点我暂时也不懂
我们需要像一开始打开jupyter那样从任务栏或者快捷方式打开。
然后找到我们之前编辑的ipynb文件,点击打开。
打开就可以直接接着下去写代码了吗?当然不是。 你关闭jupyter内核之后变量的值都会丢失。你现在的f,w这些变量都不是之前值了,物是人非事事休啊。
如果你直接运行最后一串代码想要输出些什么,就会出现报错
同理,你如果打好了新的代码也一样运行不了。咱们要针对选定的代码cell再运行一次,来获取变量。在这里我们可以发现每一步几乎都是必要的,一环扣一环,所有我们直接全部运行一遍。
接下来,才是今天的开始
二、StopWords筛选词语
我们之前的问题是什么?
无意义词语太多
词语横七竖八的,太密密麻麻了
……
一个一个来。首先无意义词语像大家耳熟能详的Harry啥的当然不用再出现啦,我们可以屏蔽掉吗?
显然是可以的,wordcloud提供了stopwords参数在WordCloud函数里,可以把你想要屏蔽的传入,就ok了
开始实战:
咱们在之前编辑的函数里面加上这个参数,用列表的方式把屏蔽词传入。再把这个cell和后面的一通运行。没报错。
回到桌面一看,我大为震惊。
啥情况?咋屏蔽了几个人名,出来这么多无意义的词呀,and of the都来了
难道我要自己一个个输入这些词把他们屏蔽?那为啥之前没设置stopwords的时候反而没有呢?
一通搜索,发现原来这是wordcloud自带的stopwords在默默奉献。
如图,这么一长串已经给你准备好了。事实上我们只需要再往里添加我们需要的屏蔽词就行了。
重新运行,没有报错。到桌面查看新的词云图
GOOD!达到了我们一开始的目的。接下来我随手再添一些屏蔽词。再用max_words参数限制一下词数,避免太密密麻麻(用法和stopwords一样,如图)
差不多,这张图我们可以看出,邓布利多是除了主角三人团出场率最高的,Know经常用,数字中最常出现的是one(可能跟英语一些用法有关,比如one day ,I'm the one who...)……尽情解读吧。
三、如果词云有形状的话……
没错,劲爆内容来啦。wordcloud允许自定义形状,你需要一张只表示形状的纯色图(直接搜就能搜到),比如这个
剪影图自然是最好的。
不过要读图,我们需要安装一个别的依赖。名叫imageio安装方法一样,直接pip install imageio
就行
这里我已经装好了。直接import imageio
接下来用imageio.imread
把图片传给mask变量,之后是用WordCloud的mask参数设置图片形状的:
还记得怎么设置文件路径吗?别忘了前面加r取消转义符哦
把mask参数传入。mask=mask
。输出!
怎么回事……为啥是这样?他把外壳用词语套起来了……
猜测jpg文件无法让imageio发现图片实体,我们需要一个背景透明的png图片,除了主体都是透明的
还能怎么办?打开PS啊
这里稍微跳几步,由于篇幅我们就不带大家装ps了……
点击“选择”里的“色彩范围”,选中中间黑色部分,复制到新图层后删除背景(因为背景不透明),选择反选,然后delete删掉就行【速通PS】
完成,导出就行。记得导出png格式的。
修改代码中的相关量后润一下代码
看来我们的猜想是对的……
只是……
大家下次自己做,还是找一张清晰度高且简单的图片吧……555😭😭😭
结束
那么我们的词云实战英文版就到这里完结了,要不是官方只允许分上中下三篇我能写出一部韩剧(不是)。
正经地说,因为实际上做起来,一件简单的事真地也会有许多需要注意的点,零零散散写进文章,就是千字文了
希望大家之后都能写出细节上完美的代码~加油!