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 »

Análisis de textos con R

Septiembre 5th, 2011 por rvaquerizo

Vamos a replicar un ejemplo ya presentado con WPS en esta misma bitácora. Tratamos de hacer algo tan sencillo como contar palabras y para ello empleamos de nuevo un debate del Congreso de los Diputados de España. Estas intervenciones las transformamos en un fichero de texto que vosotros podéis descargaros de   este link. Bien, partimos de un archivo de texto de Windows y con él vamos a crear un data frame de R que contendrá las palabras empleadas en esa sesión del Congreso español. Pasamos a analizar el código empleado:

#Leemos el fichero de una ubicación de nuestro equipo
ubicacion="D:\\raul\\wordpress\\text minning R\\datos\\intervencion_congreso.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")

Está bien comentado en el código, pero repetimos. Leemos el archivo de texto con una sóla variable y donde el retorno de carro es el separador, en R el retorno de carro es \r. Con toupper ponemos Lee el resto de esta entrada »

Tags: , , , ,

Números aleatorios con SAS

Agosto 27th, 2011 por rvaquerizo

En un sólo paso DATA quiero mostraros las funciones más habituales para generar números aleatorios con SAS. Una entrada para que os copiéis el código y lo analicéis con SAS. Quiero que sirva de guía para que recordéis las funciones más empleadas, además será muy útil para los que se estén iniciando en el uso de SAS:

 
data aleatorios;
drop a b raiz n p;
raiz=20;
do i=1 to 2000;
* DISTRIBUCIÓN UNIFORME;
uniforme = ranuni(raiz);
* ALEATORIO ENTRE 2 NUMEROS;
a=2; b=10;
aleatorio_entre = a+(b-a)*ranuni(raiz);
* NORMAL(0,1);
normal = rannor(raiz);
* NORMAL(a,b);
normal_a_b = b*rannor(raiz)+a;
* POISSON MEDIA a;
poisson = ranpoi(raiz,a);
*BINOMIAL TAMAÑO n Y PROBABILIDAD p;
n=10; p=0.5;
binomial_n_p = ranbin(raiz,n,p);
* EXPONENCIAL 1;
exponencial_1 = ranexp(raiz);
* GAMMA(a);
gamma_l = rangam(raiz,a);
* VALORES ALEATORIOS ENTRE 1 Y 5 CON PROBABILIDADES p1 p2 ...;
valores = rantbl(raiz,0.3,0.1,0.2,0.2,0.6);
output;
end;run;
 

Tags:

Trucos R. De string a data.frame de palabras

Agosto 9th, 2011 por rvaquerizo

Manejo de textos con R en este truco. Partimos de un vector de string y deseamos dividir ese string en palabras y posteriormente crear un data frame de una sola columna con tantos elementos como palabras tenga nuestro vector de cadenas de texto. Es decir, vamos a transformar un texto en una tabla de palabras. Veamos una posible situación:
#Este es nuestro elemento inicial
texto=c("Este es el elemento ","que me gustaría"," poner en una tabla")
#Tenemos que generar un data frame con con las palabras
#que componen este vector
texto_split = strsplit(texto, split=" ")
texto_columnas = data.frame(unlist(texto_split))

Un código sencillo donde destaca el uso de la función strsplit para crear una lista de palabras con los elementos del vector inicial. Es importante el uso de unlist para realizar el proceso correctamente. Con estas 3 líneas podemos hacer cosas muy interesantes los lectores habituales ya sabrán por donde voy y como obtener los debates del Congreso de los Diputados. Saludos.

Tags: ,