webentwicklung-frage-antwort-db.com.de

Gibt es ein Python-Modul zum Öffnen von SPSS-Dateien?

Gibt es ein Modul für Python zum Öffnen von IBM SPSS-Dateien (d. H. .Sav)? Es wäre toll, wenn es etwas aktuelles gäbe, das keine zusätzlichen DLL-Dateien/Bibliotheken erfordert.

24
Lamps1829

Je nachdem, was Sie tun möchten - Daten mit R-bezogenen Befehlen aus rpy2 verarbeiten oder zu Python wechseln - die Lösung von @Spacedman in einem verwandten Thread kann leicht sein angepasst an Ihre Bedürfnisse. 

Ansonsten enthält Pandas einen praktischen Wrapper für rpy2 . Hier ein Beispiel für die Verwendung mit Peat und Barton's weights.sav Datensatz:

>>> 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

Als Hinweis für Personenbefunde ist dies später (wie ich): pandas.rpywurde in den neuesten Versionen von Pandas (> 0,16) als veraltet eingestuft, wie hier . Diese Seite enthält Informationen zum Aktualisieren von Code zur Verwendung der rpy2-Schnittstelle. 

9
Savage Henry

Ich habe ein Python-Paket "pyreadstat" veröffentlicht, das die Dateien SPSS (sav, zsav und por), Stata und SAS liest. Es ist ein Wrapper um die C Library ReadStat und ist daher sehr schnell. Readstat ist die Bibliothek, die in der Rückseite des R Library Haven verwendet wird. Diese Bibliothek ist weit verbreitet und sehr robust. 

Das Paket wird automatisch beibehalten. Es ist keine Verwendung von R erforderlich (keine Installation einer zusätzlichen Anwendung erforderlich) und es ist nicht von IBM-DLLs oder anderen externen Bibliotheken abhängig.

Zum Lesen einer SPSS-Sicherungsdatei würden Sie beispielsweise Folgendes tun:

import pyreadstat

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

df ist ein Pandas-Datenrahmen. Meta enthält Metadaten wie Variablen- oder Wertelabels. Read_sav liest sowohl sav- als auch zsav-Dateien (komprimiert). Es gibt auch eine Funktion read_por für alte (portable) Dateien.

Sie finden es hier: https://github.com/Roche/pyreadstat

7
Otto Fajardo

Hier sind Pakete, an denen Sie wahrscheinlich interessiert sind

3
4ilin

Der Vorteil der Verwendung der IBM-Bibliotheken besteht jedoch darin, dass sie dieses recht komplexe binäre Dateiformat verwenden. Sie sind kostenlos, entlasten Sie das Schreiben von Code für dieses Format und die Lizenz erlaubt Ihnen, sie weiterzugeben. Was könnte man mehr fragen?

3
JKP

Ich hatte die gleiche Frage wie @Pyderman, wie man dies für Pandas aktualisiert (> 0,16). Das ist was ich mir ausgedacht habe:

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
0
SpankMe

Sie könnten eine python-Schnittstelle für R verwenden und dann die Daten mithilfe von read.spss in library(foreign) importieren.

0
Jeromy Anglim