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: ,

Lecciones de economía de un ignorante. La prima de riesgo (y la madre que la parió)

Agosto 7th, 2011 por rvaquerizo

El término prima de riesgo está todo el día y a todas horas en los informativos españoles. La bolsa baja porque la prima de riesgo sube, ahora baja, ahora estamos por encima de Italia, luego por debajo, los franceses asustados,... En fin "los mercados" nos tienen asustados porque están locos, algunos llaman a esto volatilidad que suena más técnico. Y los menos puestos os preguntaréis ¿que es la prima de riesgo?  Pues aquí estoy yo para transmitir mi ignorancia. Me centro en la zona Euro.

Resulta que, los países necesitan emitir deuda para financiarse ¿el motivo? No os lo cuento porque me meto en un jardín muy peligroso sino que le pregunten a Obana. En fin, que necesitan emitir deuda soberana. Antes del Euro (el verdadero problema) los tipos que compraban esa deuda soberana estaban más preocupados en una depreciación de la moneda que en el riesgo de impago. Pero luego vino la unión monetaria en Europa y entonces pasó lo que está pasando ahora. Había que medir el riesgo de invertir en deuda de un país ya que la depreciación de la moneda no era el mayor problema, ahora los mercados tenían que calcular la probabilidad de no recuperar su inversión.

Como en todos los negocios, cuando no sabemos que hacer, hacemos un ranking. Y como país con menor probabilidad de impago aparecía Alemania. Por otro lado, la falta de talento les llevó a pensar en el gap (Valle-Inclán diría diferencia) entre  la deuda alemana y la deuda de otro país. Pero existen muchos tipos de emisiones de deuda sobre todo en función del plazo, desde meses a 30 años. Pero se emplean los bonos del estado a 10 años.

Con todo esto la prima de riesgo es la diferencia del bono a 10 años de un país con el bono aleman. Si Alemania paga un 2% por sus bonos a 10 años y España paga un 6% la diferencia es de un 4% pero se mide en valor absoluto por 100 luego la diferencia es de 400 puntos básicos. Y esto es lo que nos tiene asustados.

¿Cómo podemos seguir una serie histórica de la prima de riesgo? Por ejemplo con Bloomberg o Tradingeconomics. Tenemos que buscar Spain Government Bond 10 Year Yield y en poco tiempo entenderemos mejor qué es la prima de riesgo. En Bloomberg tenemos el GSPG10YR:IND (de momento desconozco como descargar los datos con R) y tendremos:

bono-espana-10-anos.png

Y arriba a la izquierda tenemos Add a comparison, allí ponemos GDBR10:IND trigger del bono aleman y...

prima-de-riesgo-espana-alemania.png

Eso que se ve a la derecha del gráfico con forma de embudo es lo que está llenando Telediarios y lo que está haciendo temblar a los mercados. Es la diferencia que se paga por el bono aleman (en verde) con el bono español (en naranja). En fin, creo que se explica de forma sencilla  y que tenéis mecanismos para realizar un seguimiento de esta información, por otro lado creo que no he sido duro con el sistema financiero actual que nunca se sabe quién puede leer estas líneas. Incluso me despido sin llamar cabestros a los dirigentes de los bancos centrales. Saludos.

Paquete sas7bdat de R. Me pongo con ello

Julio 26th, 2011 por rvaquerizo

En su día en esta bitácora se habló de la función sas7bdat de R. Ahora han realizado un paquete de R a partir de esa base. Lo tenéis en el blog SAS and R. De momento es experimental en el CRAN.

No solo me gustaría divulgar la noticia, en breve espero tener preparado un repaso al tema a ver si podemos "consolidar" este paquete tan interesante para los usuarios de SAS. También haré nuevas versiones de entradas anteriores para ilustrar el funcionamiento.

Sam I need new WPS evaluation license!!

Tags: ,

I concurso de análisis de datos con R

Julio 19th, 2011 por rvaquerizo

A pesar de tener la primicia (estoy de vacaciones y no leo habitualmente el correo de mi trabajo) soy el último en hacerse eco de la gran noticia de las III jornadas de R: El primer concurso de análisis de datos con R. Hay en total 1.500 € en premios que reparte el patrocinador del evento Nestoria. Nestoria es un motor de búsqueda de inmuebles que está presente en múltiples países.

Mi punto de vista sobre el concurso:

  • La creatividad para la realización de análisis. No hay un objetivo muy claro, este aspecto le da mayor interés.
  • La inclusión de variables exógenas al modelo tales como tipos de interés, tasas de morosidad,... Os recuerdo que empleéis ubiData. Sería muy interesante que la lectura de esos datos fuera automática, en el blog tenéis ejemplos.
  •  La automatización del código para su posterior implementación por parte de Nestoria.
  • La creación de informes gráficos y tabulares. Yo me orientaría a que los resultados fueran publicados vía web. Para esto tenéis a vuestra disposición el servidor en el que publico el blog.
  • El resultado del concurso puede ser un referente empresarial sobre R. Si una compañía participa y gana se convertirá en referencia sobre R en habla hispana.

