甘党ブログ

経済学とあと他に何か…

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
というモジュールをインストールするとよい。


インストールはWindowsならコマンドプロンプトから

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の使い方がマズイのか…。