Segundo día en las III jornadas de R

Noviembre 18th, 2011 por rvaquerizo

Comenzamos el segundo día de las jornadas. Esto promete, el paquete brew para la automatización de informes. Una aplicación muy clara hacía el mundo empresarial.

Por cierto, la organización un 10.

¡Por fin en las III jornadas de R!

Noviembre 17th, 2011 por rvaquerizo

Ya estamos en las III jornadas. Están a punto de comenzar. Continúo en twitter. De momento la respuesta de la gente es muy positiva, la sala se está llenando (mucho).

El sobremuestreo ¿mejora mi estimación?

Noviembre 6th, 2011 por rvaquerizo

El sobremuestreo (oversampling) es una técnica de muestreo que se emplea habitualmente cuando tenemos una baja proporción de casos positivos en clasificaciones binomiales. Los modelos pueden “despreciar” los casos positivos por ser muy pocos y nuestro modelo no funcionaría. Para incrementar el número de casos positivos se emplea el sobremuestreo. Ejemplos habituales pueden ser los modelos de fraude, un 99% de las compras son correctas, un 1% son fraudulentas. Si realizo un modelo puedo estar seguro al 99% de que todas mis compras son correctas, en este caso hemos de realizar un sobremuestreo para incrementar nuestros casos de fraude y poder detectar los patrones.

Personalmente no sabría deciros el porcentaje de casos positivos a partir del cual sería necesario llevar a cabo un proceso de remuestreo. A mi particularmente me gusta hacerlo siempre. Por lo menos realizar algunas pruebas para identificar aquellas variables que son más influyentes y comenzar a eliminar aquellas que no van a funcionar. Busco exagerar. Tampoco me quiero mojar mucho sobre la proporción de casos positivos y negativos, pero si estamos realizando un nuevo muestreo podemos emplear perfectamente un 50% para ambos, aquí si que dependemos del número de registros con el que estemos trabajando ya que al final el sobremuestreo será la repetición de los casos positivos sobre la tabla de entrada del modelo.

Sin embargo, cuando ya tengo decidido como va a ser mi modelo no me gusta realizar sobremuestreo. Lo considero un paso previo (algún lector del blog considerará estas palabras incoherentes). Después de toda esta exposición teórico-práctica de malos usos de un dinosaurio  en realidad lo que cabepreguntarse es ¿mejora la estimación un modelo con sobremuestreo?

Abrimos R y Tinn-R y manos a la obr Lee el resto de esta entrada »

Tags: , , , , , ,

Comparamos los programas electorales de PP y PSOE con R

Noviembre 3rd, 2011 por rvaquerizo

Replicamos el post anterior sobre el análisis del programa electoral del PP y lo comparamos con el programa electoral del PSOE. Programas electorales que presentan estos partidos políticos españoles de cara a las elecciones del 20-N. No vamos a entrar en el contenido de ambos programas, sólo nos limitamos a representar gráficamente su contenido con nubes de palabras.

Programa del PSOE:

programa_psoe.jpg

Programa del PP:

programa_pp.jpg

Esto que véis es el análisis más completo que hay sobre los programas electorales. Lo malo (o lo bueno) es que cada uno ha de sacar sus propias conclusiones.  Yo he sacado alguna impresión interesante. A continuación tenéis el código empleado para realizar estos gráficos. Emplea la librería snippets que nos dio a conocer Jose Luis para la realización de la nube de palabras. Recordad que tenéis que guardar en modo texto los programas electorales de ambos partidos y modificar la ubicación de los ficheros:

#Análisis del programa del PP
#Leemos el fichero de una ubicación de nuestro equipo
ubicacion="D:\\raul\\wordpress\\text minning R\\programa_PP.txt"
texto = read.table (ubicacion,sep="\r")
#Dejamos todas las palabras en mayúsculas
texto = toupper(texto$V1)
#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_col$V1 = sub("([[:space:]])","",texto_col$V1)
texto_col$V1 = sub("([[:digit:]])","",texto_col$V1)
texto_col$V1 = sub("([[:punct:]])","",texto_col$V1)
#Creo una variable longitud de la palabra
texto_col$largo = nchar(texto_col$V1)
#Controles que utilizo
head(texto_col)
hist(texto_col$largo)

texto_col = subset(texto_col, largo>4)

#Nube de palabras
#install.packages('snippets',,'http://www.rforge.net/')
library(snippets)
wt <- table(texto_col$V1)
wt <- wt[wt>40]
jpeg('D:\\raul\\wordpress\\text minning R\\programa_pp.jpg', quality = 100,
bg = "white", res = 100, width=850, height=500)
cloud(wt, col = col.br(wt, fit=TRUE))
dev.off()

#Análisis del programa del PSOE
#Leemos el fichero de una ubicación de nuestro equipo
ubicacion="D:\\raul\\wordpress\\text minning R\\programa_Psoe.txt"
texto = read.table (ubicacion,sep="\r")
#Dejamos todas las palabras en mayúsculas
texto = toupper(texto$V1)
#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_col$V1 = sub("([[:space:]])","",texto_col$V1)
texto_col$V1 = sub("([[:digit:]])","",texto_col$V1)
texto_col$V1 = sub("([[:punct:]])","",texto_col$V1)
#Creo una variable longitud de la palabra
texto_col$largo = nchar(texto_col$V1)
#Controles que utilizo
head(texto_col)
hist(texto_col$largo)

texto_col = subset(texto_col, largo>4)

wt <- table(texto_col$V1)
wt <- wt[wt>40]
jpeg('D:\\raul\\wordpress\\text minning R\\programa_psoe.jpg', quality = 100,
bg = "white", res = 100, width=850, height=500)
cloud(wt, col = col.br(wt, fit=TRUE))
dev.off()

Tags: , , , , , , ,

Análisis del programa electoral del Partido Popular antes de las elecciones en España

Noviembre 1st, 2011 por rvaquerizo

Ya empleamos R en alguna entrada anterior para analizar textos. Ahora nos metemos con el programa electoral del Partido Popular a 20 días de las elecciones en España. En este link podéis descargaros el programa del Partido Popular. Lejos de lo insustanciales que suelen ser este tipo de documentos y alguna frase mítica del tipo "Crecimiento sin empleo no es recuperación" nos limitaremos a contar las palabras que emplean en este programa.

En el link donde tenemos el programa accedemos al mismo en formato PDF, seleccionamos todo el documento, lo copiamos en un archivo de texto y ya podemos trabajar con R. El código ya ha sido comentado en este blog:

#Análisis del programa del PP
#Leemos el fichero de una ubicación de nuestro equipo
ubicacion="D:\\raul\\wordpress\\text minning R\\programa_PP.txt"
texto = read.table (ubicacion,sep="\r")
#Dejamos todas las palabras en mayúsculas
texto = toupper(texto$V1)
#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_col$V1 = sub("([[:space:]])","",texto_col$V1)
texto_col$V1 = sub("([[:digit:]])","",texto_col$V1)
texto_col$V1 = sub("([[:punct:]])","",texto_col$V1)
#Creo una variable longitud de la palabra
texto_col$largo = nchar(texto_col$V1)
#Controles que utilizo
head(texto_col)
hist(texto_col$largo)

texto_col = subset(texto_col, largo>4)