Yo estoy impaciente por conocer el perfil de las personas que participarán en el concurso, ¿se animarán las empresas análiticas a participar?

What about newer competition from free, open-source alternatives like R?

Julio 16th, 2011 por rvaquerizo

El tito Goodnight está más pendiente de IBM y Oracle que de R. Está mayor el hombre, pero sigue siendo un genio y un figura. Nunca ha sido mi jefe (no porque yo no quisiera) y no comparto ni una sola de las opiniones que tiene en la entrevista que le hacen pero hay que reconocer que no se ha equivocado mucho en 40 años porque es una de las fortunas más importantes del mundo. Así que le tendré en cuenta, al fin y al cabo llevo 10 años diciento que el futuro pasa por R y empiezo a cansarme, me estoy haciendo más dinosaurio día a día.

Trucos SAS. Más usos de INFILE y PIPE directorios en tablas SAS

Julio 15th, 2011 por rvaquerizo

Puede interesarnos tener directorios y subdirectorios en tablas SAS. Es decir, tabular el resultado de un lm en Unix o poner en una tabla el resultado de un dir de MS DOS / Windows. Ya tengo ejemplos publicados a este respecto:

Pero no está mal volver a poner un truco para analizar las posibilidades del INFILE + PIPE. Vamos a hacer un DIR de todo nuestro C:\ y sacar los archivos de mayor tamaño.
*ESTA ES LA INSTRUCCION DIR QUE EMPLEAMOS,
SUBDIRECTORIOS, AUTORES, ... (?dir);
filename df pipe "dir H:\ /S /O S /Q";
*CREAMOS UNA TABLA SAS CON EL RESULTADO DE
LA INSTRUCCIÓN MS DOS;
data ZZZ_ZZZ;
infile df pad;
input todo $300.;
if _n_=1 then delete;
run;

Tenemos una tabla SAS con el resultado de nuestro dir en una variable de texto todo de 300 bytes . Podemos extraer la información que deseamos trabajando con funciones de texto de SAS:
data archivos;
keep fecha archivo GIGAS autor;
set zzz_zzz;
format fecha ddmmyy10.;
fecha=input(substr(todo,1,10),ddmmyy10.);
GIGAS=compress(scan(todo,3," "),".")*1;
GIGAS=GIGAS/(1024**3);
autor=scan(todo,4," ");
archivo=substr(todo,60,100);
if fecha=. then delete;
if GIGAS=. then delete;
run;

La variable fecha tiene el formato ddmmyy10. y es el resultado de transformar parte de nuestra variable de texto todo a número y con input darle el formato de entrada adecuado, perfecto ejemplo de transformación de texto a fecha con SAS. El tamaño es la 3 parte de la cadena de texto que se obtiene con un dir, pero como lo tenemos en bytes lo transformamos a gigas. Para extraer parte de una cadena de texto con SAS empleamos la función SCAN, otro buen ejemplo es el autor que lo podemos encontrar en la cuarta posición. Recordamos: SCAN(todo,4,” “) -> busca en todo la cadena de texto que esté en cuarta posición cuando el delimitador es “ “ un espacio en blanco. Por último tenemos el nombre del archivo que es la última parte de la cadena todo que genera el dir de MS-DOS.
Buen ejemplo para recordar un par de temas que provocan un gran número de visitas a esta web. Ahora os dejo deberes, tenéis que obtener el directorio en el que se aloja el fichero. No es baladí el tema. A ver si sois capaces, yo lo tengo hecho pero es muy complejo y “poco elegante”. Espero que a alguno de vosotros se os ocurra un mejor método.

Tags: , , , ,

Árboles de decisión con SAS Base (con R por supuesto)

Julio 12th, 2011 por rvaquerizo

Con SAS Base podemos hacer árboles de decisión porque tenemos R. Así de sencillo. Vamos a utilizar SAS para gestionar nuestros datos y R será la herramienta que utilicemos para la realización del modelo de árbol de decisión. Posteriormente emplearemos las reglas generadas por el modelo para etiquetar a nuestros clientes en SAS. Con esta entrada pretendo ilustrar una serie de ejemplos en los que comunico SAS con R. Una herramienta nos sirve para el tratamiento de datos y la otra la utilizaremos para realizar modelos que no están al alcance de SAS. Para realizar esta comunicación SAS-R os planteo la creación en SAS de ficheros de texto con las instrucciones en R y la ejecución en modo batch de R con ese código creado en SAS. Aquí tenéis punto por punto el ejemplo:

El primer paso, como es habitual, es crear un conjunto de datos SAS con datos aleatorios que nos sirva de ejemplo Lee el resto de esta entrada »

Tags: , , , ,