Formación

Descubriendo ggplot2

Bye bye plot, bye bye points, bye bye abline,…Imagen de previsualización de YouTubeComo la canción Bye bye life. He escrito en el Tinn-R install.packages(“ggplot2”) y estoy como un niño con zapatos nuevos. Así estoy desde que he comenzado a trabajar con el paquete ggplot2 de R. No es que no lo conociera, es que me defiendo demasiado bien con mis plot y mis points. Había visto algún gráfico espectacular pero el código asustaba. Sin embargo este paquete es tema de conversación todas las semanas con algún usuario de R. Entonces me siento delante de R y tras escribir library(ggplot2)… x <- abs(rnorm(20,10,2))y <- abs(rnorm(20,5,1))grupo <- rpois(20,2)datos <- data.frame(cbind(grupo,x,y))#Gráfico de dispersióng <- ggplot(datos,aes(x,y))g + geom_point()#Identificamos los puntosg + geom_point(aes(colour = grupo)) ¿Qué os parece? Anda que no es fácil trabajar con ggplot2. Además tiene su propia web de ayuda con una gran cantidad de ejemplos ymuy documentada por lo que no es necesario un manual. Con un acercamiento y algunos ejemplos me parece suficiente.Particularmente me encantan los boxplot y además podemos añadir puntos:

La función LAG de SAS

La función LAG de SAS nos devuelve el valor de la observación n-n de la variable indicada. Me explico con un ejemplo:

data lagn;

do i=1 to 10;

lag_1=lag(i);

lag_2=lag2(i);

lag_3=lag3(i);

lag_4=lag4(i);

lag_5=lag5(i);

lag_6=lag6(i);

output;end;

run;

Esto produce:

lag.PNG LAG(i) nos da el valor de i para la observación anterior, LAG2(i) nos da el valor de las 2 observaciones anteriores,… En el caso de encontrarnos en las primeras observaciones el valor que devuelve es el missing. Con ella podemos evitar trabajar con RETAIN a la hora de hacer sumas acumuladas:

Creando un mapa en Excel con archivos SVG

Aunque me lo agradezcan poco el mapa por comunidades de Excel está teniendo un gran éxito. Mientras preparo un mapa por provincias en Excel he elaborado el siguiente tutorial para crear mapas en Excel a partir de archivos SVG. El punto de partida, disponer de Inkscape software libre para la elaboración de dibujos y Excel. Podemos buscar mapas en la wikipedia, en este caso mapa por provincias de España. Se trata de utilizar ese archivo svg y crear un Excel con objetos de ms-office que provienen del archivo svg que hemos abierto con el Inkscape. Juntamos las piezas del puzle y ya podemos trabajar con el mapa.

Stadistical data warehouse del European Central Bank con R y los depósitos a pérdidas

Más ejemplos de uso del paquete de R XML. Vamos a leer datos del data warehouse del European Central Bank. Si dais una vuelta por la web tendréis interesantes datos económicos de los países de la Unión Europea. A modo de ejemplos vamos a leer los datos de los tipos de interés medios a 12 meses que se están dando por los bancos en España y la evolución del Euribor a 6 meses. – Report Tipos: http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=124.MIR.M.ES.B.L22.F.R.A.2250.EUR.N – Report Euribor: http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=143.FM.M.U2.EUR.RT.MM.EURIBOR6MD_.HSTA

Macros SAS. Dataset a data frame R

Voy a presentaros la versión Beta de la macro de SAS que genera data frames a partir de una tabla SAS en Windows, la versión en Linux me la ahorraré hasta el día que pueda instalar SAS en mi máquina virtual. La macro la iré mejorando y evolucionando, probablemente estas mejoras no las colgaré y no retome el hilo hasta que tenga una V1. El tema es sencillo y anteriormente ya hice mención a este método pero ahora doy una vuelta de tuerca y directamente creamos data frames a partir de data sets. Os pongo el total del código y comentaré los pasos más interesantes, por supuesto es mejorable. Lo que no puedo asegurar es si funciona bajo WPS porque no me han renovado la licencia. Todo el código seguido:

Personas que no comprendo. «I hate SQL»

Mi amigo Carlos escribió esta entrada en su blog. Si fuera un manifiesto la primera de las firmas de apoyo sería la mía. Cuando programamos en SAS hemos de usar PROC SQL siempre que podamos. Fundamentalmente porque un programa puede ser usado por múltiples usuarios y en muchas ocasiones hemos de realizar migración entre aplicaciones y casi todas las personas y sistemas pueden interpretar SQL. Con este argumento si se puede hacer con el PROC SQL… En fin, esto me parece tan evidente que hoy sábado, después de acostar a mis hijos y navegar por la blogosfera encontrarme con esto es demasiado para mi.

Trucos R. Leer archivos XML con R

Un truco de R práctico que busca la colaboración de los lectores para mejorarlo. Se trata de leer ficheros xml con R. Los más asiduos ya sabéis que paquete voy a emplear, el XML. En los últimos tiempos la sentencia require(XML) aparece al principio de casi todos mis códigos en el Tinn-R. El ejemplo que ilustrará el truco lee de la BBDD del banco mundial en español el indicador de emisiones de CO2 en toneladas por habitante y año. La sintaxis es de este modo:

