軟體教學 | Jupyter&stata之stata_kernel攻略

2023-02-23 06:01:02

![](http://mdimg.yxj1010.top/xlbxs_ydt2.png)

目錄:


一、什麼是stata_kernel

Github:kylebarron/stata_kernel

1. stata_kernel簡介

Jupyter是一個用於互動式資料科學的開源生態系統,簡單來說通過stata_kernel,使用者可以為jupyter工具安裝一個stata核心,再通過jupyter環境呼叫原生的stata應用,完成一系列在stata中可以進行的操作。

2. 為什麼要使用stata_kernel

stata作為一個專業的資料分析和科學研究軟體,雖然其有著眾多的計量分析工具,且在迴歸分析等方面有著巨大的功能優勢,但我始終覺得它的UI設計醜陋且不合理。

個人認為stata與SPSS最大的區別在於使用者在使用過程中的操作邏輯不同:前者偏向於程式碼邏輯,操作快捷,自定義程度高,但有著一定的程式設計門檻;而後者偏向於UI操作,操作複雜,自定義程度及複用性不高,但勝在使用門檻較低。因此當程式碼邏輯的stata也開發出一套用於快捷操作的UI時,未免會讓像我這樣的使用者覺得有點狗尾續貂,本質上來說,我對stata的使用需求更多是在於其豐富多元的計量分析命令,我希望通過編寫程式的方式去解決每一個資料分析問題,並且讓這些程式在不同問題上可以簡單迅速地複用(因此註釋或筆記功能就顯得非常重要),同時我還希望能將我解決問題的過程形成筆記或講義,因此介面的美觀程度以及可匯出性也是我所重視的問題。

而在眾多IDE工具中(pycharm、vscode等),jupyter工具(jupyternotebook或jupyterlab)在程式設計學習或資料分析方面一直有著獨特的優勢,其UI簡潔明亮,其也是我目前最喜歡使用的一款IDE工具(尤其是在jupyterlab推出桌面版且相容了外掛管理器之後);所以在jupyterlab中像開發python程式一般編寫我的stata程式,並且能夠實時偵錯或者記錄筆記,就成為了我對stata使用的追求,而通過使用stata_kernel,便可以實現這一點!

3. stata_kernel與pystata的區別

熟悉stata的朋友應該知道,在stata17之後,官方推出了一種stata與python的全新互動方式,即通過在python環境中直接安裝pystata模組,便能在python環境中直接呼叫stata17。而這正是二者的區別,stata_kernel以是jupyter環境核心的形式執行,而pystata則以python包的形式執行,這是兩種不同的執行模式,即便我是在jupyter環境中執行python核心,從而執行stata程式碼,也與stata_kernel的方式執行stata程式碼截然不同。

當然,我們沒有必要去區分二者的執行方式差異,畢竟一般情況下使用者僅僅關注最終的結果,在我目前的使用場景和體驗中,我認為二者的差別或者優劣如下:

stata_kernel:

  • 優勢: 使用stata_kernel,我可以像在stata中一樣去編寫我的資料分析程式,並且可以隨時插入markdown筆記,或者喚起stata程式(在stata_kernel中執行bro命令將會喚醒原生的stata應用,並在stata中呈現bro的結果)通過UI介面直接檢視某些資料情況;同時我還可以通過安裝jupyter外掛,實現stata的語法高亮,使得我的程式碼美觀易懂;
  • 劣勢: 使用stata_kernel,我無法如使用pystata一般地實現stata與python的互動。

pystata:

  • 優勢: 使用pystata,我可以輕鬆地實現python與stata的互動,比如我可以通過python命令清洗資料,再呼叫stata中豐富的資料分析指令進行計量分析,並使用python指令對分析結果進行美化和輸出;這一系列操作將不會有任何割裂感,因為本質上我們都是在python環境中完成這些操作的;
  • 劣勢: 使用pystata,我們要呼叫stata語法時,將不得不在每一個cell中新增魔法指令%%stata,或使用複雜的stata.run("")語句去使stata命令生效;且由於此時的語法高亮僅作用於python語言,我們將不能正確對stata的語法進行高亮顯示。

4. stata_kernel與pystata如何選擇

如果你需要的是一個更加美觀便捷,功能豐富的stata編輯器,那麼使用stata_kernel即可;如果你更看重stata與python的互動功能,那麼你應該使用pystata;如果你兼有兩種需求,那麼小孩子才做選擇,大人當然全都要!

二、如何安裝stata_kernel

1. 安裝任意一個jupyter環境

推薦使用anaconda設定基礎環境,再使用jupyterlab Desktop或者vscode參照anaconda設定好的環境核心,來作為你的IDE工具。

2. 自定義jupyter環境設定(可選)

注:以下命令,均假設你的基礎環境是通過使用anaconda來設定的

2.1 Jupyter更改啟動路徑

開啟Anaconda Prompt,在對應環境下執行jupyter notebook --generate-config,找到剛生成的組態檔jupyter_notebook_config.py,開啟後找到#c.NotebookApp.notebook_dir = 語句,將其改為c.NotebookApp.notebook_dir = '自定義啟動路徑',然後儲存組態檔。

2.2 Jupyter更改中文語言

開啟Anaconda Prompt,在對應環境下執行pip install jupyterlab-language-pack-zh-CN,然後開啟jupyterlab,選擇"設定——語言——中文",並重啟核心。

3. 安裝stata_kernel

3.1 註冊stata

用管理員許可權開啟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才能繼續關聯。

  • 最後再開啟Anaconda Prompt,執行以下指令:
python -m stata_kernel.install

4. 安裝stata語法高亮

開啟Anaconda Prompt,執行以下指令:

jupyter labextension install jupyterlab-stata-highlight

三、使用stata_kernel

開啟jupyterlab,選擇stata核心,像編寫python程式一樣使用stata吧!

stata_kernel開發者檔案

四、解除安裝stata_kernel

開啟Anaconda Prompt,執行以下指令:

pip uninstall stata_kernel
jupyter kernelspec list
jupyter kernelspec remove stata

五、疑難雜症解決

1. 影象不顯示問題

當本地使用的是stata17版本時,可能會出現在jupyter中執行stata畫圖指令時無法輸出影象(僅會儲存影象至本地並輸出儲存路徑)的問題,這是因為Stata17引入了許多破壞與stata_kernel相容性的變化

儘管在2022年4月5日已有開發者mcaceresb修復了這一問題,但stata_kernel的原作者似乎對於這個專案已經不再上心且已經很久未進行維護,導致最新版的stata_kernel發行包仍停留在2020年發行的v1.12.2,因此我們無法通過pip的方式進行更新,但我們依然可以從github上下載最新的原始碼在本地進行替換更新。

我們僅需在github上下載最新的stata_kernel包原始檔,解壓後將stata_kernel資料夾下的所有檔案複製貼上至當前開發環境中的stata_kernel安裝目錄(如我的路徑是D:\ProgramData\Anaconda3\Lib\site-packages\stata_kernel),並替換重複檔案即可。

2. 執行stata程式碼時核心無響應

檢查安裝anaconda時是否已將當前將Anaconda相關檔案路徑新增到了系統Path中,若有缺失則補充新增,新增方式為右鍵點選計算機——屬性——高階系統設定——高階——環境變數——系統變數——Path——編輯——新建,所需設定的環境路徑如下:

  • 安裝路徑\Anaconda(呼叫Python時需要)
  • 安裝路徑\Anaconda\Scripts(呼叫conda自帶指令碼時需要)
  • 安裝路徑\Anaconda\Library\mingw-w64\bin(使用C with python時需要)
  • 安裝路徑\Anaconda\Library\usr\bin
  • 安裝路徑\Anaconda\Library\bin(呼叫jupyter notebook動態庫時需要)

例如,我新增的路徑如下:

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