Stata_kernel 的“炼丹”之旅
文章目录
- 1. 关于 stata_kernel
- 2. 本文的主要内容
- 3. Linux下stata的安装
- 4. Linux&MAC下stata_kernel的安装
- 5. Linux&Mac下stata_kernel的相关疑难杂症
- 后记
- 参考文献
1. 关于 stata_kernel
stata_kernel 主要是用于stata与jupyter lab交互的内核,通过stata_kernel为桥梁建立stata与jupyter lab间的联系后便可以在vscode等IDE中使用stata并且会得到相应IDE插件生态的支持,实现语法高亮、检查语法错误等一系列高级功能。
不过,stata_kernel面临两个致命性的发展瓶颈,一是stata_kernel的作者已经弃坑,现在该项目基本处于半死不活的状态,全靠各位“大能”用爱发电,如果你使stata16及以下版本是完全没有问题的,如果使用stata17及以上版本目前已知的最严重的问题是部分图版无法输出,好在社区已经解决该问题,后继本文将会对这一问题进行探讨;二是为适用广大用户的这类需求,stata官方也作出回应,开发了pystata这一python这一模块,可以直接在python调用stata命令,两者的差别在于stata_kernel试图在jupyter lab中搭建一个相对纯粹的stata的使用环境,目的是充分利用jupyter lab社区资源,而pystata的目的在于stata和python的协同作战,目的在于利用python优秀的编程功能和强大的数据处能力,作为一个成年人你是想做选择还是想全要,选择权在你。
笔者对这一问题的理解是这样的,stata作为一款优秀的统计软件使用起来是非常不错的,最适合拿来应急的时候使用,然而它的缺点也是十分明显的,一是贵而且是很贵,并不是一般人能够独立承担的,如果你免强入“坑”会面临很多功能上的限制,二是好用意味着同python、R、julia等主流软件相比它既不够精细又不够快速,综上所述如果希望有所建树的“童鞋”还是以stata作为“起手式”尽快过渡到python、R、julia等主流软件。
2. 本文的主要内容
关于stata_kernel与jupyter交互的内容网上已有诸多讨论,其中做的比较好的可能要属连玉君的团队,网上其他的贴子或多或少都有他们贴子的影子,当然也可能是他们借鉴其他人的贴子,本文对此不做更多阐述,无意引战只是说一下他人的贡献。本文与其他贴子的不同之处在于,其他贴子的注意力主要集中在stata_kernel在windows环境下的使用,使用场景相对单一,而本文更关注其在Linux和Mac环境下的使场景;以往的贴子很少针对stata_kernel的疑难杂证进行论述,本文尝试在这一方面作出努力,因此本文并不适合对以上系统没有使用经验的“小白”用户,而是面向进阶用户,“小白”用户切勿浪费时间。
Linux下stata的安装Linux&Mac下stata_kernel的安装- 关于
Linux&Mac下stata_kernel相关疑难杂证的处理
3. Linux下stata的安装
笔者使用wsl中的linux子系统安装stata,在安装过程中笔者参考网上已有教程并结合stata的官方手册对现有贴子中有误的地方进行了订正。
- 在写本部分之前由于中间发生很多不得不中止的事情,很多过程并未保留图片,只能给出命令和部分图片,以后有机会可能会对过程图片进行补充
- 建立一个用于存放
stata安装包的目录并将stata压缩包解压到此处
cd
mkdir statainstall
tar -xvzf Stata14Linux64.tar.gz -C statainstall
- 建立
stata的安装目录并建立软连接 - 注意安装
stata的全过程应给予管理员权限,要么切换用户,切要么使用sudo给予权限
参照stata的官方手册,建立软连接的目的在于风险隔离,一方面可以让你在系统中保留多个版本的stata,另一方面则在于保证使用体验的稳定性,主要是stata升级后stata的路径会发生一些改变,这就导致用户在使用原来的stata命令时会无法找到该命令,还有许多系统设定也会因引用原来的位置而无法找到stata,使用软连接则可以完美解决该问题。至于什么是软连接以及它的作用,本文不再赘述。
cd
sudo mkir /usr/local/stata17
sudo ln -s /usr/local/stata17 /usr/local/stata

