Stata16调用python——绘制词云图
本文作者:张 宇
文字编辑:李钊颖
技术总编:张学人
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
在爬虫俱乐部的往期推文《Python之wordcloud库》和《绘制<倚天屠龙记>地名词云图》中,分别介绍了使用Python、Stata绘制词云图的方法。
使用Python和Stata绘制词云图各有优缺点。比如,《绘制<倚天屠龙记>地名词云图》中介绍的wordcloud命令,既简单明了,又可以绘制出非常漂亮的词云图,但Stata15在调用Python的Jieba分词接口时略显复杂;而Python的wordcloud库由于方法较多,因此使用起来较繁琐,绘制出来的词云图“颜值”也较低。
如今,Stata16横空出世,它通过一个“python”命令让Stata16能够轻松调用Python接口(详见推文《Stata16调用Python测试(一)》),让我们能够更加方便地使用Stata16进行文本分析。下面,一同见证过程!
一、wordcloud介绍及思路梳理
wordcloud keyword freq using 词云.html , replace size(30 200) range(3840 2160)
wordcloud后紧跟两个变量名,keyword变量指的是关键词,而freq变量则是关键词对应的频数。using后为绘制出的词云图文件名。size选项设置词云图中字的大小范围,第一个参数为最小值,第二个参数为最大值。range选项设置词云图的大小。
因此,我们需要将分词文本传入Python,利用jieba分词并进行词频统计,再把关键词和其对应的词频传入Stata数据集,生成keyword、freq两个变量,再根据这两个变量绘制词云图即可。
二、进入python环境
(1)使用clear清空Stata数据集,使用python clear清空Stata内存中的python对象
clear
cd D:/
python clear
(2)进入python环境
python:
#此处编辑python代码
end
在《Stata16调用Python测试(一)》中已详细介绍进入python环境的方法,需要注意在do-file中“python:——end”需要一起运行,否则会报错,如下图:
三、在“python:——end”中填充python语言,定义python分词函数
(1)导入python标准库
python:
from sfi import Data #用于对接stata数据集和python变量
from collections import Counter #用于词频统计
import jieba #用于分词
end
(2)定义python分词函数
下面程序使用了sfi库的一些方法,其在《Stata16调用Python测试(一)》中已有所提及,sfi模块作为Stata数据集和Python数据之间的桥梁,让Stata调用Python更加得心应手。
python:
from sfi import Data #用于对接stata数据集和python变量
from collections import Counter #用于词频统计
import jieba #用于分词
def keyword(str): #定义keyword分词函数,需要传入str参数
seg_list = list(jieba.cut(str,cut_all = False)) #jieba分词
kw = Counter(seg_list) #词频统计,生成字典的子类(可以认为生成了字典)
print(type(kw.keys()))
keyword = kw.keys() #提取kw中所有关键词
num = kw.values() #提取关键词对应的词频
obs = len(keyword) #统计非重复关键词的个数
print(obs)
#在python中调用sfi库操作stata数据集。
Data.addVarStrL("keyword") #在stata数据集中添加keyword变量,变量类型为StrL
Data.addVarInt("freq") #在stata数据集中添加freq变量,变量类型为Int
Data.addObs(obs) #利用python中的obs变量设置stata数据集中观测值的个数
Data.store("keyword",None,keyword,selectvar=None) #将python中的keyword变量和num变量嵌入stata数据集。
Data.store("freq",None,num,selectvar=None)
end
四、在Stata中调用上述定义的python函数
使用“python:”调用函数,并传入参数。程序如下:
local a = "土地是以它的肥沃和收获而被估价的;才能也是土地,不过它生产的不是粮食,而是真理。如果只能滋生瞑想和幻想的话,即使再大的才能也只是砂地或盐池,那上面连小草也长不出来的。"
python: keyword("`a'")
结果如下:
五、绘制词云图
wordcloud keyword freq using 词云.html , replace size(30 200) range(3840 2160)
shellout 词云.html
结果如下:
相信大家已经领略到了Stata调用python的强大之处,在接下来的推文中,我们将继续推出sfi库的详细用法以及利用Stata进行文本分析的规范动作。
最后附上本文完整程序:
clear
cd D:/
python clear
python:
from sfi import Data #用于对接stata数据集和python变量
from collections import Counter #用于词频统计
import jieba #用于分词
def keyword(str):
seg_list = list(jieba.cut(str,cut_all = False))
kw = Counter(seg_list)
print(type(kw.keys()))
keyword = kw.keys()
num = kw.values()
obs = len(keyword)
print(obs)
Data.addVarStrL("keyword")
Data.addVarInt("freq")
Data.addObs(obs)
Data.store("keyword",None,keyword,selectvar=None)
Data.store("freq",None,num,selectvar=None)
end
local a = "土地是以它的肥沃和收获而被估价的;才能也是土地,不过它生产的不是粮食,而是真理。如果只能滋生瞑想和幻想的话,即使再大的才能也只是砂地或盐池,那上面连小草也长不出来的。"
python: keyword("`a'")
wordcloud keyword freq using 词云.html , replace size(30 200) range(3840 2160)
shellout 词云.html
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。