Trucos

Trucos Excel. Repetir filas con DESREF

desref repetir filas excel

En respuesta a una cuestión planteada por una lectora en una entrada muy parecida a esta podemos usar la función de Excel DESREF para repetir registros el número de veces que deseemos. Como sabemos DESREF parte desde una celda referenciada y nos movemos FILAS y COLUMNAS en función de los parámetros. La sintaxis es DESREF(CELDA DE REFERENCIA; FILA; COLUMNA) de modo que si ponemos DESREF(A1;0;1) haremos referencia a la celda B1 o bien si ponemos DESREF(A1;1;0) hará refrencia a la celda A2. Para repetir lo que haremos será algo de este estilo:

Mapas municipales de España en R, con la ayuda de Excel

municipios extremadura R 1

El escribir sobre el BDT de Madrid me ha hecho recordar mi trabajo con statial data de R. Los mapas de spatial data los podemos obtener de forma gratuita de http://www.gadm.org/country y en este caso vamos a descargarnos para España un SpatialPolygonsDataFrame específico para R de nivel 4 que está a nivel municipal (repito nivel todas las veces necesarias), el archivo que os debéis descargar se llamará ESP_adm4.RData. Si buscáis un poco en google encontraréis documentación acerca de este tipo de archivos de R y veréis que se pueden hacer maravillas. En este caso quiero hacer un ejemplo lo más sencillo posible, muy artesanal y casero. Con un poco de imaginación podréis complicarlo o incluso hacer una herramienta en Excel que hiciera mapas con R.

Trucos SAS. Calcular percentiles como Excel o R

Alguna vez habréis calculado un percentil en Excel o en R y os saldrá distinto de SAS. Esto se debe a que los métodos de cálculo son distintos tanto R como Excel utilizan el mismo método consistente en una interpolación en función de la distancia entre los registros que dan la posición del percentil. SAS dispone de 5 métodos distintos para calcular el percentil y por defecto emplea el número 5 y ninguno de los 4 métodos restantes es el que utilizan R o Excel. Pero podemos programar el método de un modo sencillo, cuesta más entender porque no lo implementa SAS que calcularlo. A continuación tenéis una sencilla macro que calcula el percentil con el método de Excel:

Truco Excel. Gráfico de puntos con colores

Un gráfico de dispersión en Excel en el que los puntos puedan ser identificados si pertenecen a un grupo. Es una duda que plantearon hace unos días en el blog. Con otras herramientas es bastante sencillo, pero en el caso de Excel la tarea no es tan evidente. Para poder hacer gráficos de este tipo he construido una macro que podéis utilizar si previamente la adaptáis a vuestros datos. El código que podéis adaptar una vez halláis creado vuestro gráfico de dispersión es:

Truco Excel. Formatos condicionales para crear rango de colores

Un truco de Excel poco ortodoxo. Aprovechar los colores que nos ofrece un formato condicional sin necesidad de emplear el formato condicional para crear un rango de colores. Parece un trabalenguas pero puede ser muy útil cuando trabajamos con Visual Basic. En mi caso particular es muy útil disponer de estas paletas de colores para hacer mapas mucho más vistosos. El truco es muy sencillo empezamos por escribir números del 1 hasta el número de colores que deseamos y elegimos el formato condicional a aplicar:

PROC FCMP para crear funciones en SAS

Unas pinceladas del PROC FCMP para SAS. Este procedimiento nos permite crear nuestras propias funciones que posteriormente podremos utilizar en nuestras sesiones de SAS. yo he programado mucho en SAS y tengo que decir que no utilizo mucho este procedimiento por la propia filosofía de SAS. Al final siempre se tiende a crear una macro antes que una función, pero hay que reconocer que el lenguaje macro de SAS en ocasiones no es sencillo y muchos olvidamos el PROC FCMP. En mi caso concreto hago unas macros muy enrevesadas antes que programarme una función. Para ilustrar el ejemplo de uso vamos a crear una función dif_anios para determinar la diferencia en años entre dos fechas SAS. El código es:

Medir la importancia de las variables en una red neuronal con R

Sigo a vueltas con esta gran web y hoy vamos a medir la importancia de las variables en una red neuronal. Al igual que sucede en un modelo de regresión los parámetros obtenidos pueden servirnos para determinar la importancia de una variable dentro del modelo. En el caso de una red neuronal los pesos de la red pueden ser utilizados para determinar cómo influye una variable en el modelo. Para ilustrar este tipo de tareas el gran @beckmw realizó esta entrada:

Determinar la distribución de un vector de datos con R

Para determinar la distribución que sigue un vector de datos en R contamos con el paquete rriskDistributions. Este paquete de R nos permite realizar un test para las distribuciones siguientes:

• Normal
• Logística
• Uniforme
• Gamma
• Lognormal
• Weibull
• Cauchy
• Exponencial
• Chi-cuadrado
• F
• T-Student

Todos aquellos que estén trabajando con los modelos de supervisión de riesgos seguramente conocerán este paquete y si no lo conocen espero que lean estas líneas porque pueden ser de mucha ayuda para ellos, aunque se trate de software libre, no pasa nada, no receléis de R. La sintaxis es tan sencilla que se puede resumir en:

Trucos SAS. Calcular una edad

No penséis que restar dos fechas y obtener una diferencia en años entre ellas es un tema baladí. Ejecutad el siguiente código SAS para calcular la diferencia en años:

