Stata 与 Jupyter Notebook 关联的两种方法

发布时间:2020-05-03 阅读 511

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者: 秦利宾 (厦门大学)
邮箱: qlb150@163.com

Stata 与 Jupyter Notebook 关联的两种方法


目录


背景介绍

为什么要用 Jupyter Notebook + Stata 模式 ?

无论是老师写讲义,还是学生向老师汇报研究进展,我们经常需要不停地在写作软件 (如 Word, Vscode, Typora) 和统计软件 (如,Stata, Python, R) 之间切换,以便将文字说明和实证结果「人为融合」在一份文档中,增加其可读性。

这种模式的最大局限在于:一旦需要更新文稿中的实证结果,就需要重新复制粘贴一次,很是繁琐。

今天要介绍的 Jupyter Notebook 可以完美解决这一困惑 —— 它是「文字说明 + 代码 + 结果展示」的有机结合体。由于所有的文档都采用 Markdown 来写,所以很好地实现了 内容格式 的分离,让我们可以专注于写作。对于导师而言,采用「Jupyter Notebook + Stata」模式最大的好处莫过于可以实时了解学生的进展,杜绝了学生由于「赶工」或「过度追星」而进行的各种冒险行为。

遗憾的是,此前,我们想把 Jupyter NotebookStata 融合起来,并非易事。前段时间,在担任 【连享会-文本分析与爬虫专题】 课程助教的过程中,大家集思广益,终于测试出了一些相对稳定的关联方法,分享于此,希望能将各位从恼人的的「Ctrl+C/V」中解放出来。ps,由于这门直播课支持回放,不断有新的学员加入,因此,我们助教团队仍然能够结识不少新同仁,日后必然会有更好的解决方案。

Jupyter Notebook 是个啥东东?

Jupyter Notebook 是一个开源的 Web 应用程序,旨在方便开发者创建和共享代码文档。用户可以在里面写代码、运行代码、查看结果,并在其中可视化数据。同时,Jupyter Notebook 也具有较高的灵活性和交互性,可支持 40 多种编程语言。鉴于以上优点,我们可以通过加载 Stata,可以更好与 Python 进行交互,也可以更好展示 Stata 代码和结果,方便与他人共享。为此,本文将简要介绍两种 Jupyter Notebook 加载 Stata 方法。

连享会-码云主页 上放置了几个访问量非常高的项目,都是采用 Jupyter Notebook 来展示的,比如:

下面这幅 gif 图形很好地展示了「Jupyter Notebook + Stata」模式的工作过程和便利之处:

Jupyter Notebook 加载 Stata 官方演示图

言归正传,我们说说如何让 Jupyter NotebookStata 关联起来。

1. 注册 Stata

首先,以 管理员身份 打开 CMD 命令窗口。然后,在 CMD 中输入 cd /d D:\stata 定位到 Stata 安装路径。最后输入 StataMP-64.exe /Register 注册 Stata。这里 Stata 的安装路径和可执行文件需要根据自己电脑设置。

注册 Stata

2. 使用 ipystata 模块调用 Stata

2.1 安装 ipystata 模块

打开 Anaconda Prompt,输入 pip install ipystata,出现下图表示安装成功。需要注意的是,成功安装 ipystata 模块后,需要在 Jupyter NotebookRestart the Kernel

安装 ipystata 模块

2.2 导入 ipystata 模块

输入以下命令,导入 ipystata 模块。

import ipystata  #导入ipystata模块

或则,输入以下命令,导入 ipystata 模块。

import ipystata  #导入ipystata模块
from ipystata.config import config_stata  #告诉ipystata哪里可以找到stata
config_stata(r"D:\stata\StataMP-64.exe", force_batch=True)   #Stata可执行文件路径,根据自己电脑设置

调用魔法函数 %%stata,输入 Stata 命令,检验是否可以成功调用 Stata

%%stata  
display "Hello, I am printed in Stata."  
导入 ipystata 模块

2.3 基本语法

在加载 ipystata 模块后,若要运行 Stata 命令,需要在 Cell 中第一行输入魔法函数 %%stata,该命令会将整个 cell 中代码在 Stata 中执行,并将结果输出到 Jupyter Notebook

通过 -o--outputStata 中数据导入到 Jupyter Notebook 中。之后,可以调用 Python 对数据进行处理。

%%stata -o car_df
sysuse auto.dta  //需要注意的是,第一行不能写注释 
导入 auto 数据
car_df.head()  #查看car_df前几行信息
car_df = car_df[["price", "mpg", "rep78", "weight", "length"]]  #提取某几列
car_df.head()
用 Python 处理数据

通过 -d--dataDataFrame 数据导入到 Stata 中,并调用 Stata 进行处理。

%%stata -d car_df
sum 
pwcorr price weight length  //可以运行Stata其他命令,如reg price weight length
用 Stata 处理数据

同时,也可以使用以下命令,将 Stata 处理后的数据导入到 Jupyter Notebook

%%stata -o car_df
sysuse auto.dta, clear
keep price mpg rep78 weight length  //保留几列
gen lnprice = log(price)  //生成price的对数lnprice
car_df.head()
Jupyter Notebook 导入Stata 处理后数据

通过 -gr--graph,在 Jupyter Notebook 中画 Stata 图。

%%stata  -gr -d car_df
graph twoway scatter price weight
在 Jupyter Notebook 中画 Stata 图

Jupyter Notebook 不能正常显示图形,可通过加 -os--openstata 的方法打开 Stata 程序作图。需要注意,Stata 作完图后,需将 Stata 终端关掉,否则 Jupyter Notebook 程序将一直运行,即 cell 前一直为 [*] 状态。

%%stata -gr -d car_df -os
graph twoway scatter price weight

3. 使用 stata_kernel 调用 Stata

3.1 stata_kernel 安装

Anaconda Prompt,输入以下命令安装 stata_kernel。同时,也需要在 Jupyter NotebookRestart the Kernel。若 stata_kernel 长时间不能安装成功,可以参考 Python 配置 pip 镜像地址

pip install stata_kernel 
python -m stata_kernel.install
安装 stata_kernel

安装完 stata_kernel 后,打开 Jupyter Notebook,通过 Kernel -> Change kernel -> Stata 可以新建一个用 Stata 编写的 .ipynb 文档。

新建一个 Stata 的 .ipynb 文档

3.2 基本语法

ipystata 用法不同,stata_kernel 并不需要特殊命令,我们可以像在 Stata 中一样写代码,正如文章最开始那副图的展示。

不过,stata_kernel 也提供了特殊的命令,可以提供一些特殊功能,如 %head%tail%browser%help%locals%globals等,我们可以通过 %magic_name --help 查看这些命令的帮助文档。

其中,%head (%tail, %browser) 是以 DataFrameJupyter Notebook 中展现数据。

%head 结果展示

%local%globals 可以展示当前文件暂元中的内容。%help 可以将相关命令的帮助文档展示在 Jupyter Notebook 中。

%help 结果展示

4. 总结

以上是两种加载 Stata 的方法,即 ipystatastata_kernel,并且两种方法都要注册 Stata。在这个过程中,若不能正常使用,可重新安装 Stata 或其他版本进行尝试。

5. 参考资料

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD