Agregador de noticias de SAS

Tall Galili administrador de R-bloggers ha creado un agregador de noticias de SAS. Ya estás tardando en suscribirte. Por cierto, un título increible: An online (unofficial) SAS® journal – written by bloggers tratándose de SAS la palabra unofficial tenía que aparecer. Por cierto, R-bloggers también agrega blogs en español y otras lenguas.

Recodificar el valor de un factor en R

Tras leer una duda planteada en la lista de R-Help en español me he animado a crear una entrada acerca de la recodificación de factores en R. Así dejo recogido algún código/truco que puede serviros en vuestro trabajo con R y que este pequeño problema no afecte a vuestra productividad. Además os acerco a la función recode del paquete car. Pero en primer lugar os planteo como recodificar factores empleando IF/ELSE:

Esto si es un gráfico interactivo

Más gráficos de burbujas, pero esta vez interactivos. Interesante exposición de Hans Rosling sobre la evolución de de la esperanza de vida en 200 países durante 2 siglos. Realmente espectacular y didáctico.

Gráficos de burbuja con R

El otro día en R-bloggers leí este post. Entonces busqué información sobre estos gráficos con R en español y sólo encontré ayuda para realizarlos con Excel. Es verdad que el enlace que os pongo es más que suficiente para realizar los gráficos de burbuja pero en pocas líneas puedo ilustrar mejor un ejemplo y proponeros varias formas de crearlo. La primera de ellas emplea la función symbols y genera el siguiente gráfico:

Montemos un sistema de información en nuestro equipo (II)

Vamos a empezar a subir archivos a la BBDD. Evidentemente lo primero que tenemos que hacer es crearnos una BBDD en Postgres. Con el PGAdmin creamos una nueva base de datos, disponemos de varias opciones, en nuestro caso no modificamos ninguna y creamos BD. Ya tenemos una BBDD funcionando y a la hora de conectarnos a ella tendremos que asignarle las propiedades necesarias para su correcto funcionamiento:

postgres-1.png

Ya tenemos dispuesta la BBDD y ya podemos empezar a subir tablas. Para ello ya os comenté que usaríamos el Data Integration de Pentaho (antes conocido como Kettle). La intención que tengo al montar este pequeño sistema de información es disponer de una serie de tablas para la realización de modelos estadísticos con R. Podría tener mi equipo lleno de ficheros de texto, de Excel y algún Access por ahí pero es eso lo que pretendo evitar, con esto me garantizo un orden y un correcto acceso a mis tablas. Para comenzar a trabajar quiero subir una tabla del repositorio de datos UCI Quiero seguir trabajando con el paquete e1071 de R y estoy analizando que tablas son las que más se adecúan a mis objetivos, para ello tendré que cargar algunas y comprobar si los datos se adecúan a mis propositos.

Montemos un sistema de información en nuestro equipo (I)

Un poco de bricolaje. Se trata de crear un sistema de información sin coste y que nos permita almacenar nuestros datos con orden y coherencia, crear informes y realizar modelos matemáticos bajo Windows. Es perfectamente replicable para Linux. También estoy abierto a sugerencias ya que tampoco soy ningún experto en el tema y podemos crear un debate interesante. El sistema que planteo se va a sustentar en 3 pilares fundamentales que os podéis descargar de forma gratuita en los link creados:

Macros (fáciles) de SAS. Número de obsevaciones de un dataset

Con esta macro podréis identificar el número de observaciones de UN CONJUNTO DE DATOS SAS. No funciona con tablas Oracle, Informix, DB2,… me gustaría dejarlo claro. Al emplear la función deI/O OPEN junto con ATTRN y CLOSE no realizamos un conteo de observaciones. Al final el proceso crea una macro variable que se llama NOBS y que podremos usar en nuestra sesión SAS.

%macro observaciones(datos);

/*EL NUMERO DE OBS LO VAMOS A METER EN UNA MV GLOBAL*/

%global nobs;

/*ABRIMOS EL CONJUNTO DE DATOS PARA VER SUS CARACTERISTICAS*/

%let datosid = %sysfunc(open(&datos));

/*SI ESTA ABIERTO ENTONCES LA FUNCION ATTRN NOS DA LA NOBS*/

%if &datosid %then %do;

%let nobs =%sysfunc(attrn(&datosid,NOBS));

/*CERRAMOS EL CONJUNTO DE DATOS*/

%let rc = %sysfunc(close(&datosid));%end;

%mend ;

Fácil y rápida. Si alguien tiene problemas con su uso que lo comunique en el blog. Seguro que es de gran utilidad. Saludos.

