Stata 与 Jupyter Notebook 关联的两种方法

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

Stata 与 Jupyter Notebook 关联的两种方法

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

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

连享会 - Stata 暑期班

线上直播 9 天:2020.7.28-8.7
主讲嘉宾:连玉君 (中山大学) | 江艇 (中国人民大学)
课程主页https://gitee.com/arlionn/PX | 微信版


目录


背景介绍

为什么要用 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 模块。

  • ounter(line
import ipystata  #导入ipystata模块

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

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

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

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

2.3 基本语法

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

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

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

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

  • ounter(line
  • ounter(line
  • ounter(line
%%stata -d car_dfsum pwcorr price weight length  //可以运行Stata其他命令,如reg price weight length
用 Stata 处理数据

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

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

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

  • ounter(line
  • ounter(line
%%stata  -gr -d car_dfgraph twoway scatter price weight
在 Jupyter Notebook 中画 Stata 图

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

  • ounter(line
  • ounter(line
%%stata -gr -d car_df -osgraph twoway scatter price weight

连享会 - 效率分析专题

已上线:可随时购买学习+全套课件,课程主页 已经放置板书和 FAQs
主讲嘉宾:连玉君 | 鲁晓东 | 张宁
课程主页微信版https://gitee.com/arlionn/TE

连享会-效率分析专题视频
连享会-效率分析专题视频

3. 使用 stata_kernel 调用 Stata

3.1 stata_kernel 安装

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

  • ounter(line
  • ounter(line
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

免费公开课:


课程一览

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

专题 嘉宾 直播/回看视频
Stata暑期班 连玉君
江艇
线上直播 9 天
2020.7.28-8.7
效率分析-专题 连玉君
鲁晓东
张 宁
视频-TFP-SFA-DEA
已上线,3天
文本分析/爬虫 游万海
司继春
视频-文本分析与爬虫
已上线,4天
空间计量系列 范巧 空间全局模型, 空间权重矩阵
空间动态面板, 空间DID
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
直击面板数据模型 [免费公开课,2小时]

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


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:
    • 课程, 直播, 视频, 客服, 模型设定, 研究设计, 暑期班
    • stata, plus,Profile, 手册, SJ, 外部命令, profile, mata, 绘图, 编程, 数据, 可视化
    • DID,RDD, PSM,IV,DID, DDD, 合成控制法,内生性, 事件研究, 交乘, 平方项, 缺失值, 离群值, 缩尾, R2, 乱码, 结果
    • Probit, Logit, tobit, MLE, GMM, DEA, Bootstrap, bs, MC, TFP, 面板, 直击面板数据, 动态面板, VAR, 生存分析, 分位数
    • 空间, 空间计量, 连老师, 直播, 爬虫, 文本, 正则, python
    • Markdown, Markdown幻灯片, marp, 工具, 软件, Sai2, gInk, Annotator, 手写批注, 盈余管理, 特斯拉, 甲壳虫, 论文重现, 易懂教程, 码云, 教程, 知乎

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

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


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

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