查看原文
其他

用词云图看2020社科基金课题~

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:方  言,中南财经政法大学金融学院

文字编辑:王玉婷 

技术总编:张馨月

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营在不久前已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!     

导读

9月9日,全国哲学社会科学工作办公室公布2020年国家社科基金年度项目、青年项目名单,涵盖2020年国家社会科学基金年度项目立项名单有3549个,2020年国家社会科学基金青年项目立项名单有1080个。那么在这些项目课题中哪些关键词出现的频率比较高呢?我们接下来就通过词云图来进行直观地了解。词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。接下来我们就进入实战操作来感受如何用简单的代码画出一幅高大上的词云图~

1、下载第三方库

要想获取词云图,必须要安装相关的第三方库,其中wordcloud和jieba是必需的。wordcloud可以把带权重的关键词渲染成词云,jieba在中文分词中具有非常广泛的应用。pip install wordcloud
pip install jieba

2、WordCloud构造方法的常用参数说明

1.font_path 字体路径,如:font_path = ‘黑体.ttf’2.width 输出的画布宽度,默认为400像素。3.height 输出的画布高度,默认为200像素。4.prefer_horizontal 词语水平方向排版出现的频率,默认0.9(词语垂直方向排版出现频率为0.1)。5.mask 如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread(‘图片名称.png’)6.scale 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。7.min_font_size 显示的最小的字体大小。8.font_step 字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。9.max_words 显示的词的最大个数。10.stopwords 设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS。11.background_color 背景颜色,如background_color=‘white’,背景颜色为白色。12.max_font_size 显示的最大的字体大小。

3、实例演示

词云图的项目结构如下:from wordcloud import WordCloud
with open("test.txt" ,encoding="utf-8")as file:
text=file.read() #读取文本内容
wordcloud=WordCloud(font_path="C:/Windows/Fonts/simfang.ttf",
background_color="black",width=600,
height=300,max_words=50).generate(text) #设置词云的背景颜色、宽高、字数
image=wordcloud.to_image() #生成图片
image.show() #显示图片
下面我们进入具体的实战操作~这里以2020年国家社会科学基金青年项目为例。首先,导入我们需要使用的库:import jieba
import re
from collections import Counter
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
接下来,进行分词和词频统计。由于jieba的分词系统无法识别一些诸如“一带一路”、“人工智能”之类的专有名词,我们可以自定义一个txt文档作为词典,以避免这些专有名词被拆开:result=[]
text=open(r'C:\Users\PC\Desktop\青年.txt',"r",encoding="utf-8").read()
jieba.load_userdict(r"C:\Users\PC\Desktop\词典.txt") #添加自定义词典
seg_list = jieba.lcut(text)
seg_list=filter(lambda word:len(word)>2,seg_list)#进行过滤,保留长度大于2的词
result.extend(seg_list) #将分词结果加入到列表result中
word_counts = Counter(result) # 对分词做词频统计
此外,我们还可自定义一个停用词典,用于去除不必要的分词:stopwords=set(STOPWORDS) #设置停用词
with open(r'C:\Users\PC\Desktop\停用词表.txt',encoding='UTF-8') as f:
stop_words=[i.strip() for i in f.readlines()]
for word in stop_words:
stopwords.add(word)
在上述操作之后,导入背景图,便可使用WordCloud来制作词云图:images = Image.open("中国.png")
maskImages = np.array(images)
w=WordCloud(
background_color='white', # 设置背景颜色为白色
font_path="msyh.ttc", #设置输出词云的字体为微软雅黑
width=800, height=400, #设置词云图的宽度,高度
max_words=500,
min_font_size=3,
stopwords=stopwords,
mask=maskImages #设置词云形状
)
wordcloud=w.generate_from_frequencies(word_counts) #加载词云文本
接下来,即可展示图片:plt.figure(figsize = (40,20))
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off") #设置显示的词云图中无坐标轴
plt.show() #词云图结果展示
w.to_file('青年.png') #输出名为青年的新图片
运行结果如图所示:

从图中可以看出,“高质量”这一关键词占据较高的比重,“一带一路”、“大数据”、“公共卫生”、“共同体”、“人工智能”等也都是社科基金项目的热门话题,这也体现了当下的热点~如果想获取2020年国家社会科学基金年度项目立项名单,只需将青年项目txt文档换成社科项目txt文档,输出名为社科的新图片即可,大家可以自己设置词典和停用词表来尝试着做出一个有关社科基金项目的词云图,这里展示一下小编的绘制结果:

大家快来自己动手试试吧~完整的“2020国家社科基金年度项目、青年项目拟立项名单”以及分词的程序和结果,可以关注我们的公众号,在后台回复“2020社科”来获取~






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!往期推文推荐

      建议收藏!Python精选推文干货合集

      xpose和sxpose,谁是卧底?

      让你的数据一目了然--label命令介绍Python推文合集基础篇(下)|算法简介
【小白指南】Python中有哪些数据类型?(附推文合集)

轻松获取通行数据——cntraveltime命令介绍

让Stata完美牵手中国地图之cnmapsearch

自然语言分析——利用NLTK进行文本预处理

寻找B站的最爱--8月B站全站榜爬虫

cnaddress命令——实现经纬度转换为中文地址

定位神器——cngcode

Python入门—Spyder的简单使用

Jupyter Notebook 的这些tips你了解吗?给变量名换马甲之rename命令

追踪命令set trace on——解你燃眉之急

爬虫大杀器 | “手把手”教你配置Selenium

小白必看!Anaconda安装全攻略

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存