SPSS y Python, cómo leer y escribir datos

SPSS es un programa para hacer estadística bastante popular (y propietario, IBM).

Por supuesto tiene muchas funciones de las más comunes integradas y, como en cualquier software, si tienes experiencia no es difícil ir bastante rápido en las tareas más comunes.

El problema es cuando quieres hacer algo no tan común, pero para eso se pueden hacer pequeños “pedazos de código”, scripts, en lenguajes como Python y r, siempre que estén instalados los plugins correspondientes.

Me veo en estas cosas por echar un cable (como tantas veces me lo echan a mí). La cuestión es que para calcular el valor de una variable en un registro necesitábamos acceder a otras variables de OTROS registros y hacer algunos bucles. Algo trivial en Python, pero que no acabábamos de ver cómo hacer en SPSS (quizá mi desconocimiento). El caso es que al final, después de unas cuantas vueltas y de consultar en varios sitios, conseguí encontrar la manera de leer una variable, convertirla en una lista (lo que me permite hacer los cálculos en Python que desee) y luego escribir otra lista en la variable que quería calcular.

Quizá os parezca sencillo… pero a mí me hubiera encantado encontrar este post el tiempo que anduve buscando, así que lo escribo.


BEGIN PROGRAM.

import spss                                #cabecera
spss.StartDataStep()
datasetObj = spss.Dataset()
numColumnaVar1=0               
#aquí tienes que poner el número de la columna en la que está cada variable, empezando a contar por 0
numColumnaVar2=1
numColumnaVarResultado=2
var1=[]                               
#inicializamos los arrays vacíos para luego usar el método append e ir rellenando
var2=[]
varResultado=[]
for i in range(len(datasetObj.cases)):               
#leemos ambas variables (los índices empiezan en cero)
    var1.append(datasetObj.cases[i,numeroColumnaVar1][0])   
#cases lee como si fuera un vector de un componente, así que al poner [0] elegimos el primer elemento
    var2.append(datasetObj.cases[i,numeroColumnaVar2][0])    

AQUÍ HACEMOS EN PYTHON LO QUE QUERAMOS CON LAS LISTAS QUE HEMOS CREADO var1, var2, etc.

FINALIZAMOS SUBIENDO LOS VALORES A LA VARIABLE VACÍA EN LA TERCERA COLUMNA QUE HABREMOS CREADO A MANO EN SPSS

#escribo la variable en la tabla usando el varResultado
for i in range(len(datasetObj.cases)):                   
#i es un índice que recorrerá todos los registros
    datasetObj.cases[i,numerocolumnaVarResultado]=varResultado[i]            
spss.EndDataStep()                    #finalización
END PROGRAM.

Del código que ves escrito sólo tienes que tocar los números de columna origen y destino, recordando que empieza la cuenta en cero.

numColumnaVar1=0                
numColumnaVar2=1
numColumnaVarResultado=2
Por supuesto, tendrás que repetir el código si quieres “tomar” más variables de la base de datos o si quieres al final escribir más variables como resultado.
Paso a explicaros el código paso a paso.
Todo el código está encapsulado entre las instrucciones BEGIN PROGRAM. y END PROGRAM.
“Cabecera”
import spss                                
spss.StartDataStep()
datasetObj = spss.Dataset()
Con estas instrucciones conseguimos que Python pueda tratar el conjunto de datos como un objeto, con sus correspondientes atributos (propiedades) y métodos (funciones), que serán las que usemos para extraer los valores, primero ,y subirlos, después.
Identificación de variables por columna
numColumnaVar1=0                
numColumnaVar2=1
numColumnaVarResultado=2
Usamos estas variables numéricas para luego decirle al programa de qué variables de SPSS tiene que leer los datos y en cuál escribirlos. Ojo en esta última, porque, si te equivocas, vas a sobreescribir una variable en la que podrías tener datos. Asegúrate de que está vacía y de elegir bien los números ANTES de ejecutar el código.
Lectura de datos.
for i in range(len(datasetObj.cases)):                
    var1.append(datasetObj.cases[i,numeroColumnaVar1][0]) 
Hacemos un bucle con tantas iteraciones como longitud (len) tenga la base de datos.
Añadimos cada lectura en una posición de la lista que habíamos creado para ello (var1).
Importante el [0] del final, porque cada lectura la toma como un lista, aunque sólo tenga un componente. Al añadir esto, le decimos que lea el valor de la variable i (lo tomará como lista), que elija el primer valor de esa lista de números, que sólo tiene uno (!) (el número [0]) y que lo guarde como elemento i de nuestra lista, la var1.
Si no pusiéramos que cogiera sólo un elemento nos quedaría un vector de vectores: var1= ([35],[22],[17]…)
Cuando ya tenemos las variables en Python, ya tenemos toda la libertad y facilidad que nos da programar en un lenguaje tan versátil.
Subir datos
Después de haber hecho todas las perrerías que quieras en Python, sólo te queda subir los datos que has ido añadiendo a varResultado.
Como definimos varResultado como un array vacío, en tu código acuérdate de llenarla usando el método append. Si esto te viene mal o te da problemas, inicia el array dando valores.
for i in range(len(datasetObj.cases)):                   
    datasetObj.cases[i,numerocolumnaVarResultado]=varResultado[i]
Así que hacemos un bucle en el que vamos escribiendo en cada registro (hasta completar la longitud de la base de datos) los valores calculados, en la columna elegida al principio. No tiene por qué ser sólo una variable, podéis subir tantos resultados como deseéis.
OJO DE NUEVO, que si escribís esto en una variable en la que ya tengáis datos, los perderéis.
Cerrando
spss.EndDataStep()                    #finalización
END PROGRAM.
Con esto se completa el script.
Es un código muy simple, también se pueden crear y dar formato a las variables desde Python, pero creo que un usuario básico de SPSS hace eso con la gorra y meter esto por aquí os haría más lío.
Como lo más probable es que no tengáis que crear un conjunto grande de variables, estamos hablando de que tardáis un minuto. Si necesitas automatizarlo, porque sean muchas, considera hacerlo desde Python o desde r.
El detalle de todo esto y muchas más cosas podéis encontrarlas aquí en la Python Reference Guide for IBM SPSS Statistics
Lo nuestro está en la página 55 y siguientes.
Espero que os sirva.
Juntos somos más.
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: