web-dev-qa-db-ja.com

SPSSファイルを開くためのPythonモジュールがありますか?

IBM SPSS(つまり.sav)ファイルを開くためのPython=のモジュールはありますか?追加のdllファイル/ライブラリを必要としない最新のものがあれば素晴らしいでしょう。

33
Lamps1829

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

16
Otto Fajardo

やりたいことに応じて、 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
_
11
chl

後でこれを発見した人へのメモとして(私のように):pandas.rpyは、pandas(> 0.16))の最新バージョンでは非推奨になっています こちら 。そのページには、rpy2インターフェースを使用するためのコードの更新に関する情報が含まれています。

9
Savage Henry

あなたがおそらく興味を持っているパッケージはここにあります

3
4ilin

しかし、IBMライブラリーを使用する利点は、このかなり複雑なバイナリー・ファイル・フォーマットを正しく取得できることです。それらは無料であり、このフォーマットのコードを記述する負担を軽減し、ライセンスによりそれらを再配布することができます。これ以上何を頼めますか?

3
JKP

これを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()
2
Courtney

おそらくあなたはこれが便利だと思うかもしれません: http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/

0
SpankMe

RへのPythonインターフェース を使用して、library(foreign)read.spssを使用してデータをインポートできます。

0
Jeromy Anglim