savreaderwriter sav read python dataset statistics python-module spss

savreaderwriter - python read.sav file



¿Hay un módulo de Python para abrir archivos SPSS? (8)

Aquí hay paquetes que probablemente te interesen

¿Hay un módulo para que Python abra archivos de IBM SPSS (es decir, .sav)? Sería genial si hubiera algo actualizado que no requiera ningún archivo / biblioteca dll adicional.


Como una nota para los hallazgos de personas más adelante (como yo): pandas.rpy ha quedado en desuso en las versiones más recientes de pandas (> 0.16) como se indica here . Esa página incluye información sobre la actualización del código para usar la interfaz rpy2 .


Dependiendo de lo que desee hacer: procese los datos utilizando los comandos relacionados con R de rpy2 , o cambie a Python: la solución provista por @Spacedman en un hilo relacionado podría adaptarse fácilmente a sus necesidades.

De lo contrario, Pandas incluye un envoltorio conveniente para rpy2 . Este es un ejemplo de uso con el weights.sav datos weights.sav Peat and Barton''s:

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


He lanzado un paquete de python "pyreadstat" que lee archivos SPSS (sav, zsav y por), Stata y SAS. Es una envoltura alrededor de la biblioteca C ReadStat, por lo que es muy rápido. Readstat es la biblioteca que se usa en la parte posterior de la biblioteca R Haven, que es ampliamente utilizada y muy robusta.

El paquete es autocontenido. No requiere usar R (no es necesario instalar una aplicación adicional) y no depende de las DLL de IBM u otras bibliotecas externas.

Por ejemplo, para leer un archivo sav de SPSS usted haría:

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

df es un marco de datos de pandas. Meta contiene metadatos como etiquetas de variable o etiquetas de valor. read_sav lee los archivos sav y zsav (comprimidos). También hay una función read_por para archivos antiguos (portátiles).

Lo puedes encontrar aquí: https://github.com/Roche/pyreadstat


Pero la ventaja de usar las bibliotecas de IBM es que obtienen este formato de archivo binario bastante complejo. Son gratuitos, lo liberan de la carga de escribir código para este formato y la licencia le permite redistribuirlos. ¿Qué más se puede pedir?




Tenía la misma pregunta que @Pyderman sobre cómo actualizar esto para pandas (> 0.16). Esto es lo que se me ocurrió:

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