本文将介绍如何利用python中相应的模块画出词云图。首先给出效果图:
其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高。下面给出具体的步骤。
读取“垃圾短信”的csv数据
首先给出代码:
其中pandas是一个python常用的数据可视化模块。pd.read_csv函数是用来读取csv文件,data.columns是修改文件中的列的名称。
显示的结果为:
查看数据
我们对读取的80000条短信中,正常短信与垃圾短信进行统计,给出代码:
画出的效果图为:
可以看出数据库中有1/10的垃圾短信。代码中,plt.figure函数控制画图的大小,rcParams函数用来修改字体(要不然不支持中文,毕竟这不是国人开发的)。
数据清洗
首先我们选出1000条正常数据和垃圾数据(因为数据比较多,为了简化运行,我们选出2000条短信),代码为:
其中,sample函数是随机的挑选样本。运行结果:
然后我们对数据进行清洗,为什么要进行数据处理?因为我们后期用jieba库分词,而中文分词必须要求一个单词的两个汉字连在一起,不能有空格,不能有特殊符号。所以我们将数据的非汉字字符剔除掉,代码为:
其中引入两个新的库,一个是re正则表达式的库(本文不介绍正则表达式),还有一个是结巴分词库。apply函数就是对元素中每一个元素都进行后续处理,传入的是要处理的函数。
本文传入的是匿名函数。re.sub是正则表达式中的函数,用于替换语句中的词,其中参数pattern表示的是正则表达式,repl是替换成什么字符,string是输入的参数。
输出为:
画图云
最后一步就是画出图云。首先给出代码:
其中我们需要导入一个很重要的库,就是wordcloud,利用该模块,我们可以实现图云的绘画。
其中WordCloud是一个函数,用于生成词云,其中参数font_path是词云中字体的路径(在windows操作系统中字体路径一般为"C:\Windows\Fonts\***.ttf"),mask是传入绘画的图像,比如本文绘画的图像为:
background_color是设置背景颜色,fit_words函数用于传入词云的数据。绘画结果为:
疑点分析
plt.imshow(wc)使用plt模块画图,我们给出imshow函数的api文档:
传入的应该是array-like或者PIL image格式,但是我们传入的是wc(wordcloud类型的数据,而wordcloud类型是属于Wordcloud模块),为什么可以实现画图效果呢?
只有一种解释,Wordcloud模块中的wordcloud类型数据是属于PIL image类型的数据(笔者自己这么认为的,没有看底层,欢迎指出错误)
总结
本文利用python画出垃圾短信的词云图。希望对你的学习有所帮助。