Trucos SAS. Mejor que hash IN para cruzar tablas

El otro día Fernando comentó que los cruces de tablas más rápidos entre tablas grandes y tablas pequeñas son las sentencias condicionales sobre listas. Tiene razón. Es una práctica muy habitual en SAS cuando leemos tablas de Oracle la ralización de listas, esto derivará en otro truco SAS en breves días. El caso es que me gustaría que probárais este código:

data grande;

do i=1 to 20000000;

idcliente=int(ranuni(0)*1000000);

drop i;

output;

end;

run;

*CONJUNTO DE DATOS PEQUEÑO, NO TIENE

 REGISTROS DUPLICADOS;

data pequenio;

do i=1 to 2000000;

idcliente=int(ranuni(34)*1000000);

drop i;

if mod(idcliente,1132)=0 then output;

end;

run;

proc sort data=pequenio nodupkey; by idcliente;quit;

*;

proc sql noprint;

select idcliente into:lista separated by " "

from pequenio ;

quit;

*;

data machea5;

set grande;

if idcliente in (&lista.);

run;

Bueno, el tiempo de ejecución de este cruce es de 3 segundos. Mejora a las soluciones planteadas el otro día y sobre todo es un código fácil, muy fácil. Se trata de crear listas de macrovariables y realizar un paso data con una sentencia condicional. Tiene un problema, el tamaño máximo que nos permite una macrovariable. Y en este punto continúa el truco SAS. ¿Cúal es el tamaño máximo que puede tener una macrovariable? 64K, 65534 characters. Tenemos que evitar a toda costa este error: ERROR: The length of the value of the macro variable LISTA (70356) exceeds the maximum length (65534). The value has been truncated to 65534 characters. Para evitar este problema podemos realizar el siguiente planteamiento: 65.000/la longitud del campo de cruce, en el caso del ejemplo: 65.000/8 = 8.000 más o menos. Hacemos una prueba:

Como abrir proyectos de Enterprise Guide corruptos o de una versión anterior

Muchos hemos sufrido este error trabajando con Enterprise Guide de SAS:

Unable to open file as a valid project file

Además de la pantalla:

eguide-version-2.PNG

De este modo «tan sencillo» podemos recuperar los códigos de nuestro proyecto de Enterprise Guide siempre que sean proyectos *.egp y no *.seg. Por cierto, para abrir proyectos de versiones anteriores tenemos el Migration Wizard de Guide, da algunas pegas prefiero este método. Un gran truco de http://www.dnmca.com

Trucos R. Establecer la configuración local de una fecha

Cuando manejamos datos las fechas nos producen muchos quebraderos de cabeza, por ejemplo cuando tenemos que transformar un caracter a fecha. En mi opinión R es una de las herramientas las flexibles y rápidas para trabajar con fechas, claro que acostumbrado a SAS cualquier otra herramienta me parece perfecta. A lo que vamos, imaginemos la siguiente situación :

?as.Date

x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")

z <- as.Date(x, "%d%b%Y")

z

[1] NA NA "1960-03-31" "1960-07-30"

Se trata de transformar un texto a fecha en R. El formato del texto es d mes en inglés año con 4 cifras. Para transformar a fecha tenemos la función as.Date que recibe como parámetros el objeto y el formato de la fecha, el más habitual sería %d/%m/%Y 10/09/1976. Para meses en formato nombre empleamos %b pero en este caso «1jan1960» nos produce un valor perdido sin embargo «31mar1960» si se transforma correctamente ¿Por qué motivo sucede esto?

Trucos SAS. Porque hay que usar objetos hash

Quiero trabajar un poco con objetos hash en SAS. Pero antes quería demostraros con una comparativa de código muy sencilla y muy rápida la necesidad de trabajar con estos objetos en SAS. La problemática es muy habitual en nuestro trabajo diario. Tenemos una tabla SAS muy grande, con millones de registros y tenemos que cruzarla con otra tabla SAS muy pequeña para quedarnos sólo con los registros que aparezcan en la tabla pequeña. Tenemos unos clientes que han recibido un contacto comercial y hemos de quedarnos con sus saldos históricos en determinados productos. Veamos los distintos métodos que planteo para machear registros, conjuntos de datos de partida:

Trucos Excel. Gráficos con caracteres

piramide-poblacional-excel.png

Quería plantear hoy un truco Excel que no es un truco como tal, si no más bien una idea para que podáis hacer más vistosos vuestros informes con gráficos de caracteres, sobre todo para aquellos dinosaurios que hagáis muchos ranking o puntuaciones. La idea es muy sencilla se trata de emplear la función REPETIR de Excel pero «con talento». =REPETIR(«|»;E12) nos repite el pipe | tantas veces como le indiquemos en la casilla E12. Pero hay algo que si tiene importancia, la fuente que elijamos para el pipe:

Trucos SAS. Matrices de adyacencia con SAS

SAS no está pensado para el cálculo matricial, pero hay ocasiones en las que hemos de trabajar con ellas. Uno de los casos típicos es la matriz de adyacencia. Se trata de partir de estos datos:

a b a e b c b e c e d a

Crear: a b c d e a 0 1 0 1 1 b 1 0 1 0 1 c 0 1 0 0 1 d 1 0 0 0 0 e 1 1 1 0 0