- 将
stata安装到指定目录,此处指安装到stata17文件夹,具体视个人情况而定
cd /usr/local/stata17
sudo ~/statainstall/install
- 测试
stata是否安装成功
stata在售的有三种版本,对应的启动命令分别是:
BE版:stata
SE版:stata-se
MP版:stata-mp
需要注意的是,不同版使可用的命令是不同的
BE版:stata
SE版:statastata-se
MP版:statastata-sestata-mp
还有一点需要注意的是,Linux中stata也提供图形界面,对应的命令是xstata,用xstata替换stata启动相应版本的图形界面
stata的认证
与
windows和Mac不同,Linux下的认证需要先填写证书,然后再填写用户名,最后需要填写一个地址
本文给出windows下的填写事例以供参考
cd /usr/local/stata17
sudo ./stinit

- 将
stata目录添加到临时环境变量
PATH=$PATH:usr/local/stata
export PATH
BE版测试
stata

SE版测试
stata-se

MP版测试
stata-mp

stata命令添加到环境变量的持久化,笔者使用的是zsh,只编辑.zshrc的环境变量部分即可- 只需要将
stata路径添加到环境变量的最即可
cd
vim .zshrc

- 当然还有第二种方法,直接在
.zshrc的最后追加一行 - 本文并建议采用这种方式,可以但没必要
echo export PATH="/usr/local/stata:$PATH" >> ~/.zshrc
- 重新加载配置文件,以使环境变量生效
source ~/.zshrc
- 关于
stata的升级和卸载
版本的升级,如由
stata16升级到stata17,只需重复上述步骤并重新建立软连接即可
卸载则只需将相应的安装的文件夹删除即可
sudo rm -r /usr/local/stata16
4. Linux&MAC下stata_kernel的安装
stata_kernel下的环境搭建
经过测试,
stata_kenerl能最高可以运行在python3.9环境,高于此版本stata_kenerl可能会出现各种莫名其妙的问题,请各位看官谨慎对待
- 本文使用
miniconda搭建stata_kernel的运行环境
conda create --name stata17 python=3.9 jupyterlabconda install -c conda-forge stata_kernelpython -m stata_kernel.install
jupyter lab中stata美化
主要是语法高亮
理论上来说,如果仅使用jupyter lab来调用stata的话,到这里就可以了
conda install -c conda-forge nodejs -y
jupyter labextension install jupyterlab-stata-highlight

- 在
vscode中调用stata_kernel
在
vscode中调用stata_kernel需要对jupyter lab进行配置以使vscode能够长期稳定的接入jupyter lab
- 生成
jupyter lab的配置文件
jupyter lab配置文件的默认位置在根目录下的.jupyter/jupyter_lab_config.py
jupyter lab --generate-config
- 修改配置文件
c.ServerApp.allow_remote_access: 设置允许远程访问
c.ServerApp.local_hostnames:设置主机名,如果在vps上请使用IP地址,如果本地访问请保持默认
c.ServerApp.port:设置jupyter lab启动时所用的端口号
c.ServerApp.root_dir:设置启动后的jupyter lab的根目录
c.ServerApp.token:设置token方便vscode配置jupyterl ab
token的设置是随意的,可以去Online UUID Generator获得一个唯一的UUID作为token使用
c.ServerApp.browser:设置jupyter lab的默认浏览器
vim .jupyter/jupyter_lab_config.py
c.ServerApp.allow_remote_access = True
c.ServerApp.root_dir = '/home/ubuntu/jupyter'
c.ServerApp.token = '10678062-09e5-4f7a-992a-19f3aab87c82'
import webbrowser
webbrowser.register("msedge",None,webbrowser.GenericBrowser(u"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"))
c.NotebookApp.browser = "msedge"


vscde配置
Ctrl+shift+P打开命令输入框
Jupyter:Create:New Jupyter Notebook
Jupyter:Existing jupyter server..
在Enter the URL of the running Jupyter server中填入对应的网址,笔者是本地搭建故使用127.0.0.1
http://127.0.0.1:8888/lab?token=10678062-09e5-4f7a-992a-19f3aab87c82
然后右下角会提示重启vscode,重启后,就可以创建一个笔记本用了





5. Linux&Mac下stata_kernel的相关疑难杂症
- 不出意外的话,就出意外了
- 问题1:
ModuleNotFoundError: No module named 'notebook'
遇到这个问题原因应该是
stata_kernel太久没有更新,导致其用到的相关依赖在jupyter lab的后续更新中被抛弃,只要装上相关依赖就可以了
解的方法有两个,但第二个方法笔者并未验证
conda activate stata17
python -m pip install jupyter
conda activate stata17
pip install notebook
- 问题2:
stata重装、原来的stata_kernel删除或者是stata升级后,重新搭建的stata_kernel环境无法找到stata导致stata_kernel无法启动而被删除
要解决这个问题大概分两步,一是删除安装在
jupyter lab中的stata_kernel并重新安装,二是修改stata相关的配置文件

