savreaderwriter - python read.sav file
¿Hay un módulo de Python para abrir archivos SPSS? (8)
Aquí hay paquetes que probablemente te interesen
savReaderWriter en Bitbucket
savReaderWriter 3.4.2 en Python Package Index Repo
¿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?
Podría usar una interfaz de python para R y luego importar los datos utilizando read.spss
en la library(foreign)
.
Quizás pueda encontrar esto útil: http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/
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()