data uno;
format fecha1 ddmmyy10.;
do fecha1= 9000 to today();
output;
end;
run;

data uno;
set uno;
format fecha2 ddmmyy10.;
fecha2="15MAY2014"d;

edad = int((fecha2-fecha1)/365.25);

run;

data uno;
set uno;
if month(fecha1)=5 and day(fecha1)=15;
run;

Visualizad el conjunto de datos uno, la serie de edad asusta 28,28,27,25,24,24,… Está claro que algo falla. Hace ya tiempo que hablamos de ello en este mismo blog. Los ceros y los unos con los que guardan estas máquinas las cosas a veces nos juegan estas malas pasadas. Para evitar este problema os sugiero que empleéis la función de SAS YRDIF con la base ‘AGE’. Replicamos el ejemplo:

Truco SAS. Gráfico de correlaciones

Un truco SAS interesante para representar matrices de correlaciones. El ejemplo es muy sencillo, pero previamente tenéis que crear el conjunto de datos SAS para ilustrar el ejemplo. Así que lo primero que hay que hacer es ir a este enlace y copiar el código necesario para crear el conjunto de datos SAS auto. Una vez tenemos ese conjunto de datos de 74 observaciones y 12 variables sólo tenemos que emplear el PROC CORR con una sintaxis muy sencilla:

Truco Excel. Pasar de número con formato AAAAMMDD a fecha con fórmulas

Tenía que transformar un número en formato AAAAMMDD a una fecha en Excel. Tenía que concatenar varias funciones y he pensado que a lo mejor a alguno de los lectores del blog podría interesarle. Se trata de utilizar la función de Excel FECHA con RESIDUO y ENTERO pero con cierto talento. Partimos del una fecha 20140225 y realizamos la siguiente sucesión de fórmulas:

  • Año: ENTERO(C6/10000)
  • Mes: RESIDUO(ENTERO(C6/100);100)
  • Día: RESIDUO(C6;100)
  • Todo junto en una fórmula: FECHA(ENTERO(C6/10000);RESIDUO(ENTERO(C6/100);100);RESIDUO(C6;100))

Ahí tenéis un truco interesante por si os encontráis en la misma situación que yo. Saludos.

Espacios en SAS

Las funciones SAS más habituales para eliminar blancos son las que tenéis en la figura de arriba. Para llegar a ese conjunto de datos SAS hemos ejecutado el siguiente paso data:

data ejemplo;

st = "  Cuando  brilla   el sol    ";
l_st=length(st); output;

funcion="COMPRESS     "; st1 = compress(st);
l_st1=length(st1); output;

funcion="COMPBL";  st1 = compbl(st);
l_st1=length(st1); output;

funcion="TRIM";    st1 = trim(st);
l_st1=length(st1); output;

funcion="TRIMN";   st1 = trimn(st);
l_st1=length(st1); output;

funcion="STRIP";    st1 = strip(st);
l_st1=length(st1); output;

funcion="SRTIP+COMBBL"; st1 = strip(compbl(st));
l_st1=length(st1); output;

run;

Distintas formas de eliminar espacios dentro de una cadena de caracteres en SAS. Partimos de la variable string » Cuando brilla el sol » y empleamos las siguientes funciones:

Análisis del discurso de navidad del Rey de España 2013

Me llena de orgullo y satisfacción mostraros un ejemplo de uso de la librería wordcloud para la realización de nubes de palabras con R. Esta entrada no es muy innovadora porque ya tenemos alguna similar en el blog. Lo primero que tenéis que hacer es descargaros el discurso del Rey y ejecutad este código:

#Lectura del archivo
ubicacion="C:\\temp\\juancar.txt"
texto = read.table (ubicacion,sep="\r")

#Dejamos todas las palabras en mayúsculas
texto = toupper(textoV1)
#El texto lo transformamos en una lista separada por espacios
texto_split = strsplit(texto, split=" ")

#Deshacemos esa lista y tenemos el data.frame
texto_col = as.character(unlist(texto_split))
texto_col = data.frame(texto_col)
names(texto_col) = c("V1")

#Eliminamos algunos caracteres regulares
texto_colV1 = sub("([[:space:]])","",texto_colV1)
texto_colV1 = sub("([[:digit:]])","",texto_colV1)
texto_colV1 = sub("([[:punct:]])","",texto_colV1)
#Creamos una variable longitud de la palabra
texto_collargo = nchar(texto_colV1)

#Quitamos palabras cortas
texto_col = subset(texto_col,largo>4)

#Nube de palabras
#install.packages('wordcloud')
library(wordcloud)
library(RColorBrewer)
pesos = data.frame(table(texto_colV1))

#Paleta de colores
pal = brewer.pal(6,"RdYlGn")

#Realizamos el gráfico
png('C:\\temp\\Discurso del rey españa 2013.png', width=500, height=500)
wordcloud(pesosVar1,pesosFreq,scale=c(4,.2),min.freq=2,
max.words=Inf, random.order=FALSE,colors=pal,rot.per=.15)

dev.off()

Interesante el uso de la librería RColorBrewer. Particularmente me gusta mucho el resultado que nos da wordcloud para la realización de las nubes de palabras con una sintaxis sencilla. Considero imprescindible el uso de ramdom.order=FALSE. Espero que os sea de utilidad.