查看原文
其他

朝花夕拾——如何输出内存中的矩阵与绘图

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

本文作者:余术玲

文字编辑:王碧琪

技术总编:闫续文

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》,了解培训详细信息,抓紧时间报名吧!另外,2019年8月22日至28日在湖北武汉举行的Stata编程技术培训,高级班招生已经结束,初级班仅剩几个名额感兴趣的同学可打开爬虫俱乐部往期推文——《爬虫俱乐部2019暑假stata编程训练营报名啦!报名,不要错过机会哦! 

作为一款专业的统计软件,Stata不仅仅是数据处理和实证分析的利器,还拥有十分强大的绘图功能。在推文《朝花夕拾——putdocx批量输出变量观测值》中,我们介绍了如何输出内存中变量的观测值,而在实证研究的过程中,除了经过一系列处理后规整的数据,内存中的某个矩阵以及使用Stata完成的绘图也经常需要导入docx文件中以方便后续论文的排版。那么今天,我们就继续请putdocx命令来帮忙,将内存中的矩阵以及绘图输出到docx文件中。


一.putdocx table中的matrix()函数

当我们使用Stata进行实证分析的时候,许多关于数据的信息往往会被存储在内存的某个矩阵中。比如,我们调用auto数据,进行一个OLS回归,程序如下:

clear allcap mkdir E:/putdocxcd E:/putdocxsysuse auto, clearreg turn weight price length foreign mpg headroom trunkreturn list


此时,我们发现,返回值中有一个名为“r(table)”的9×8的矩阵,我们可以通过mat list命令查看该矩阵的内容:
mat list r(table)


可以看到,“r(table)”矩阵中包含了许多有用的信息,如回归中各个变量的系数、标准误、t值、p值等信息。对于这样一个十分有价值的矩阵,我们要如何将其输出到docx文件中呢?除了输出变量观测值的常用函数data(),putdocx table命令还为我们提供了另一常用函数matrix(),该函数用于将Stata内存中的矩阵作为表格输出到docx文件中,其语法结构如下:
putdocx table tablename = matrix(matname) [, nformat(%fmt) rownames colnames table_options]


(1)与data()函数一致,tablename是对当前输出的表格的命名,但该表格内容只会暂时赋给tablename,在输出的docx文件中则并不会显示该命名。
(2)matrix()函数用于直接输出内存中的矩阵至docx文件,因此,matname即为需要输出矩阵的名称。
(3)选项nformat(%fmt)用于设定单元格文本的数字格式。
(4)选项rownames表示保留内存中矩阵的行标题,选项colnames表示保留内存中矩阵的列标题,默认情况下,matrix()函数只将矩阵的内容输出到docx文件而不保留行列标题。
接下来,我们使用matrix()函数,将矩阵“r(table)”输出到docx文件中。然而,我们发现,矩阵“r(table)”不太符合我们平时输出的习惯,我们更偏爱的表格样式是变量名在第一列,作为行标题,而统计量在第一行,作为列标题,因此,在输出之前,我们需要对矩阵“r(table)”进行转置,程序如下:
mat table = r(table)'mat list table

此时,我们将矩阵“table”输出到docx文件中。程序如下:
! taskkill /F /IM WINWORD.EXE /T putdocx begin, header(header1) pagenum(lower_roman,1) //生成名为header1的页眉,生成页码并设置格式为小写罗马数字、起始页码为1putdocx paragraph, toheader(header1) halign(center) //生成一个段落,将该段落内容插入到名为header1的页眉中,居中对齐putdocx pagenumber //该段落内容为使用pagenum()生成的小写罗马数字页码putdocx paragraph, halign(center)putdocx text ("OLS结果展示"), font("华文楷体",25,black) boldputdocx table table1 = matrix(table), rownames colnames nformat(%8.2f) //保留矩阵“table”中行列标题,设置数字格式为总长度8,保留小数点后2位数字putdocx table table1(1,.), bold shading(green) font(,,white)forvalues row = 2(2)8 { putdocx table table1(`row',.), shading(lightgreen)}putdocx table table1(.,1), bold shading(green) font(,,white)putdocx save mytable.docx, replaceshellout mytable.docx
输出的矩阵如下图所示:

此时,我们便将内存中的矩阵“table”输出到了docx文件,并设置了表格样式与数字显示格式。

二.putdocx image命令

作为一款拥有强大绘图功能的统计软件,Stata能够在很大程度上满足我们对于绘图的需求。对于在Stata内存中完成的绘图,我们可以使用putdocx image命令将其输出到docx文件中,我们仍然以auto数据为例,绘制变量mpg和weight按照foreign进行分类(国产车和进口车)的散点图,并将内存中的绘图导出为图片文件,程序如下:
sysuse auto, cleartwoway(scatter mpg weight if foreign==0,mcolor(blue%60)) (scatter mpg weight if foreign==1,msymbol(t) mcolor(red%80)), note("美国1978年汽车数据") //foreign==0时,设置点的形状为默认形状即圆形,点的颜色为蓝色,不透明度60%,foreign==1时,设置点的形状为小三角形,点的颜色为红色,不透明度80%,为散点图添加注释“美国1978年汽车数据”graph export scatter.png, replace //将内存中的绘图保存在缺省路径下,命名为scatter.png文件

接下来,我们为该绘图添加标题,并将其输出到docx文件中,程序如下:
putdocx beginputdocx pagebreakputdocx paragraph, halign(center)putdocx text ("行驶里程与车重关系"), font("宋体",20,black) bold linebreak putdocx image scatter.png, width(6) //导入图片并设置图像宽度为6英寸putdocx save mytable.docx, appendshellout mytable.docx

于是,我们便将Stata中完成的绘图输出到docx文件中啦。可以发现,无论是输出矩阵还是绘图,我们只需要在函数中与命令中指定相应的矩阵名称与相应的图形名称即可,并没有复杂的语法结构,使用起来十分方便快捷。希望今天的内容能对大家有所帮助~


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

 朝花夕拾——putdocx批量输出变量观测值

         爬虫俱乐部2019十一Python编程技术培训报名啦!

        Stata16新功能——定义图形元素的绝对大小

        添加docx内容哪家强,Stata16新命令帮你忙

        将数值型计算“一网打尽”——(1)

        将数值型计算“一网打尽”——(2)

         Stata16新功能之“框架”——读入多个数据集(1)

 Stata16新功能——同一个文档,不一样的布局

 手持Python,斗图不输!

 万般进制千机变,Python一计乾坤定——利用Python来进行进制转换

        朝花夕拾——cnstock与cntrade强强联合

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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

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

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