Archivo de la categoría: Monográficos

Montemos un sistema de información en nuestro equipo (III)

Vamos a conectar R a nuestra BBDD postgres. Lo vamos a hacer vía ODBC con el paquete de R RODBC [inciso] recordad que todo el trabajo lo estamos realizando bajo Win. Además trabajar con ODBC nos permitirá conectar nuestro postgres con Access o Excel. Aunque para este tipo de tarea recomiendo el uso del Data Integration de Pentaho. El primer paso será descargarnos de esta dirección los controladores ODBC para Postgres que se adecúen con nuestro S.O. y nuestra versión de postgres. Tras instalarlos ya podemos ir a las Herramientas Administrativas Orígenes de Datos ODBC e introducimos un nuevo DSN de sistema y de usuario:

sinfo_casero7.png

Ya tenemos un origen de datos ODBC para nuestra BBDD de postgres llamado PostgreSQL30. Podemos crear la conexión con R:

library(RODBC)
con = odbcConnect("PostgreSQL30",case="postgresql")

Ya tenemos conectado R con nuestra BBDD y podemos realizar consultas sobre ella:

datos = sqlQuery(con,"SELECT * FROM red_wine")

Seleccionamos todos los campos de la tabla red_wine que cargamos en el capítulo anterior del monográfico. También estamos en disposición de subir a nuestro postgres los objetos de R que deseemos:

#Creamos una muestra aleatoria de 100 registros
selec = sample(1:nrow(datos),100)
muestra = datos[selec,]
#Subimos a la BBDD postgres el data frame de R
sqlSave(con,muestra)

Vemos que la función sqlSave nos permite guardar en la BBDD aquellos objetos de R que consideremos necesarios. En pocos pasos estamos construyendo herramientas para que nuestro equipo tenga un pequeño sistema de información. Este sistema se sustenta en tre pilares fundamentales: Postgres, Data Integration de Pentaho y R. Software libre.

Montemos un sistema de información en nuestro equipo (I)

Un poco de bricolaje. Se trata de crear un sistema de información sin coste y que nos permita almacenar nuestros datos con orden y coherencia, crear informes y realizar modelos matemáticos bajo Windows. Es perfectamente replicable para Linux. También estoy abierto a sugerencias ya que tampoco soy ningún experto en el tema y podemos crear un debate interesante. El sistema que planteo se va  a sustentar en 3 pilares fundamentales que os podéis descargar de forma gratuita en los link creados:

  • Postgres:
  • Será nuestro motor de BBDD relacionales. Seguramente no haremos un modelo de datos complicado e incluso nos dedicaremos a llenar la BBDD con tablas de todo tipo sin mucha conexión entre ellas pero es necesario tener una BBDD.

  • Data integration de Pentaho:
  • Será la herramienta que empleemos para subir datos al servidor. También podremos emplearla para realizar informes.

  • R:
  • Que puedo más puedo decir sobre R. El futuro.

Para la realización de informes he comentado la posibilidad de emplear Pentaho pero puede ser más adecuado emplear una hoja de cálculo. Para esto yo si me gasté dinero y dispongo de Excel, pero intentaré trabajar con Google Spreadsheet. El primer paso es descargarse cada una de las herramientas que propongo. Tanto Postgres como R nos lo descargamos y lo instalamos, el Data Integration de Pentaho no requiere instalación, nos descargamos el archivo, lo descomprimimos y para arrancarlo tenemos el script spoon.bat R no plantea muchos problemas para instalarse en un equipo local de Windows y Postgres puede dar algún problema en Windows 7, si alguien los tiene que los reporte para ayudar a solventarlos y así quedan documentados en el blog. La instalación dePostgres nos pedirá la contraseña del admin, ojo con esta contraseña.

En la siguiente entrega comenzaremos a trabajar con Postgres y Pentaho. Por supuesto, como he comentado antes, cualquier aporte será bienvenido. Saludos

La importancia del parámetro HASHEXP

La última entrada (de momento) sobre objetos HASH en SAS. Quiero analizar la importancia que tiene el parámetro hashexp a la hora de crear el objeto hash cuando deseamos ordenar un conjunto de datos. Para ello he realizado un experimento con SAS cuyo código podéis descargaros .aquí. Es un código de calidad muy baja pero que da como resultado el siguiente gráfico:

ejecuciones-hashexp-distintas.png

Se trata de un experimento en el que ordenamos un dataset con 7 variables y diferentes tamaños, se miden los tiempos de ordenación para exponentes 2, 5, 10 y 20. Se realizan 2 réplicas del experimento para evitar algún problema con el equipo Seguir leyendo La importancia del parámetro HASHEXP

Laboratorio de código SAS. Ordenaciones con HASH vs. PROC SORT

Hace pocas fechas vimos el código SAS empleado para la realización de ordenaciones de conjuntos de datos SAS mediante algoritmos de hash. Ya os comuniqué que era una forma más eficiente y hoy quería demostraros tal eficiencia con un laboratorio de código SAS. La situación es la siguiente, creamos un dataset con 1.000.000 de registros, 13 variables y comparamos un PROC SORT con una ordenación mediante hash, medimos tiempos y podemos determinar qué forma de ordenación es más eficiente.

