軟件教程 | Jupyter&stata之stata_kernel攻略


目錄:
一、什么是stata_kernel
1. stata_kernel簡介
2. 為什么要使用stata_kernel
3. stata_kernel與pystata的區(qū)別
4. stata_kernel與pystata如何選擇
二、如何安裝stata_kernel
1. 安裝任意一個jupyter環(huán)境
2. 自定義jupyter環(huán)境配置(可選)
3. 安裝stata_kernel
4. 安裝stata語法高亮
三、使用stata_kernel
四、卸載stata_kernel
五、疑難雜癥解決
1. 圖像不顯示問題
2. 運行stata代碼時內(nèi)核無響應(yīng)
3. 其他疑難雜癥
一、什么是stata_kernel
Github:kylebarron/stata_kernel[1]
1. stata_kernel簡介
Jupyter是一個用于交互式數(shù)據(jù)科學的開源生態(tài)系統(tǒng),簡單來說通過stata_kernel,用戶可以為jupyter工具安裝一個stata內(nèi)核,再通過jupyter環(huán)境調(diào)用本地的stata應(yīng)用,完成一系列在stata中可以進行的操作。
2. 為什么要使用stata_kernel
stata作為一個專業(yè)的數(shù)據(jù)分析和科學研究軟件,雖然其有著眾多的計量分析工具,且在回歸分析等方面有著巨大的功能優(yōu)勢,但我始終覺得它的UI設(shè)計丑陋且不合理。
個人認為stata與SPSS最大的區(qū)別在于用戶在使用過程中的操作邏輯不同:前者偏向于代碼邏輯,操作快捷,自定義程度高,但有著一定的編程門檻;而后者偏向于UI操作,操作復(fù)雜,自定義程度及復(fù)用性不高,但勝在使用門檻較低。因此當代碼邏輯的stata也開發(fā)出一套用于快捷操作的UI時,未免會讓像我這樣的使用者覺得有點狗尾續(xù)貂,本質(zhì)上來說,我對stata的使用需求更多是在于其豐富多元的計量分析命令,我希望通過編寫程序的方式去解決每一個數(shù)據(jù)分析問題,并且讓這些程序在不同問題上可以簡單迅速地復(fù)用(因此注釋或筆記功能就顯得非常重要),同時我還希望能將我解決問題的過程形成筆記或講義,因此界面的美觀程度以及可導(dǎo)出性也是我所重視的問題。
而在眾多IDE工具中(pycharm、vscode等),jupyter工具(jupyternotebook或jupyterlab)在編程學習或數(shù)據(jù)分析方面一直有著獨特的優(yōu)勢,其UI簡潔明亮,其也是我目前最喜歡使用的一款I(lǐng)DE工具(尤其是在jupyterlab推出桌面版且兼容了插件管理器之后);所以在jupyterlab中像開發(fā)python程序一般編寫我的stata程序,并且能夠?qū)崟r調(diào)試或者記錄筆記,就成為了我對stata使用的追求,而通過使用stata_kernel,便可以實現(xiàn)這一點!
3. stata_kernel與pystata的區(qū)別
熟悉stata的朋友應(yīng)該知道,在stata17之后,官方推出了一種stata與python的全新交互方式,即通過在python環(huán)境中直接安裝pystata模塊,便能在python環(huán)境中直接調(diào)用stata17。而這正是二者的區(qū)別,stata_kernel以是jupyter環(huán)境內(nèi)核的形式運行,而pystata則以python包的形式運行,這是兩種不同的運行模式,即便我是在jupyter環(huán)境中運行python內(nèi)核,從而運行stata代碼,也與stata_kernel的方式運行stata代碼截然不同。
當然,我們沒有必要去區(qū)分二者的運行方式差異,畢竟一般情況下使用者僅僅關(guān)注最終的結(jié)果,在我目前的使用場景和體驗中,我認為二者的差別或者優(yōu)劣如下:
stata_kernel:
優(yōu)勢:?使用stata_kernel,我可以像在stata中一樣去編寫我的數(shù)據(jù)分析程序,并且可以隨時插入markdown筆記,或者喚起stata程序(在stata_kernel中運行
bro
命令將會喚醒本地的stata應(yīng)用,并在stata中呈現(xiàn)bro
的結(jié)果)通過UI界面直接查看某些數(shù)據(jù)情況;同時我還可以通過安裝jupyter插件,實現(xiàn)stata的語法高亮,使得我的代碼美觀易懂;劣勢:?使用stata_kernel,我無法如使用pystata一般地實現(xiàn)stata與python的交互。
pystata:
優(yōu)勢:?使用pystata,我可以輕松地實現(xiàn)python與stata的交互,比如我可以通過python命令清洗數(shù)據(jù),再調(diào)用stata中豐富的數(shù)據(jù)分析指令進行計量分析,并使用python指令對分析結(jié)果進行美化和輸出;這一系列操作將不會有任何割裂感,因為本質(zhì)上我們都是在python環(huán)境中完成這些操作的;
劣勢:?使用pystata,我們要調(diào)用stata語法時,將不得不在每一個cell中添加魔法指令
%%stata
,或使用復(fù)雜的stata.run("")
語句去使stata命令生效;且由于此時的語法高亮僅作用于python語言,我們將不能正確對stata的語法進行高亮顯示。
4. stata_kernel與pystata如何選擇
如果你需要的是一個更加美觀便捷,功能豐富的stata編輯器,那么使用stata_kernel即可;如果你更看重stata與python的交互功能,那么你應(yīng)該使用pystata;如果你兼有兩種需求,那么小孩子才做選擇,大人當然全都要!
二、如何安裝stata_kernel
1. 安裝任意一個jupyter環(huán)境
推薦使用anaconda配置基礎(chǔ)環(huán)境,再使用jupyterlab Desktop或者vscode引用anaconda配置好的環(huán)境內(nèi)核,來作為你的IDE工具。
2. 自定義jupyter環(huán)境配置(可選)
注:以下命令,均假設(shè)你的基礎(chǔ)環(huán)境是通過使用anaconda來配置的
2.1 Jupyter更改啟動路徑
打開Anaconda Prompt,在對應(yīng)環(huán)境下運行jupyter notebook --generate-config
,找到剛生成的配置文件jupyter_notebook_config.py
,打開后找到#c.NotebookApp.notebook_dir =?
語句,將其改為c.NotebookApp.notebook_dir = '自定義啟動路徑'
,然后保存配置文件。
2.2 Jupyter更改中文語言
打開Anaconda Prompt,在對應(yīng)環(huán)境下運行pip install jupyterlab-language-pack-zh-CN
,然后打開jupyterlab,選擇"設(shè)置——語言——中文",并重啟內(nèi)核。
3. 安裝stata_kernel
3.1 注冊stata
用管理員權(quán)限打開Windows PowerShell,然后運行以下指令:
cd "D:\ProgramData\Stata16"
.\StataMP-64.exe /Register
其中"D:\ProgramData\Stata17"
為本地stata的安裝地址,StataMP-64.exe
為MP版本stata的啟動程序名稱,如果是SE版本則改為StataSE-64.exe
即可
3.2 安裝kernel
首先打開Anaconda Prompt,然后運行以下指令:
conda update conda
python -m pip install --upgrade pip
pip install stata_kernel
然后在本地查找
.stata_kernel.conf
文件(一般在C盤用戶文件根目錄),打開后將第二行改為stata_path = "D:\ProgramData\Stata17\StataMP-64.exe"
,即本地stata程序的存放路徑。
需要注意的是,如果電腦中更新了stata版本(比如我之前是從stata16更新到stata17),僅僅重裝stata_kernel是不會自動更新stata_path的,需要將用戶文件夾下的.stata14文件夾刪除(即刪除舊版的文件夾,這是一個隱藏文件夾),再重裝stata_kernel或手動修改stata_path才能繼續(xù)關(guān)聯(lián)。
最后再打開Anaconda Prompt,運行以下指令:
python -m stata_kernel.install
4. 安裝stata語法高亮
打開Anaconda Prompt,運行以下指令:
jupyter labextension install jupyterlab-stata-highlight
三、使用stata_kernel
打開jupyterlab,選擇stata內(nèi)核,像編寫python程序一樣使用stata吧!
stata_kernel開發(fā)者文檔[2]
四、卸載stata_kernel
打開Anaconda Prompt,運行以下指令:
pip uninstall stata_kernel
jupyter kernelspec list
jupyter kernelspec remove stata
五、疑難雜癥解決
1. 圖像不顯示問題
當本地使用的是stata17版本時,可能會出現(xiàn)在jupyter中運行stata畫圖指令時無法輸出圖像(僅會保存圖像至本地并輸出保存路徑)的問題,這是因為Stata17引入了許多破壞與stata_kernel兼容性的變化[3]。
盡管在2022年4月5日已有開發(fā)者mcaceresb[4]修復(fù)了這一問題,但stata_kernel的原作者似乎對于這個項目已經(jīng)不再上心且已經(jīng)很久未進行維護,導(dǎo)致最新版的stata_kernel發(fā)行包仍停留在2020年發(fā)行的v1.12.2[5],因此我們無法通過pip
的方式進行更新,但我們依然可以從github上下載最新的源代碼在本地進行替換更新。
我們僅需在github[6]上下載最新的stata_kernel包源文件,解壓后將stata_kernel
文件夾下的所有文件復(fù)制粘貼至當前開發(fā)環(huán)境中的stata_kernel安裝目錄(如我的路徑是D:\ProgramData\Anaconda3\Lib\site-packages\stata_kernel
),并替換重復(fù)文件即可。



