空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

こんなの公開されたらかなわん


www.ai-shift.co.jp
公開されたのがだいぶ前の資料になりますが、きちんと読み直してみればみるほど講義資料としてよくできていて真顔になる。
放送大学の「データベース」の講義も悪くはないんだけど、こっちの方がより実務者向けという印象。

こういう資料が無料で公開されてると大学まで行ってわざわざ技術を学ぶなんて発想がどんどんなくなっていくなぁという印象。
大学はどうやったら生き残れるかを真剣に考えないといけないなぁと思います。

OS 10.10で使えるVSCode

code.visualstudio.com
1.55が最新らしい……
インストールしたら自動アップデートはもちろん切るようにしましょう。

自動アップデートが行われると当然動かなくなります。

%%stataを使った分析例


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のコンソールでよく見る重回帰分析の結果が表記されるはずです。

まとめ

マジックコマンド「%%stata」を使うことでSTATA上でpythonを動かすよりかは比較的シームレスにデータの操作を行うことができます。
pythonの方に使い勝手が良いライブラリーが揃っていることは多々ありますのでそこから処理をしたデータをSTATAで分析のみを行うには最適な方法だと言えます。

pystata導入編


基本的にマニュアルを見ればインストールできます。
www.stata.com

pythonでのデータ分析のためにAnacondaがインストールされている人は特に問題なくインストールできるはず。
追加でインストールすることが推奨されているパッケージである

NumPy 1.9 or later versions
pandas 0.15 or later versions
IPython 5.0 or later versions

はAnacondaが入っていれば大抵インストールされているので少し手間が省けます。

実際のインストールの手順

一応、Macでstata_setupを用いてインストールした手順は以下の通りになります。
Windowsでのコードや他の方法は原本を確認してください。

1. STATAの場所を確認する

display c(sysdir_stata)

まずはSTATAを起動してSTATAへのパスを取得します。
このSTATAのパスは「STATA_SYSDIR」として後々まで使うので適時コピペしてください。

2. stata_setupからインストールする

$ pip install --upgrade --user stata_setup

ターミナルを起動してこれをコピペしてするとstata_setupがインストールされます。
インストールが終わったらAnacondaからJupyter Notebookを起動します。

STATA_SYSDIR = "「c(sysdir_stata)」で出てきたSTATAへのパス"

import stata_setup
stata_setup.config(STATA_SYSDIR, 'mp')

やってることはオリジナルと変わりません。
最初に「c(sysdir_stata)」で確認したSTATAへのパスを変数に格納しただけです。
stata_setupモジュールのconfig関数については
pypi.org

stata_setup.config('your_stata_installation_directory', 'your_stata_edition')

としか説明がありませんが、SEであればyour_stata_editionにse、BEであればbeを多分入れるとOKなはずです。もちろん、シングルクオートやダブルクオーテーションで囲むことを忘れてはいけません。

まとめ

ちょっと手間はかかりますが、STATAにpythonのパスを通すよりは比較的簡単にできるはずです。
Anacondaであればstata_setupをインストールするのに必要なモジュールは全て入っているのですんなりJupyter Notebook上でSTATAを起動することができるはずです。