5月3日学习笔记
昨天原本在研究简单爬虫的范例,结果遇到困难了,其中有一个关于json的内容我想去详细学习一下,看了几个资料都不满意,便去中国大学MOOC上看嵩天老师的课。结果没找到相应内容,却发现了词云这个东西,一下吸引了我,便转移了方向,连带文件操作也一起回顾了一下。很多知识不总用就忘记了,记下学习笔记留着温故知新。
最初看到过词云效果的图片,当时并没在意,还以为是一种特殊的文字处理效果呢,根本没想到是根据数据统计自动生成的图形。(千万别笑话我 )后来大致知道了原理,也感觉这个东西一定很难实现,我的水平应该还不行,便没有去细究。当然,也是因为需求不明显,没有主动学习的动力。(畏难是我的本性 ,真实需求是我的动力 )最近这段时间的学习状态和教学需求使我关注一切可能吸引学生的内容,而词云应该是其中之一。学完之后才发现,原来so so so easy!来看代码import wordcloud
import jieba
from imageio import imread
mk=imread('2.jpg')
w=wordcloud.WordCloud(mask=mk,background_color='orangered',font_path="msyh.ttc")
f=open('test.txt','r',encoding='utf-8')
t=f.read()
w.generate(' '.join(jieba.lcut(t)))
w.to_file('wordcloud.png')
9行代码就实现了这个功能,篇首的词云图片就是用它做出来的,此处是不是应该有掌声?!
当然掌声是送给嵩天老师的,我是从他那里学习的,
只不过综合了一下,把与他课程中有冲突的地方解决了一下。言归正传,解释一下代码,然后
强调一下和课程中有冲突的地方。
import wordcloud #生成词云的库
import jieba #处理中文词语的库
from imageio import imread #设置词云形状必备库
这3行是必须使用的第三方库,
imageio这个库和嵩天老师讲的不一样,他课程中用的是scipy.misc。我在测试时发现不能导入,百度之后发现imread已经被scipy抛弃了,可以使用imageio替代。
mk=imread('2.jpg')
w=wordcloud.WordCloud(mask=mk,background_color='orangered',
font_path="msyh.ttc", width=1366,height=768)
这2行代码就是设置生成的词云效果了。第1行是指定一个词云形状图片,文件名和格式自己写就好,我试了jpg和png两个格式的图片。
测试图片1
测试图片2
第2行为设置词云遮罩图片(mask让我想起了flash遮罩)、背景色、中文字体、图片大小,还可以设置最大词数、去除的词等等。 其中特别注意font_path,没有它就不能正确显示中文了。还要注意wordcloud. W ord C loud中的大写字母,Python是区分大小写的。此外,我尝试 使用十六进制颜色代码设置,但发现没生效,便在网上找了一个颜色对照表,用英文表示了。主要参数设置|wordcloud
常用颜色国际代码速查表f=open('test.txt','r',encoding='utf-8')
t=f.read()
w.generate(' '.join(jieba.lcut(t)))
w.to_file('wordcloud.png')
这4行就是读取要生成词云的文件,并按预定格式生成词云图片的代码。第1行是以只读方式读取文本文件,test.txt要和代码文件放在一个目录,这里我使用的是课题:如何做好算法与程序实现教学的知识储备一文的内容,并增加了若干个“五一快乐”。此处
和嵩天老师讲的不一样,加入了encoding='utf-8',否则就不能正常显示中文,嵩天老师的代码没加就可以,具体原因未知。
第2行是将文件一次性读入,
如果文件超级大的话(比如GB级的)会爆内存的,但一般我们的文本不会达到那个程度(考考你1GB的内存理论上能存放多少个汉字?)。
第3行是使用jieba库将汉字以词为单位用空格分隔,因为wordcloud是用空格分词统计的。
第4行就是生成词云图片文件了,文件名自己起就好,格式可以是常用图片格式。生成的图片和代码在同一目录。
原图
词云图
是不是真的so so so easy?多么好的一个教学范例啊,我准备把它增加到《Python应用实例赏析》选修课第3课绘制“炫酷”图形一节。感悟
学习Python的时候由于安装环境和时效问题,可能会遇到与书籍、课程不一致的地方,这个时候我要充分利用网络解决问题,也不用深究为什么,解决问题就好。
行走路上
信息技术教学的路很长, 行走路上与您一路同行! ● 感谢访问,欢迎交流 |