2. 運行stata代碼時內(nèi)核無響應(yīng)
檢查安裝anaconda時是否已將當前將Anaconda相關(guān)文件路徑添加到了系統(tǒng)Path中,若有缺失則補充添加,添加方式為右鍵點擊計算機——屬性——高級系統(tǒng)設(shè)置——高級——環(huán)境變量——系統(tǒng)變量——Path——編輯——新建
,所需配置的環(huán)境路徑如下:
安裝路徑\Anaconda(調(diào)用Python時需要)
安裝路徑\Anaconda\Scripts(調(diào)用conda自帶腳本時需要)
安裝路徑\Anaconda\Library\mingw-w64\bin(使用C with python時需要)
安裝路徑\Anaconda\Library\usr\bin
安裝路徑\Anaconda\Library\bin(調(diào)用jupyter notebook動態(tài)庫時需要)
例如,我添加的路徑如下:
D:\ProgramData\Anaconda3
D:\ProgramData\Anaconda3\Scripts
D:\ProgramData\Anaconda3\Library\mingw-w64\bin
D:\ProgramData\Anaconda3\Library\usr\bin
D:\ProgramData\Anaconda3\Library\bin
3. 其他疑難雜癥
3.1 思路①:完全卸載并重裝Anaconda
打開Anaconda Prompt,運行以下指令:
conda install anaconda-clean
anaconda-clean --yes
然后卸載anaconda并重新安裝
3.2 思路②:完全卸載并重裝stata
卸載stata_kernel——卸載stata——重裝stata——重裝stata_kernel
Reference
[1]
stata_kernel github地址:?https://github.com/kylebarron/stata_kernel
[2]
stata_kernel開發(fā)者文檔:?https://kylebarron.dev/stata_kernel/
[3]
Stata17引入了許多破壞與stata_kernel兼容性的變化:?https://github.com/kylebarron/stata_kernel/issues/428#issuecomment-1210723086
[4]
View all commits by mcaceresb:?https://github.com/kylebarron/stata_kernel/commits?author=mcaceresb
[5]
v1.12.2版:?https://github.com/kylebarron/stata_kernel/releases/tag/v1.12.2
[6]
kylebarron/stata_kernel:?https://github.com/kylebarron/s