数据呈现丨手把手教你如何利用Python绘制词云(内含代码)
The following article is from 专利分析可视化 Author Emma序
“词云”是对文本中出现频率较高的“关键词”予以视觉上的突出的一种可视化手段,形成“关键词云层”或“关键词渲染”,使浏览者只要一眼扫过词云图片就可以了解文本中被重复频率最高的词汇,从而得知庞大的文本背后的核心内容。今天,小编尝试使用python对某一领域专利中的英文摘要进行分析,找出其中出现频率较高的词汇绘制成词云,以展示该领域的核心技术。
1.扩展包的安装
我们使用python的wordcloud库和pyecharts库来以两种方式实现词云。从文本中的句子里分割出词汇的工作使用python的分词库jieba(结巴分词)来实现。我们认为文本中的名词词汇较为重要,其他词性的词汇暂时需要过滤,因此我们需要对单词的词性进行分析。分析单词词性需要使用python的自然语言处理库nltk。Anaconda内置了nltk扩展包,需要小伙伴们打开anaconda的promt,输入以下命令安装wordcloud和结巴分词扩展库。
pip install wordcloud
pip install jieba
2.文件的读取
使用的数据来源为导出的excel文件,文件中包含“摘要”一列,例如下图:
首先使用pandas扩展包对该文件的摘要一列进行读取,采用结巴分词对读取后的文本进行分割,将句子转化为词汇,通过nltk扩展包对词汇的词性进行分析,并标记每个词的词性。
3.数据统计与滤除
接下来,对每个词汇的出现次数进行计算,将结果存放在字典中并对字典进行排序。
尽管nltk帮助我们剔除了一些不关心的词,依然还存在一些干扰词汇且在专利申请中大量出现的,例如method,device等等,所以增加一个用户手动滤除环节。
自定义指定的滤除词汇在stopwords.txt中输入,用英文输入模式下的逗号隔开即可,例如下图:
滤除我们不关心的词汇后,取前1000个名词进行展示。上述过程中的分词和统计出现次数是为了得到pyecharts需要的数据格式。对于wordcloud而言,直接传递给他文本即可。wordcloud自己会分词和统计词频。
整体程序详解
导入需要的扩展包
import pandas as pd #导入pandas,用于操作excel文件
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from wordcloud import WordCloud as WordCloud_Python
from wordcloud import STOPWORDS
import jieba
from pyecharts import WordCloud
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
滑动查看更多
读取摘要
由于绘制的为英文关键词词云,需剔除中文摘要
df=pd.read_excel('2018-04-26.xls',sheet_name='sheet1')#打开excel文件
cn_text=[]
for i,j in enumerate(df['公开(公告)号']):
if'CN'in j or'TW'in j:
continue
else:
cn_text.append(df['摘要'][i])
cn_str=''
for i in cn_text:
cn_str+=i
滑动查看更多
分词
使用nltk分析单词词性,统计词汇出现次数,并降序排列
seg_list = jieba.cut(cn_str,cut_all=False)
seg_str = ' '.join(jieba.cut(cn_str,cut_all = False))
text = nltk.word_tokenize(seg_str)
n_list=nltk.pos_tag(text)
add_list=[]
for text,name in n_list:
if name == 'N'or name=='NN'or name=='NNP'or name=='NNS'or name=='NNPS':
add_list.append(text)
cn_dic={}
for i in seg_list:
if i notin cn_dic:
cn_dic[i]=0
cn_dic[i]+=1
else:
cn_dic[i]+=1
word_list=sorted(cn_dic.items(),key=lambda d: d[1],reverse=True)
滑动查看更多
从文本中读入用户指定的滤除词汇,存入列表中备用
with open('stopword.txt','r',encoding='utf8') as f:
txt=f.read()
stopword_list=txt.split(',')
滑动查看更多
a.若采用pyecharts绘制
滤掉不关心的词汇,生成pyecharts需要的格式:
name=[]
value=[]
for i in word_list:
if i[0] in stopword_list:
continue
else:
if i[0] in add_list and len(i[0])>1:
name.append(i[0])
value.append(i[1])
滑动查看更多
调用pyecharts生成网页展示词云
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name[:1000], value[:1000], word_size_range=[10, 200])
wordcloud.render('wordcloud.html')
滑动查看更多
b.若采用wordcloud库绘制
滤除不关心的词汇,传递分词后的字符串获得词云
stopwords = set(STOPWORDS)
for i in stopword_list:
stopwords.add(i)
wc = WordCloud_Python(width=800,height=600 ,max_words=1000,stopwords=stopwords, margin=10,colormap='Accent',
random_state=1).generate(seg_str)
# store default colored image
default_colors = wc.to_array()
plt.figure()
plt.title("XXX领域核心技术词云")
plt.imshow(default_colors)
plt.axis("off")
plt.savefig('cloud.png')
plt.show()
滑动查看更多
你要的工具&方法我都给你整理好了!
工具&方法 | 6张图,3分钟阅读即可掌握stata全部命令
工具&方法 | 10个Python Pandas小技巧让你的工作更高效(附代码实例)
工具&方法 | 6行代码教你用python做OLS回归(内附CFPS实例)
工具&方法 | 小刘老师“再”出新招:JSON数据转为面板数据
听说你还在为数据呈现烦恼?看这里!
数据呈现丨好用易懂的matplotlib可视化,快来了解一下!
数据呈现 | Stata+R+Python:拨开数据迷雾,窥探可视化之“美”(工具书推荐,附PDF资源链接)
数据呈现 |Stata+R+Python:一文帮你解决Paper、PPT中的数据可视化问题
让我猜猜,或许你需要的还有这些!
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
作者:Emma序出处:专利分析可视化
推荐:威武哥编辑:青酱
欢迎扫描👇二维码添加关注