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

est-il un module pour Python pour ouvrir IBM SPSS (i.e. .sav) des fichiers? Ce serait génial s'il y avait quelque chose de mis à jour qui ne nécessite pas de fichiers/bibliothèques dll supplémentaires.

20
demandé sur Shoe 2013-02-01 17:07:46

8 réponses

selon ce que vous voulez faire--traiter les données en utilisant les commandes associées à R de rpy2 , ou passer à Python--la solution fournie par @Spacedman sur un thread associé pourrait facilement être adaptée à vos besoins.

dans les autres cas, Pandas comprend un emballage pratique pour rpy2 . Voici un exemple d'utilisation avec la tourbe et Barton weights.sav ensemble de données:

>>> 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
répondu chl 2017-05-23 12:17:58

comme une note pour les gens trouve plus tard (comme moi): pandas.rpy a été déprécié dans les plus récentes versions de pandas (>0.16) comme noté ici . Cette page contient des informations sur la mise à jour du code pour utiliser l'interface rpy2 .

4
répondu Savage Henry 2015-06-26 12:19:54

mais l'avantage d'utiliser les bibliothèques IBM est qu'ils obtiennent ce format de fichier binaire assez complexe droit. Ils sont gratuits, vous soulagent du fardeau d'écrire du code pour ce format, et la licence vous permet de les redistribuer. Que demander de plus?

3
répondu JKP 2013-02-03 04:52:46

voici les paquets qui vous intéressent probablement

3
répondu 4ilin 2016-09-05 08:56:46

j'ai eu la même question que @Pyderman sur comment mettre à jour ceci pour pandas (>0.16). C'est ce que j'ai trouvé:

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()
1
répondu Courtney 2016-11-02 17:17:01
0
répondu SpankMe 2013-02-01 13:14:12

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

0
répondu Jeromy Anglim 2017-05-23 11:54:39

j'ai publié un paquet python" pyreadstat " qui lit les fichiers SPSS (sav, zsav et por), Stata et SAS. C'est un wrapper 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é et très robuste.

le colis est autocontenu. Il ne nécessite pas l'utilisation de R (pas besoin d'installer une application supplémentaire) et il ne dépend pas de IBM dlls ou d'autres bibliothèques externes.

par exemple, pour lire un fichier sav SPSS vous feriez:

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 variables ou des étiquettes de valeur. read_sav lit les fichiers sav et zsav (compressés). Il y a aussi une fonction read_por pour les vieux fichiers por (portables).

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

-1
répondu Otto Fajardo 2018-08-28 10:28:23