37

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

4

9 に答える 9

34

SPSS (sav、zsav、por)、Stata、SAS ファイルを読み込む Python パッケージ "pyreadstat" をリリースしました。これは C ライブラリ ReadStat のラッパーであるため、非常に高速です。Readstat は、広く使用され、非常に堅牢な R ライブラリ Haven の背後で使用されるライブラリです。

パッケージは自動で含まれています。R を使用する必要はなく (追加のアプリケーションをインストールする必要はありません)、IBM dll やその他の外部ライブラリに依存しません。

たとえば、SPSS sav ファイルを読み取るには、次のようにします。

import pyreadstat

df, meta = pyreadstat.read_sav("/path/to/sav/file.sav")

df はパンダのデータフレームです。メタには、変数ラベルや値ラベルなどのメタデータが含まれます。read_sav は、sav ファイルと zsav (圧縮) ファイルの両方を読み取ります。古い port (ポータブル) ファイル用の関数 read_por もあります。

ここで見つけることができます: https://github.com/Roche/pyreadstat

于 2018-08-22T10:39:06.330 に答える
11

やりたいことに応じて ( rpy2から R 関連のコマンドを使用してデータを処理するか、Python に切り替えます)、関連するスレッドで@Spacedman によって提供されるソリューションは、ニーズに合わせて簡単に調整できます。

それ以外の場合、Pandasには の便利なラッパーがrpy2含まれています。以下は、Peat と Barton の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
于 2014-01-01T20:54:32.310 に答える
9

後でこれを見つけた人のためのメモとして(私のように):ここpandas.rpyに記載されているように、パンダの最新バージョン(> 0.16)では廃止されました。このページには、インターフェイスを使用するためのコードの更新に関する情報が含まれています。rpy2

于 2015-06-26T12:19:54.947 に答える
3

しかし、IBM ライブラリを使用する利点は、このかなり複雑なバイナリ ファイル形式を適切に処理できることです。これらは無料で、この形式のコードを書く負担から解放され、ライセンスにより再配布が許可されています。これ以上何を尋ねることができますか?

于 2013-02-03T04:52:46.440 に答える
1

おそらく、これが役に立つかもしれません: http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/

于 2013-02-01T13:14:12.363 に答える
0

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

于 2013-04-15T10:40:42.687 に答える