web-dev-qa-db-fra.com

Existe-t-il un module Python pour ouvrir les fichiers SPSS?

Existe-t-il un module permettant à Python d’ouvrir les fichiers IBM SPSS (i.e. .sav)? Ce serait génial s'il y a quelque chose de mis à jour qui ne nécessite pas de fichiers/bibliothèques dll supplémentaires.

24
Lamps1829

Selon ce que vous souhaitez faire - traiter les données à l'aide des commandes R/connexes de rpy2 , ou passer à Python - la solution fournie par @Spacedman sur un thread associé peut facilement être adaptée à vos besoins Besoins. 

Sinon, Pandas inclut un wrapper pratique pour rpy2 . Voici un exemple d'utilisation avec le fichier weights.sav data de Peat and Barton:

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

En guise de remarque à l'intention des utilisateurs, ceci plus tard (comme moi): pandas.rpy est devenu obsolète dans les dernières versions de pandas (> 0.16), comme indiqué ici . Cette page contient des informations sur la mise à jour du code pour utiliser l'interface rpy2

9
Savage Henry

J'ai publié un paquet python "pyreadstat" qui lit les fichiers SPSS (sav, zsav et por), Stata et SAS. C'est une enveloppe autour de la bibliothèque C ReadStat, donc c'est très rapide. Readstat est la bibliothèque utilisée à l’arrière de la bibliothèque R Haven, qui est largement utilisée et très robuste. 

Le paquet est autocontenu. Il n’est pas nécessaire d’utiliser R (pas besoin d’installer une application supplémentaire) et cela ne dépend pas des dlls IBM ni d’autres bibliothèques externes.

Par exemple, pour lire un fichier de sauvegarde SPSS, procédez comme suit:

import pyreadstat

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

df est une base de données pandas. Meta contient des métadonnées telles que des étiquettes de variable ou des étiquettes de valeur . read_sav lit les fichiers sav et zsav (compressés). Il existe également une fonction read_por pour les anciens fichiers por (portables).

Vous pouvez le trouver ici: https://github.com/Roche/pyreadstat

7
Otto Fajardo

Voici les forfaits qui vous intéressent probablement

3
4ilin

Mais l’avantage de l’utilisation des bibliothèques IBM réside dans le fait qu’elles obtiennent ce format de fichier binaire plutôt complexe. Ils sont gratuits, ce qui vous évite de rédiger du code pour ce format et la licence vous permet de les redistribuer. Que pourriez-vous demander de plus?

3
JKP

J'ai eu la même question que @Pyderman sur la façon de mettre à jour ceci pour les pandas (> 0.16). Voici ce que je suis venu avec:

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

Vous pouvez utiliser une interface python pour R puis importer les données en utilisant read.spss dans library(foreign).

0
Jeromy Anglim