¿Proyectos de NOSQL en España?

Quería aprovechar que esta bitácora se lee en muchas empresas y universidades para buscar algún proyecto en NOSQL en España. Hace tiempo que estoy intererado en bases de datos no relacionales. La verdad es que no concivo una base de datos que no sea relacional, por ese mismo motivo me interesa tanto el tema. Si el paradigma del dinosaurio (yo) no es capaz de entender que aporta el NOSQL entonces es una tecnología muy a tener en cuenta.

La importancia del parámetro HASHEXP

La última entrada (de momento) sobre objetos HASH en SAS. Quiero analizar la importancia que tiene el parámetro hashexp a la hora de crear el objeto hash cuando deseamos ordenar un conjunto de datos. Para ello he realizado un experimento con SAS cuyo código podéis descargaros .aquí. Es un código de calidad muy baja pero que da como resultado el siguiente gráfico:

ejecuciones-hashexp-distintas.png

Se trata de un experimento en el que ordenamos un dataset con 7 variables y diferentes tamaños, se miden los tiempos de ordenación para exponentes 2, 5, 10 y 20. Se realizan 2 réplicas del experimento para evitar algún problema con el equipo (deberían hacerse más pero tarda mucho) y el resultado de la combinación entre tamaño-exponente nos da como resultado un tiempo de ejecución que graficamos. En el eje y del gráfico tenemos los tiempos de ejecución y en el eje x el tamaño en miles del dataset ordenado. Para cada combinación exponente-tamaño se han realizado dos ordenaciones y se han medido los tiempos. El resultado obtenido, como cabía esperar, indica que el exponente, el parámetro hashexp , tiene mucha importancia a la hora de realizar ordenaciones mediante objetos hash con SAS. En nuestro experimiento las diferencias las encontramos a partir de los 2 millones de registros y se van incrementando en función del tamaño del dataset, sin embargo en la última ejecución las diferencias parecen reducirse. Las líneas 2, 5 y 10 obtienen resultados muy similares siendo el exponente 20 el que mejores resultados ofrece.

Trucos Excel. Mapa de España por provincias

Pongo a vuestra disposición un archivo Excel que nos permite la realización del siguiente gráfico:

mapa-espana-provincias-excel.PNG

En este link podéis descargaros el archivo. He elegido formato Excel 2003 para el archivo, de este modo lo podréis utilizar muchos de vosotros. Si alguien desea el formato 2007 que lo diga. De momento es una primera versión a la que iré añadiendo un mayor número de funcionalidades. Se trata de un gráfico en el que podemos variar el color de cada una de las provincias mediante la siguiente macro:

Laboratorio de código SAS. Ordenaciones con HASH vs. PROC SORT

Hace pocas fechas vimos el código SAS empleado para la realización de ordenaciones de conjuntos de datos SAS mediante algoritmos de hash. Ya os comuniqué que era una forma más eficiente y hoy quería demostraros tal eficiencia con un laboratorio de código SAS. La situación es la siguiente, creamos un dataset con 1.000.000 de registros, 13 variables y comparamos un PROC SORT con una ordenación mediante hash, medimos tiempos y podemos determinar qué forma de ordenación es más eficiente.

Haciendo gráficos con R ¿cuáles son vuestras preferencias?

R

¿Cúal de estos gráficos de cajas os gusta más?

  • Base de R:

base.png

png('C://temp//base.png',bg = "white",

res = 100, width=450, height=600)

boxplot(Petal.Length~Species, data=iris,

main="Gráfico con Base")

dev.off()
  • Con lattice:

lattice.png

png('C://temp//lattice.png',bg = "white",

res = 100, width=450, height=600)

#Paquete lattice

require(lattice)

x<-bwplot(Petal.Length~Species, data=iris,

main="Gráfico con Lattice")

print(x)

dev.off()
  • Con ggplot2:

ggplot2.png

png('C://temp//ggplot2.png',bg = "white",

res = 100, width=450, height=600)

#Paquete ggplot

require(ggplot2)

x2 <- ggplot(iris,aes(Species,Petal.Length))

x2 + geom_boxplot() + opts(title="Gráfico con ggplot2")

dev.off()

Tres muestras del mismo gráfico de cajas realizado con R. Tres sintaxis muy sencillas pero boxplot es más fácil si cabe. Parece que estéticamente ganaría ggplot2 sin embargo todo es jugar con más opciones, pero se complicaría el código. En mi opinión creo que sale ganando ggplot2 pero no es tanta la diferencia.