IBM SPSS(つまり.sav)ファイルを開くためのPython=のモジュールはありますか?追加のdllファイル/ライブラリを必要としない最新のものがあれば素晴らしいでしょう。
SPSS(sav、zsav、por)、Stata、およびpythonファイルを読み取るSASパッケージ "pyreadstat"をリリースしました。これは、CライブラリReadStatのラッパーなので、非常に高速です。 Readstatは、広く使用されており、非常に堅牢なRライブラリHavenの裏側で使用されているライブラリです。
パッケージはオートコンテインです。 Rを使用する必要はなく(追加のアプリケーションをインストールする必要もありません)、IBM dllや他の外部ライブラリに依存しません。
たとえば、SPSS savファイルを読み取るには、次のようにします。
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/sav/file.sav")
dfはpandasデータフレームです。メタには、変数ラベルや値ラベルなどのメタデータが含まれています。 read_savは、savファイルとzsav(圧縮)ファイルの両方を読み取ります。古いpor(ポータブル)ファイル用の関数read_porもあります。
あなたはそれをここで見つけることができます: https://github.com/Roche/pyreadstat
やりたいことに応じて、 rpy2 からのR関連コマンドを使用してデータを処理するか、Pythonに切り替えます-関連スレッドで @ Spacedmanによって提供されるソリューション は簡単に実行できますあなたのニーズに合わせて適応。
それ以外の場合、 Pandas には 便利なラッパー_rpy2
_ が含まれます。ピートアンドバートンの _weights.sav
_ データセット:
_>>> import pandas.rpy.common as com
>>> filename = "weights.sav"
>>> w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
>>> w = com.convert_robj(w)
>>> w.head()
ID WEIGHT LENGTH HEADC GENDER EDUCATIO PARITY
1 L001 3.95 55.5 37.5 Female tertiary 3 or more siblings
2 L003 4.63 57.0 38.5 Female tertiary Singleton
3 L004 4.75 56.0 38.5 Male year12 2 siblings
4 L005 3.92 56.0 39.0 Male tertiary One sibling
5 L006 4.56 55.0 39.5 Male year10 2 siblings
_
後でこれを発見した人へのメモとして(私のように):pandas.rpy
は、pandas(> 0.16))の最新バージョンでは非推奨になっています こちら 。そのページには、rpy2
インターフェースを使用するためのコードの更新に関する情報が含まれています。
あなたがおそらく興味を持っているパッケージはここにあります
savReaderWriter Bitbucket
savReaderWriter 3.4.2 in Python Package Index Repo
しかし、IBMライブラリーを使用する利点は、このかなり複雑なバイナリー・ファイル・フォーマットを正しく取得できることです。それらは無料であり、このフォーマットのコードを記述する負担を軽減し、ライセンスによりそれらを再配布することができます。これ以上何を頼めますか?
これをpandas(> 0.16)に更新する方法について@Pydermanと同じ質問がありました。これは私が思いついたものです:
from rpy2.robjects import pandas2ri, r
filename = 'weights.sav'
w = r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
df = pandas2ri.ri2py(w)
df.head()
おそらくあなたはこれが便利だと思うかもしれません: http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/
RへのPythonインターフェース を使用して、library(foreign)
のread.spss
を使用してデータをインポートできます。