文章目录
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
版:stata
stata-se
MP
版:stata
stata-se
stata-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 jupyterlab
conda install -c conda-forge stata_kernel
python -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_kernel
Mac
中stata_kernel
的安装位置为:
/opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel
Windows10
中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 username
local i = 1
while `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