Advertisement

Python数据可视化——词云图

阅读量:

一、配置环境

要生成词云图,必备的插件是wordcloud。课堂上给出了两种安装插件的方法。一是通过调用命令行,输入pip3 install wordcloud进行安装。二是下载whl文件,通过pip3 install xxx.whl安装。可是这两种方法都无法成功安装。这一步耗费了非常多的时间,最终在同学的提示下,我在jupyter中直接输入了安装命令。

安装成功。

此外,还需要安装jieba分词库,对文本进行分词,才能生成词云。

二、数据准备

找到一篇报告,将其全文文本复制,另存在本地为.txt文件。需要跟python文件存在同一目录下。

三、编程部分

1.打开文件

首先import os模块、wordcloud库和matplotlib库。os模块的功能是处理文件,需要用它来打开我们刚才保存的.txt文件,这里一定要输入[encoding='utf-8']处理中文字符,否则会报错。matplotlib库用于制图。

将文件赋值为text,可以先print出来,确认文本是否有问题。

复制代码
 import os

    
 from wordcloud import WordCloud
    
 import matplotlib.pyplot as plt
    
  
    
 text=open("China145.txt","r",encoding="utf-8").read()
    
 #print(text)

2.jieba分词

加载文本文件,分词为模式为精确模式(cut_all=False)。精确模式是指将句子最精确地切开,适合文本分析。如:今天天气,真,好

新建一个字典,赋值为tf。遍历jieba分词结果中的所有词,通过循环语句计数。将字典的值,也就是词本身放到列表中,这一步是为剔除无用数据做准备。

复制代码
 import jieba

    
 jieba.load_userdict("China145.txt")
    
 seg_list=jieba.cut(text,cut_all=False)
    
  
    
 tf={}
    
 for seg in seg_list:
    
     if seg in tf:
    
     tf[seg]+=1
    
     else:
    
     tf[seg]=1
    
 ci=list(tf.keys())

3.剔除无用数据

遍历分词结果列表中所有的词,满足出现次数足够多并且长度>2,且不在停词文档中的词才能够用来绘制词云图。(这里的出现次数可以视情况而定,一般使词云图中的词在50~300左右为宜)将不满足条件的词剔除。

复制代码
 with open("stopword.txt","r",encoding="UTF-8") as ft:

    
     stopword=ft.read()
    
     
    
 for seg in ci:
    
     if tf[seg]<20 or len(seg)<2 or seg in stopword or "-" in seg:
    
     tf.pop(seg)

4.遍历字典,将值放在前面,键放在后面,放入data列表中。用list的sort方法将词按出现次数由小到大排序,再用reverse方法倒叙,得到出现次数由大到小排序的列表。再将数字和词位置互换,存入字典中。

复制代码
 ci,num,data=list(tf.keys()),list(tf.values()),[]

    
 for i in range(len(tf)):
    
     data.append((num[i],ci[i]))
    
 data.sort()
    
 data.reverse()
    
 #print(data)
    
  
    
 tf_sorted={}
    
 print(len(data),data[0],data[0][0],data[0][1])
    
  
    
 for i in range(len(data)):
    
     tf_sorted[data[i][1]]=data[i][0]
    
     
    
 print(tf_sorted)

5.生成词云

可以将词语字体、颜色、情况按喜好进行设置。然后关掉词云的坐标轴,输出并保存到本地即可。

复制代码
 import os

    
 from wordcloud import WordCloud
    
 import matplotlib.pyplot as plt
    
 wc=WordCloud(font_path=font,width=800,height=600).generate_from_frequencies(tf)
    
  
    
 plt.imshow(wc)
    
 plt.axis('off')
    
 plt.show()
    
 wc.to_file('AI2.jpg')

输出结果

全部评论 (0)

还没有任何评论哟~