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.
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
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
.
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
Voici les forfaits qui vous intéressent probablement
savReaderWriter sur Bitbucket
savReaderWriter 3.4.2 dans le repo d'index de paquet Python
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?
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()
Vous trouverez peut-être cela utile: http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/
Vous pouvez utiliser une interface python pour R puis importer les données en utilisant read.spss
dans library(foreign)
.