温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者: 秦利宾 (厦门大学)
邮箱: qlb150@163.com
Stata 与 Jupyter Notebook 关联的两种方法
目录
无论是老师写讲义,还是学生向老师汇报研究进展,我们经常需要不停地在写作软件 (如 Word, Vscode, Typora) 和统计软件 (如,Stata, Python, R) 之间切换,以便将文字说明和实证结果「人为融合」在一份文档中,增加其可读性。
这种模式的最大局限在于:一旦需要更新文稿中的实证结果,就需要重新复制粘贴一次,很是繁琐。
今天要介绍的 Jupyter Notebook 可以完美解决这一困惑 —— 它是「文字说明 + 代码 + 结果展示」的有机结合体。由于所有的文档都采用 Markdown 来写,所以很好地实现了 内容 与 格式 的分离,让我们可以专注于写作。对于导师而言,采用「Jupyter Notebook + Stata」模式最大的好处莫过于可以实时了解学生的进展,杜绝了学生由于「赶工」或「过度追星」而进行的各种冒险行为。
遗憾的是,此前,我们想把 Jupyter Notebook 和 Stata 融合起来,并非易事。前段时间,在担任 【连享会-文本分析与爬虫专题】 课程助教的过程中,大家集思广益,终于测试出了一些相对稳定的关联方法,分享于此,希望能将各位从恼人的的「Ctrl+C/V」中解放出来。ps,由于这门直播课支持回放,不断有新的学员加入,因此,我们助教团队仍然能够结识不少新同仁,日后必然会有更好的解决方案。
Jupyter Notebook 是一个开源的 Web 应用程序,旨在方便开发者创建和共享代码文档。用户可以在里面写代码、运行代码、查看结果,并在其中可视化数据。同时,Jupyter Notebook 也具有较高的灵活性和交互性,可支持 40 多种编程语言。鉴于以上优点,我们可以通过加载 Stata,可以更好与 Python
进行交互,也可以更好展示 Stata 代码和结果,方便与他人共享。为此,本文将简要介绍两种 Jupyter Notebook 加载 Stata 方法。
连享会-码云主页 上放置了几个访问量非常高的项目,都是采用 Jupyter Notebook 来展示的,比如:
下面这幅 gif 图形很好地展示了「Jupyter Notebook + Stata」模式的工作过程和便利之处:
言归正传,我们说说如何让 Jupyter Notebook 和 Stata 关联起来。
首先,以 管理员身份
打开 CMD
命令窗口。然后,在 CMD
中输入 cd /d D:\stata
定位到 Stata 安装路径。最后输入 StataMP-64.exe /Register
注册 Stata。这里 Stata 的安装路径和可执行文件需要根据自己电脑设置。
打开 Anaconda Prompt
,输入 pip install ipystata
,出现下图表示安装成功。需要注意的是,成功安装 ipystata
模块后,需要在 Jupyter Notebook 中 Restart the Kernel
。
输入以下命令,导入 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
模块后,若要运行 Stata 命令,需要在 Cell
中第一行输入魔法函数 %%stata
,该命令会将整个 cell
中代码在 Stata 中执行,并将结果输出到 Jupyter Notebook。
通过 -o
或 --output
将 Stata 中数据导入到 Jupyter Notebook 中。之后,可以调用 Python
对数据进行处理。
%%stata -o car_df
sysuse auto.dta //需要注意的是,第一行不能写注释
car_df.head() #查看car_df前几行信息
car_df = car_df[["price", "mpg", "rep78", "weight", "length"]] #提取某几列
car_df.head()
通过 -d
或 --data
将 DataFrame
数据导入到 Stata 中,并调用 Stata 进行处理。
%%stata -d car_df
sum
pwcorr price weight length //可以运行Stata其他命令,如reg price weight length
同时,也可以使用以下命令,将 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()
通过 -gr
或 --graph
,在 Jupyter Notebook 中画 Stata 图。
%%stata -gr -d car_df
graph twoway scatter price weight
若 Jupyter Notebook 不能正常显示图形,可通过加 -os
或 --openstata
的方法打开 Stata 程序作图。需要注意,Stata 作完图后,需将 Stata 终端关掉,否则 Jupyter Notebook 程序将一直运行,即 cell
前一直为 [*]
状态。
%%stata -gr -d car_df -os
graph twoway scatter price weight
在 Anaconda Prompt
,输入以下命令安装 stata_kernel
。同时,也需要在 Jupyter Notebook 中 Restart the Kernel
。若 stata_kernel
长时间不能安装成功,可以参考 Python 配置 pip 镜像地址。
pip install stata_kernel
python -m stata_kernel.install
安装完 stata_kernel
后,打开 Jupyter Notebook,通过 Kernel
-> Change kernel
-> Stata 可以新建一个用 Stata 编写的 .ipynb
文档。
与 ipystata
用法不同,stata_kernel
并不需要特殊命令,我们可以像在 Stata 中一样写代码,正如文章最开始那副图的展示。
不过,stata_kernel
也提供了特殊的命令,可以提供一些特殊功能,如 %head
、%tail
、%browser
、%help
、%locals
、%globals
等,我们可以通过 %magic_name --help
查看这些命令的帮助文档。
其中,%head (%tail, %browser)
是以 DataFrame
在 Jupyter Notebook 中展现数据。
%local
和 %globals
可以展示当前文件暂元中的内容。%help
可以将相关命令的帮助文档展示在 Jupyter Notebook 中。
以上是两种加载 Stata 的方法,即 ipystata
和 stata_kernel
,并且两种方法都要注册 Stata。在这个过程中,若不能正常使用,可重新安装 Stata 或其他版本进行尝试。
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD