PythonでStataのデータファイル(.dtaファイル)を扱う
非常に苦労したので、忘れないうちに書いておく。
Python環境が整っている(Anaconda+git for Windowsのインストールが済んでいる)ことが前提。
カレントフォルダ(pythonの作業フォルダ)に読み込みたいinput.dtaというファイルが入っている
と仮定して話を進めます。
StatsModelsのインストール
dtaファイルを読み込むことだけなら、pandasというモジュール(Anacondaをインストールしたなら勝手に入っているはず)を使ってもよい。
from pandas import read_stata data = read_stata('input.dta')
しかし、このように読み込んだ結果できたdataはちゃんとPythonでいうDataFrame型になっているにも
関わらず、アクセスできないことがあったりして何かと不便。*1
いずれにせよ、OLS推定などを計量経済学的な手法をPythonで用いるときに便利なので
StatsModels: Statistics in Python — statsmodels documentation
というモジュールをインストールするとよい。
pip install git+https://github.com/statsmodels/statsmodels
でOK。
dtaファイルの読み込み・変換
dtaファイルの読み込みはStatsModelsの中のiolib.foreignにあるgenfromdtaというメソッドを使う。
これはdtaファイルをNumpy標準のarray型に変換するというもの。
import statsmodels.iolib.foreign as smio from pandas import DataFrame arr = smio.genfromdta('input.dta') frame = DataFrame.from_records(arr)
上記のコードではさらにこれをpandasモジュールのDataFrameメソッドを使ってDataFrame型に変換している。
つまりdtaファイル→numpy.array型データ→DataFrame型という手順を踏んでいるってこと。
多少手間はかかっても、この方法ならdtaファイルのバージョン等に関わらず綺麗なDataFrame型が
生成できる(ハズ)。
その他csvファイルやExcelファイルなどの読み込みは
https://www.kevinsheppard.com/images/0/09/Python_introduction.pdf
のChapter 9を参照のこと。
*1:原因は不明。dtaファイルがマズイのかread_stataの使い方がマズイのか…。