- 删除已安装在
stata_lab中的stata_kernel并重装
conda activate stata17
jupyter kernelspec list
jupyter kernelspec remove stata
python -m stata_kernel.install
- 修改
stata相关配置文件
- 首先删除与之前
stata版本相对应的stata隐藏文件夹.stata17- 其次修改
.stata_kernel.conf中stata的引用路径- 相关配置文件的位置均在根目录
- 此时将
stata路径配置为stata_path = /usr/local/stata/stata-mp的优势就体现出来了,如果开始直接就引用这个路径,这一问题也许压根就不会出现

cd
ls -al
rm -r .stata17
vim .stata_kernel.conf
- 这里同时解决了另一个问题,那就是在
Linux下通常默认引用stata导致无法在jupyter lab中调用stata-se和stata-mp从而限制stata性能的发挥,手动修改引用程序的位置后便可便意切换stata的版本

- 问题3:升级到
stata17后出现部分图象无法显示
- 这个问题的出现是因为
stata17与stata_kernel不兼容导致的,解决的方法就是用github中stata_kernel的开版覆盖旧版本的stata_kernel,即用github中stata_kernel项目中的stata_kernel文件夹来替换本机的stata_kernel文件夹- 对于这一问题本文仅提供一种思路和解决方案,具体效果并未验证
Linux中stata_kernel的安装位置为:
/home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernelMac中stata_kernel的安装位置为:
/opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernelWindows10中stata_kernel的安装位置为:
D:\miniconda3\envs\stata_env\Lib\site-packages
- Limux
cd
mv /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernel /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernel.old
git clone https://github.com/kylebarron/stata_kernel.git
cp -r stata_kernel/stata_kernel /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/
rm -r stata_kernel
- Mac
cd
mv /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel.old
git clone https://github.com/kylebarron/stata_kernel.git
cp -r stata_kernel/stata_kernel /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/
rm -r stata_kernel

后记
至此,Linux&Mac下关于stata_kernel的几乎所有的问题都应该可解决,如果不能的话,就劝你放弃吧,毕竟stata_kernel的发展似乎也已经进入瓶颈,某种程度上来说,“弃坑”也许是更好的选择。
- 附赠一段查看
stata基本信息的小程序
从最终呈现的结果来看,在
WSL中的Linux可以使用计算机的全部硬件资源,因此限制WSL中软件性能的可能就它的资源利用效率了
local system_first 当前日期 当时间 当版本号 命令编版本 当前运行版本的发布日期 当前操作系统数位 当前所使用的Stata是否业SE版 当前Stata是否为MP版 当前Stata/MP版处理器核心数 当前Stata/MP版得到许可的处理器核心数 ///当前运行Stata/MP版核心数 当前stata/MP版能够使用的最大处理器核数 Stata运行在什么交互方式的计算机系统上 当前否窗口运行方式 当前使用的计算机系统类型 主机名 计算机类型 字节顺序 当前用户身份local system_second current_date current_time stata_version version born_date bit SE MP processors processors_lic processors_mach processors_max mode console os hostname ///machine_type byteorder usernamelocal i = 1while `i' < 20{local nmf: word `i' of `system_first'local nms: word `i' of `system_second'disp "`nmf' `c(`nms')' "local ++i
}
- 结果
当前日期 11 Apr 2023
当时间 13:44:18
当版本号 17
命令编译版本 17
当前运行版本的发布日期 20 Apr 2021
当前操作系统数位 64
当前Stata是否业SE版 1
当前Stata是否为MP版 1
当前Stata/MP版处理器核心数 8
当前Stata/MP版得到许可的处理器核心数 8
当前运行计算机处理器的核心数 8
当前stata/MP版能够使用的最大处理器核数 8
当前Statar运行方式否为交换互
当前stata是否以窗口方式运行 console
当前使用的计算机操作系统类型 Unix
主机名 DESKTOP-3ICDEFB
计算机类型 PC (64-bit x86-64)
机算机字节顺序 lohi
当前用户身份 ubuntu
参考文献
- stata_kernel
- Installing Stata in Linux
- 如何设置环境变量?
- 如何更新Stata软件的信息?
- jupyter–lab 配置文件jupyter_lab_config.py
- 在-Linux-上安装-Stata
- Jupyter与Stata关联-stata_kernel
- Downloading and installing Stata on Linux
- jupyter notebook 删除指定kernel
- 朝花夕拾 | Stata的环境参数及提取
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