Si disponéis de una versión de SAS superior al 9.1 me gustaría que ejecutarais las siguientes líneas. No es un código muy complejo pero si alguien tiene dudas en su funcionamiento o le gustaría profundizar más en lo que hace que comente el mensaje, no lo hagáis vía correo electrónico porque tengo muchos mensajes en cola y poco tiempo para responder. El código para la realización de este experimento ya lo hemos visto en mensajes anteriores y es el siguiente Seguir leyendo Laboratorio de código SAS. Ordenaciones con HASH vs. PROC SORT

Objetos hash para ordenar tablas SAS

A partir de la versión 9.1 de SAS se incluyeron los objetos HASH. Hace tiempo ya demostramos su eficiencia en el cruce de tablas y hoy quería mostraros como se programa una ordenación empleando HASH. La verdad es que estoy saboreando mis últimos días con SAS v9.2, en breve volveré a una versión muy anterior. El codigo, en mi opinión, es muy sencillo y como es habitual tenemos ejemplo ilustrativo que comentaré a continuación:

*DATASET DE PRUEBA;
data uno;
array v(10);
do i=1 to 5000000;
importe=ranuni(mod(time(),1)*1000)*10000;
do j=1 to 5;
v(j)=ranuni(34)*100;
end;output;end;
run;
*REALIZAMOS LA ORDENACION CON HASH;
data _null_;
if 0 then set uno;
declare hash obj (dataset:'uno',hashexp:20,ordered:'a') ;
obj.definekey ('importe');
obj.definedata(all:'YES');
obj.definedone () ;
obj.output(dataset:'dos');
stop;
run;

Importante: sólo funciona en versiónes posteriores a la 9.1

Empleamos data _null_ y una sentencia condicional para que lea el dataset que deseamos ordenar. Con DECLARE creamos el objeto hash OBJ del dataset uno e indicamos que ha de estar ordenado ‘a’scendentemente, podríamos ordenar ‘d’escendentemente. Al parámetro HASHEXP le vamos a llamar exponente hash y determina el número de cubos en el que vamos a repartir la tabla hash, en este caso 2**8=256 cubos, es un parámetro muy importante para que este proceso sea eficiente. Definimos la KEY con DEFINEKEY y Seguir leyendo Objetos hash para ordenar tablas SAS

Mapas con spatial data de R

colombia13.jpgespania1.jpgmexico1.jpg

Vamos a hacer mapas de México, España y Colombia con R. Y lo primero que tenemos que hacer es disponer de un objeto de R con los datos del mapa. Estos datos los vamos a obtener de http://www.gadm.org/country Seleccionamos el país y el formato que deseamos descargar. Para ilustrar nuestros ejemplos vamos a descargarnos los mapas de España, México y Colombia en formato R data. Vemos que tenemos distintas divisiones en función del nivel al que deseemos llegar. En este caso seleccionamos nivel 2 para España y nivel 1 para Colombia y México. Los hemos descargado a nuestro equipo, mejor descargarlo que no acceder a la web, y comprobamos que tengan extensión Rdata los archivos. Una vez tengamos los archivos con su formato, su extensión y demás ya podemos trabajar con ellos y vamos a trabajar con el paquete sp spatial data:

#install.packages("sp")
library(sp)
ub_colombia="C:\\temp\\00 Raul\\04_software\\mapas\\COL_adm1.Rdata"
ub_mexico="C:\\temp\\00 Raul\\04_software\\mapas\\MEX_adm1.RData"
ub_espania="C:\\temp\\00 Raul\\04_software\\mapas\\ESP_adm2.RData"
#Creamos los objetos de R
load(ub_colombia)
colombia=gadm
load(ub_mexico)
mexico=gadm
load(ub_espania)
espania=gadm

Evidentemente modificad la ubicación de los archivos. Seguir leyendo Mapas con spatial data de R

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.

El paso 0 es abrir Excel y el svg con el Inkscape. En el Inkscape seleccionamos la provincia a copiar:

paso-1.PNG

Vemos que al seleccionar la provincia ésta se recuadra y aparecen una serie de flechas. Tras copiar nos dirigimos a Excel y pegamos tal cual:

paso-2.PNG

Hemos pegado una imagen. Y aquí viene uno de los puntos más importantes, si deseamos modificar la imagen se modificará el recuadro completo, nosotros queremos modificar sólo el dibujo de la provincia y esto se consigue convirtiendo la imagen a objeto de ms-office y esto lo hacemos Seguir leyendo Creando un mapa en Excel con archivos SVG

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

Vamos a generar el siguiente gráfico comparativo:

interes-vs-euribor.PNG

Comenzamos el trabajo con R:

