如何用Python绘制词云?

倪平宇 发表于 2019/12/28 10:35:09 2019/12/28
【摘要】 如果希望能够看懂代码,那么需要具备:1. 了解Python语言的语法结构2. 了解Python语言的标准包、第三方包的区别3. Python代码基本是英文,意思一定程度上代表了它要做的事,懂英文,有代码感觉如果希望能够拿来做练习,那么需要具备:1. 你的电脑已经安装了Python2. 你对于Python已经入门,需要拿例子做练习3. 你能够熟练使用Python带的pip安装各种第三方包4. ...

如果希望能够看懂代码,那么需要具备:

1. 了解Python语言的语法结构

2. 了解Python语言的标准包、第三方包的区别

3. Python代码基本是英文,意思一定程度上代表了它要做的事,懂英文,有代码感觉

如果希望能够拿来做练习,那么需要具备:

1. 你的电脑已经安装了Python

2. 你对于Python已经入门,需要拿例子做练习

3. 你能够熟练使用Python带的pip安装各种第三方包

4. 安装了顺手的代码编辑器,能够方便码代码

5. 下载扶摇小说txt文件

示例环境

电脑系统:Window10

Python版本:Python3.7(Python2和Python3差别会比较大,很多语句经过淘汰变更,所以尽量使用新版本)

代码编辑器:Sublime Text3

实例正文

以下为代码实例(代码最好是手动敲,既能熟练代码,又能培养感情):

#作用:读取文本数据import codece#中文分词import jieba#科学计算import numpy as np#数据分析包import numpy as pd#数据可视化包import matlotlib.pyplot as pit#词云包,绘制词云from wordcloud import WordCloud#imread用来读取图片数据from imageio import imread#系统包,用来输出代码格式,与绘制词云无关,可忽略import sys
#读取文本数据,放在content中file=codes.open("D:\\扶摇.txt",'r','utf-8')content=file.readfile.close
#对读取的文本数据进行中文分词,如果有分词词库,可以载入到jieba中,提高分词的准确度#jieba.load_userdict('D:/扶摇词库.txt');segments=segs=jieba.cut(content)#去除一个字的词for seg in segs:if len(seg)>1:segments.append(seg);#将分词结果保存在pandas的DataFrame中segments_df=pd.DataFrame({'segment':segments})
#移除停用词,停用词是指在信息检索中,为节省存储空间和提高搜索效率;在处理自然语言数据(或文本)之前或之后会自动过滤掉的某些字或词#移除日常停用词,停用词可以从网上搜索下载,也可以自己花时间和精力制作#参数说明:#index_col=False:用作行索引的列编号或者列名,如果文件不规则,行尾有分隔符,则可以设定index_co1=False#quoting=3:控制csv中的引号常量#sep="\t" :指定分隔符。如果不指定参数,则会尝试使用逗号分隔#停用问读取为一个DataFrame数据,给数据指定一个名称'stopword'stopwords_rc=pd.read_csv( "D: /python_work/wordcloud/ chineseStoplords.txt",encoding='utf-8',names= [' stopword'], index col=False, quoting=3, sep="\t")segments_df=segments_df[~segments_df.segment.isin(stopwords_rc.stopword)]
#使用pandas对词频进行统计#使用groupby函数(行操作)进行分组,使用agg函数(列操作)计算每组数量,得到一个Series数据segments_stat=segments._df.groupby(by=['segment'])['segment'].agg({"计数":np.size})#根据计数列降序排序,如果segments stat是DataFrame数据,使用sort函数segments_stat=segments_stat.reset_index.sort values("计数",ascending=False)
#以下是打印系统编玛,与绘制词云无关#sys_type=sys.getfilesystemencoding#print(sys.stdout.encoding)#print(sys_type)
#读取图片,绘画词云:设置背景颜色、字体路径、图片,必须设置字体,否则图片上显示的全是矩形fy_img=imread("D:/python_work/ wordcloud/fuyao.jpg")fuyao_wordcloud=WordCloud(background_coLor="white",font_path='D:/python_work/wordcloud/PingFang Regular.ttf',mosk=fy_img)#facecolor设置坐标系的背景色,w是白色;edgecolor设置坐标轴边的颜色plt.figure(num=None,facecolor='w',edgecolor='blue')#取前1000个词,遍历取出数据,不算索引segments_stat=segments_stat.head(1000).itertuples(index=False)#将map数据显性转化为字典,根据词频绘制词云,fit_words参数为字典word_frequence={x[0]:x[1] for x in segments_stat}fuyao_wordcloud=fuyao_wordcloud.fit_words(word_frequence)#不显示坐标轴plt.axis('off')plt.imshow(fuyao_wordcloud)plt.show


这里需要注意的是,图片需要是白色背景,方便代码识别。这个图片是用PS去掉背景的,看着稍微糙一些。

例子中使用WordCloud的fitwords函数,根据词频绘制图片,取排名前1000个词,效果图如下:

image.png

从词云图中也可以看出了,主角是扶摇无疑,接下来是两个大大的“长孙”和“无极”,一个小的“元昭诩”,男主子位置稳固。“北野”、“宗越”、“云痕”等人物的名字大小都代表了在小说中出现的次数与分量,其中男主子宠物“元宝”丝毫不落下风,俨然仗着自己男一号萌宠的身份和可耐的形象力压群雄。

其他的词,大家也可以分析一番,像“眼神”、“目光”、“微笑”、“轻轻”等词很容易让人再次联想到剧中的浪漫情节,bulabula…

我的感触

在做这个实例的时候,是找的网络上的示例看着做的,但是代码并非直接拿过来就可以使用,在本地会出现不同的错误,网络上的示例代码本身也有小部分缺失,这时候需要根据bug的提示错误一边某度一边根据代码感觉进行更改试验调试,最终出来结果。

代码的神奇之处还在于:同样的代码换了个环境可能就出现不知名问题,所以要有耐心、怀着期待完成你自己的作品。

好了,实例到这里,那么此时本人对于Python的认识是怎么样的呢?真的是一部分人所说的“数据分析从入门到放弃”吗?

其实这是因人而异的,看你的目标和方法、希望掌握的程度了:

1. Python入门还算比较容易,入门之后的深钻就需要下大功夫了。

2. Pyhton很受欢迎,除了自带的标准库之外,还有众多第三方包,适用于不同场景,如果只是做数据分析的话,抓住其中的重点来看:numpy、pandas、matplotlib,其他的包用到的时候某度就好了。

3. 语言功能很强大,本次实例中除去注释之后,真正用的语句并不多,一个包提供的函数就能够实现酷炫能力。

4. Python学习的重难点是:第三方包众多、函数众多、不同函数参数不同,各个函数的作用与用法都需要琢磨理解,根据自己的需求找到使用的函数。

5. 学习Pyhton要有好的心态,有目标地学,入门、掌握学习方法、根据实际场景运用。

对于数据分析,Python只是一个很重要的工具,有些情况下需要掌握,但数据分析最重要的还是思路和业务使用,根据用途使用工具,不能剑走偏锋,只是掌握了工具而没有思路理论支持的话,很容易就从产品经理学成数据分析师了。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。