library(sqldf)
contador = sqldf("
select V1 as palabra,count(*) as frec
from texto_col
where largo > 4
group by palabra
order by count(*) desc ;")

CAMBIO, POLÍTICA, SOCIEDAD y EMPLEO son las palabras más empleadas. SOCIAL aparece en la posición 50 y JÓVENES mucho más abajo. CRISIS es otra de las palabras que no son muy destacadas. Abrid R, seguid los pasos que os indico y obtendréis un análisis muy interesante. Saludos.

Tags: , , , , , ,

Chart Tools un add in imprescindible para Excel

Octubre 28th, 2011 por rvaquerizo

El add-in jk-chart tools de excel que os podéis descargar aquí nos ofrece una serie de funcionalidades que pueden ayudarnos a trabajar con gráficos en Excel. Una vez descargado y activado el add-in al seleccionar un gráfico podemos emplear este complemento. En la primera pestaña podemos añadir etiquetas personalizadas a nuestros gráficos de Excel, algo que ya realizamos con macros:

chart-tools-1.png

Basta con seleccionar la serie y elegir el rango de datos que contiene las etiquetas. Para trabajar con etiquetas tenemos otro add-in de Excel que os recomiendo que descarguéis, el XY Chart Labeler. Con Chart Tools además podemos cambiar Lee el resto de esta entrada »

Tags: ,

Trucos SAS. Operaciones con tablas de dimensiones con SAS

Octubre 25th, 2011 por rvaquerizo

Algunos llaman a las tablas de dimensiones tablas de lookup, yo me niego. Con SAS ya hemos visto como crear cruces de tablas de dimensiones con tablas de hechos a través de formatos, bajo mi punto de vista el método más eficiente. Pero hoy quería traeros un ejemplo de cruce de tabla pequeña con tabla grande a través de arrays multidimensionales con SAS. Se trata de guardar los valores de la tabla “pequeña” en un array temporal multidimensional cuando leemos la tabla grande. Para ilustrar esta tarea he preparado un ejemplo:


data aleatorio;
do i =1 to 2000;
grupo = round(1+3*ranuni(4));
importe=ranuni(34)*grupo*1000;
output; end;
run;
proc summary data=aleatorio nway;
class grupo;
output out=medias (keep=grupo importe) mean(importe)=;
quit;

Generamos un conjunto de datos SAS aleatorio con una variable grupo y una variable importe, calculamos la media del importe por grupo y deseamos medir registro a registro la diferencia con respecto a la media del grupo. Para estos casos podemos trabajar con formatos o, por ejemplo, con macro variables:


data _null_;
set medias;
if grupo = 1 then call symput('med1',importe);
if grupo = 2 then call symput('med2',importe);
if grupo = 3 then call symput('med3',importe);
if grupo = 4 then call symput('med4',importe);
run;
data aleatorio;
set aleatorio;
if grupo = 1 then dif = importe/&med1.-1;
if grupo = 2 then dif = importe/&med2.-1;
if grupo = 3 then dif = importe/&med3.-1;
if grupo = 4 then dif = importe/&med4.-1;
run;

Estoy de acuerdo en que este código se puede hacer más eficiente pero sigue siendo algo engorroso. Bien, hoy quería plantearos otra forma de hacerlo a través de arrays multidimensionales. Planteo el código, lo ejecutáis y comentamos:

data aleatorio;
array med(4,2) _temporary_;
if _n_ = 1 then do i=1 to 4;
set medias;
med(i,2) = importe;
end;
set aleatorio;
dif = importe/med(grupo,2)-1;
run;

Se trata de recorrer nuestra tabla de dimensiones, en este caso la tabla con las medias y meter su contenido en un array temporal de 2 dimensiones que denomino med, este array tiene 4 filas y 2 columnas, la dimensión de nuestra tabla de dimensiones. Posteriormente leo la tabla de hechos y empleo el campo grupo para seleccionar el elemento del array que deseo. Es un código sencillo de replicar sobre todo si nuestras variables índices (en este caso la variable grupo) son números, en otro caso el código se complica ligeramente pero sigue siendo sencillo de interpretar. Estoy seguro de que este truco SAS puede resultaros útil (sobre todo a algún pésimo jugador de golf). Saludos.

Tags: ,

Gráficos de barras y líneas en dos ejes con R

Septiembre 26th, 2011 por rvaquerizo

grafico_actuarial_r.png

Aunque no es recomendable crear gráficos con 2 ejes hoy quería mostraros un gráfico muy común realizado con R. Se trata del gráfico de barras y líneas para un factor. Las barras serán un valor de exposición del factor y las líneas pueden ser una  frecuencia siniestral y estarán en un eje secundario. Con esto crearemos nuestro gráfico de barras y líneas en dos ejes. Simulamos los datos para crear el gráfico con R:

#Numeros aleatorios de con una distribución gamma
potencia = ceiling(rgamma(1000, shape = 10, rate = 0.08))
hist(potencia)

Generamos números aleatorio con una distribución gamma con la función rgamma que asemejan a la potencia de los vehículos en caballos que se venden actualmente en el mercado español. Ahora tenemos que codificar esta potencia en un factor, para ello tenemos Lee el resto de esta entrada »

Tags: , , , , , ,

Trucos Excel. Unir varios Excel en uno

Septiembre 21st, 2011 por rvaquerizo

Tenía pendiente revisar una de las entradas más visitadas del blog. Trata la problemática de unir varios Excel en uno sólo. En el caso concreto servía para unir varios Excel generados por SAS a través de una macro en SAS. En la entrada de hoy quiero trabajar con un ejemplo que os podéis descargar aquí en formato rar. De los archivos que comparto el más interesante el que llamamos unir_varios_excel.xlsm  se trata de un archivo Excel para macros que contiene un par de macros más que interesantes. Un pantallazo de este libro de Excel:

unir_excel.png

Tiene una macro  limpia para limpiar la colunma de archivos. Una macro ficheros que se llama con el botón Listar Libros y nos permite listar los ficheros de un determinado directorio con una determinada extensión. Estos parámetros los podemos modificar en las casillas C1 y C2. Se trata de una macro que ya hemos visto con anterioridad por lo que no entraremos en profundidad Lee el resto de esta entrada »

Tags: , , ,

Univariantes de campos de nuestra BBDD con kettle

Septiembre 12th, 2011 por rvaquerizo

El kettle no sólo puede servirnos para subir y bajar tablas a nuestra BBDD. También puede ayudarnos a describir las tablas de nuestras BBDD de una forma muy sencilla. El paso Univariate Statistics será nuestro aliado para esta sencilla tarea.

transfomacion_kettle.png

Lo primero que tenemos que hacer es crear una conexión a nuestra BBDD. Hace tiempo ya hablamos de esta labor con Postgres. Una vez creada la conexión comprobamos su correcto funcionamiento y el primer paso será una Entrada Tabla donde seleccionaremos la tabla que deseamos describir:

entrada_tabla_kettle.png

El botón Obtener consulta SQL nos permite navegar de forma sencilla por los distintos esquemas de la BBDD, seleccionamos la tabla y podemos ver la consulta a realizar, por supuesto podemos manipular el código SQL a nuestro antojo. Como siguiente elemento vamos a Lee el resto de esta entrada »