require(XML)
pag="http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=124.MIR.M.ES.B.L22.F.R.A.2250.EUR.N"
depos=readHTMLTable((((pag))))
#str(depos)
#Creamos un data frame legible
aux1=data.frame(depos[6])
#Eliminamos títulos
aux1=aux1[4:nrow(aux1),]
#Prefiero trabajar con 2 df
mes=as.vector(aux1$NULL.V1)
#Transformo un factor de R a número
valor=as.data.frame(as.numeric(
levels(aux1$NULL.V2)[aux1$NULL.V2]))
#Creo el df final
depos=data.frame(cbind(mes,valor))
#No quiero factores por ningún sitio
depos$mes=as.character(depos$mes)
str(depos)
names(depos)=c("mes","interes")
head(depos)

Es un código sucio, no me he preocupado mucho por él. Con la función readHTMLTable leemos la tabla del report que nos ofrece el BCE. STR es muy importante porque nos quedaremos Seguir leyendo Stadistical data warehouse del European Central Bank con R y los depósitos a pérdidas

Detalles técnicos del seguro de crédito. El factor de uso del importe concedido

El seguro de crédito me sigue pareciendo muy interesante técnicamente y de vez en cuando hay que dedicarle alguna entrada en el blog. Voy a recordar viejos tiempos escribiendo sobre el factor de uso del importe concedido. Nos ponemos en antecedentes, en el seguro de crédito el riesgo es el impago de una transacción comercial. Las empresas que lo contratan tienen que disponer de información muy exacta de las ventas a crédito a sus clientes a los que llamaremos deudores. Esta información ha de estar en posesión de la compañía aseguradora que cubre la operación ya que en caso de siniestro define la cantidad máxima a indemnizar al asegurado (importe siniestral). Es decir, el asegurado “comunica” a la aseguradora el importe de la venta a su deudor y la aseguradora asume el riesgo de impago sobre un porcentaje del total, tiene un porcentaje garantizado. Un inciso, las aseguradoras de crédito, además, ofrecen información sobre deudores, gestión de recobros,… Pero la función fundamental del seguro de crédito es asumir el riesgo de impago de las transacciones de los deudores con sus asegurados; esta función es imprescindible para el desarrollo de un país, así de claro.

Pero las compañías aseguradoras de crédito se encuentran con un “problema”, es casi imposible ajustar el importe concedido a los deudores con el importe real de la venta. La aseguradora dispone de ventas globales de los asegurados, no por deudor. Además es común entre los asegurados vender por un importe menor del importe concedido, ¿por qué? porque la aseguradora garantiza un porcentaje del importe de la venta, no el total. Si no se produce el impago no conocerá el importe de la venta, la tendencia de los asegurados es asegurar ventas mayores para, en el caso de impago de su deudor, el porcentaje garantizado sobre la venta cubra la práctica totalidad de la venta. Es un poco lioso pero es una postura “muy española”, un ejemplo para facilitar la comprensión del problema:

A vende a B, C y D por valor de 100.000 € al año. La aseguradora tiene un % de garantía de las ventas del 80%. A cubre con nuestra compañía las ventas a B por 30.000 € el resto de operaciones no las cubre, luego tiene un importe concedido de 30.000 €. Si A tiene un siniestro por impago de B tendría que recibir 30.000×80% = 24.000 €, sin embargo A “miente” en sus ventas y vende por valor de 25.000 €, es decir, en realidad usa el 83% del importe condedido. A este % lo llamaremos factor de uso del importe concedido. Técnicamente es una medida de gran importancia para el seguro de crédito, ya que es una medida del importe expuesto al riesgo en las transacciones  imprescindible para la estimación de los importes siniestrales. De ahí su importancia técnica ¿Cómo calcular este factor de uso? Esto es lo problemático, si el concepto puede ser duro su estimación provoca el llanto a más de un técnico. Algún día contaré como nos podemos aproximar a este factor de uso. Saludos.

Monográfico. Funciones INTNX e INTCK para fechas en SAS

Las funciones INTNX e INTCK de SAS atraen muchas visitas a esta web. Aunque ya hay algún mensaje en el que muestro como funcionan creo que algunos trabajadores me agradecerán este monográfico. INTNX e INTCK son funciones para trabajar con fechas en SAS. INTNX sirve para trabajar con periodos luego el resultado que ofrece será una fecha e INTCK sirve para trabajar con intervalos, luego el resultado que nos ofrece será un número entero. Esta es la premisa fundamental. Entonces:

  • Si queremos calcular el número de meses entre 01-01-2002 y el 02-04-2003 empleamos INTCK porque el resultado será 3 meses.
  • Si queremos añadir 5 meses al 01-01-2002 empleamos INTNX porque el resultado será una fecha.

Creo que así queda más claro. INTCK nos devuelve un valor entero e INTNX nos devuelve una fecha. Quedando claro esto a ver ejemplos:

Sumamos 2 años a una fecha:


data _null_;
f1="03MAY2005"d;
f2=intnx("year",f1,2);
format f2 ddmmyy10.;
put f2 ;
run;

IMPORTANTE: INTNX en este caso no ha funcionado como cabía esperar. El resultado es 01/01/2007, inicia a 1 de enero siempre. Siempre me gusta empezar con este ejemplo, motivo, para justificar que, en la medida de lo posible, no utilicemos esta función. ¡¡Pues vaya castaña de monográfico!! Seguir leyendo Monográfico. Funciones INTNX e INTCK para fechas en SAS