flying-spotted-garden-eel.hatenablog.com
前回はセットアップについて解説しましたが、今回は実際の解析について説明します。
とりあえず、Jupyter Notebookを起動して最初のセルに
STATA_SYSDIR = "自分のstataのpath" import stata_setup stata_setup.config(STATA_SYSDIR, 'mp')
までは読み込みが終わっているとして話を進めます。
%%stataってなんぞや
www.stata.com
の記載の通りです。
- %stata:STATAコマンドを1行のみ使う場合
- %%stata:STATAコマンドを複数行使う場合
という違いはありますがiPython上でSTATAコマンドを1行のみ使うことはほとんどないと思いますので、%%stataのみを使うと良いでしょう。
マジックコマンドを使ってから、stataのuseでデータをわざわざ読み込むのはわざわざpy_stataを使う意味もないとは思うので、データのインポートの仕方だけ覚えておけば大丈夫でしょう。
特にSTATAはSQL関係が使い勝手が悪いので、データサーバーからデータを引っ張ってくるところまではSQLAlchemy *1で処理した方がいいのでは? と常々思います。
データの読み込み
import pandas as pd import io import requests #アドレスが変わっているので注意すること url_data = "https://www.stata.com/python/pystata18/misc/nhanes2.csv" data = requests.get(url_data).content nhanes2 = pd.read_csv(io.StringIO(data.decode('utf-8'))) nhanes2
py_stataのセットアップが終わったら、pythonモジュール類を読み込みデータをpandasのデータフレームに読み込みます。
元のデータのアドレスがチュートリアルと変わっているので、アドレスを上記のものに変えてあげる必要があります。
データフレームが読み込めていることを確認したら、
%%stata -d nhanes2 -force label define sex2 1 "Male" 2 "Female" encode sex, generate(sex2) label(sex2) label define agegrp 1 "20-29" 2 "30-39" 3 "40-49" 4 "50-59" 5 "60-69" 6 "70+" encode agegrp, generate(agegrp2) label(agegrp) label variable bpsystol "systolic blood pressure" label variable agegrp2 "Age Group" label variable sex2 "1=Male, 2=Female" describe bpsystol agegrp2 sex2
%%stataコマンドからデータフレームをpy_stataに読み込まさせます。
%%stata -d データフレームの名前 -force
で読み込むことができます。
それから下の諸々は通常のSTATAのコマンドです。
回帰分析の例
%%stata -eret steret
// fit a regression model
regress bpsystol agegrp2##sex2
一旦、「%%stata」でデータをpy_stataに渡してしまえば、あとは「%%stata」を入力するだけで、渡されたデータに対して各種の処理をしてくれます。
例では回帰分析を行なっています。Jupyter Notebookの画面上に
といったSTATAのコンソールでよく見る重回帰分析の結果が表記されるはずです。