Todas las entradas de: cgbellosta

El futuro de la profesión

Nuestra profesión, la del estadístico que trabaja en la industria o la consultoría, está sometida a los cambios que exige el nuevo siglo. Llevo meses clamando en vano frente a un público que no escucha mis advertencias de peligro de obsolescencia. Pero un anuncio de un puesto de trabajo en un país lejano y que algunos consideran adelantado, me hace sentir reivindicado.

Atención a los requisitos meramente técnicos:

  • Escribir e interpretar queries de SQL complejas
  • Escribir e interpretar análisis de datos del tipo map-reduce usando Hadoop y Pig
  • Escribir código combinando SQL, Java, Pig y otros lenguajes de script
  • Trabajar con conjuntos de datos grandes de tipo desestructurado (varios terabytes, más de 100 millones de trnsacciones diarias)
  • Experiencia con lenguajes de script y expresiones regulares
  • Interés en matemáticas discretas y estadística
  • Experiencia transformando requisitos de negocio en sistemas informáticos

Nos adentramos en un brave new world, quiéranlo los nostálgicos del s. XX o no.

Los mejores y más útiles trucos de R

Como estamos medio de fiesta y da pareza poner en funcionamiento los engranajes del cerebro para producir ideas originales, me limitaré a apuntar un enlace en el que los usuarios han propuesto y votado sus mejores trucos de R.

Para los más perezosos, indicaré que el campeón ha sido la función str().

Y para los menos perezosos, aparecen en la lista métodos para acceder y manipular datos alojados en GoogleDocs directamente.

Ibercivis, una plataforma de computación ciudadana

Creo que es hecho conocido que existe el proyecto SETI@home, una red de ordenadores que ceden voluntarios para analizar nosequé tipo de datos para la nosequé clase de esotéricos fines. Nunca me interesó el asunto en sí, aunque sí la plataforma.

Más que el ser capaces de robarle el wifi a un marciano, el subproducto más intersante del proyecto ha sido BOINC, la plataforma de software que permite distribuir trabajos intensivos en uso de recursos computacionales a través de una red de ordenadores. Eso ha permitido la emergencia de un buen número de proyectos que lo usufructan para fines más tangibles (aunque no universalmente más útiles).

Incluso existe uno, patrocinado por la Universidad de Zaragoza, en España: Ibercivis. Tienen actualmente seis o siete proyectos en marcha que me parecen muy interesantes. Por ejemplo, el de docking de proteínas, busca medicamentos (moléculas, al fin y al cabo) que sean capaces de combinarse químicamente con una cierta proteína.

Retrotrayéndonos, las proteínas son los músculos de las células. La actividad de una célula puede medirse por el tipo de proteínas que tiene activas en su seno. Y los virus utilizan proteínas para penetrar en las células y alterar las cadenas de ADN, etc. Por eso es fundamental ser capaces de actuar específicamente sobre ellas para, por ejemplo, desactivarlas.

¿Cómo se hace eso? Con otras moléculas (medicamentos, vamos) que interaccionan con ellas, es decir; que se pegan a su estructura.

¿Qué moléculas pueden pegarse a una proteína dada? Es una cuestión de laboratorio, de intuición y de prueba y error. ¿Sólo? No. Existen otros métodos.

Para que una molécula se pegue a una proteína hace falta que tengan geometrías complementarias que permitan el enganche (a modo de mano y guante, vamos). El problema es pues, dada una proteína, encontrar una molécula con una forma geométrica dada.

Las moléculas candidatas están todas tabuladas en una base de datos que contiene, actualmente alrededor de cuatro millones de ellas. Uno puede recorrer la lista de moléculas y, una a una, con un programa informático, trasladarla, rotarla, etc. virtualmente en todas las configuraciones posibles para ver si encaja.

¿Cuánto tarda esto en un ordenador común? Aparentemente, unos cinco minutos por molécula. ¿Y los cuatro millones de ellas? Pues unos 38 años.

Pero, ¿si esta labor se distribuyese entre, digamos, 10.000 ordenadores? Pues… día y medio. Es decir, en día y medio sería posible pasar a un laboratorio una serie de moléculas candidatas para ver si, efectivamente, son capaces o no de interactuar con una proteína dada. Y, posiblemente, crear un fármaco.

¿No creéis que vale la pena castigar un poquito la CPU del ordenador con fines similares a éste?

Tres fracasos y medio con R

Hoy, mientras Raúl departía en el cuarto de al lado —él os dirá por qué y para qué— y hacía tiempo para saludarlo, me he entretenido fracasando tres veces y media en lo que abajo desarrollo. No pensaba publicarlo hasta que, reflexionando, he considerado que, a veces, más útil es una buena pregunta que algunas certezas. Inconcluso —o fracasado— puede no significar inútil o imperfecto.

Veamos en qué han consistido mis fraccionarios fracasos.

He intentado algo imposible: leer un fichero de texto de dos gigas en un ordenador de otras cuantas de RAM. Como no tenía un fichero de tal magnitud a mano, me lo he fabricado a partir de otro de cuatro meguillas:

asdf <- read.table( "fichero_de_4_megas.txt", header = T, sep = "\t" )
write.table( asdf, file = "test_data.txt", row.names = F, sep = "\t" )
for( i in 1:500 ) write.table( asdf, file = "test_data.txt", row.names = F, col.names = F, append = T, sep = "\t" )

Dos gigas, pues, de columnas de texto separadas por tabuladores en test_data.txt. Raúl seguía ocupado y he probado la opción más básica (primer fracaso):

bigdata <- read.table( "test_data.txt", header = T, sep = "\t" )

Al cabo de un rato he obtenido un error. He olvidado, por primerizo, usar system.time para ver cuánto se ha demorado el castañetazo. En la siguiente sería.

El segundo fracaso lo he cosechado con una versión más sofisticada de read.table (es decir, read.table con guirnaldas y abalorios para, como dicen los que hacen llorar a Cervantes, eficientar la lectura de datos:

bigdata <- read.table( "test_data.txt", header = T, sep = "\t", comment.char = "", colClasses = c( "numeric", "factor", "numeric", "factor", "numeric", "factor", "factor", "factor", "factor", "factor", "numeric", "numeric", "numeric", "factor", "factor" ) )

Eliminar el caracter de comentario y predefinir el tipo de columnas sólo ha servido para acelerar el momento en el que malloc se ha pegado un cabezazo contra el techo de la RAM. Fracaso dos.

A la tercera he tenido un medio éxito  —¿de qué estaría hablando Raúl tanto rato?— utilizando un paquete que publicó en CRAN un personaje de mala calaña al que no hay que creer nada de cuanto dice o escribe:

library( colbycol )
system.time( bigdata <- cbc.read.table( "test_data.txt", header = T, sep = "\t" ) )

La función cbc.read.table de este malhadado paquete rasca el disco duro durante 1.092,80 segundos y termina felizmente. Quien lea la documentación que la acompaña descubrirá que ni ha cargado datos ni ha hecho mucho más de provecho: sólo los ha almacenado en disco de otra manera. No obstante, se pueden cargar columnas individuales y hacer cosas con ellas con comandos del tipo:

col.1 <- cbc.get.col( bigdata, 1 )

No obstante, si uno trata de recomponer el conjunto de datos íntegro en memoria mediante algo parecido a

mis.datos <- sapply( 1:ncol( bigdata), function( x ) cbc.get.col( bigdata, x ) )

el ordenador inicia un encomiable pero fútil esfuerzo hacia un fracaso ineluctable. Es decir, falla. No obstante, como ha sido posible todavía hacer algo con los datos, consideraré que el fracaso, en este caso, ha sido parcial.

El cuarto ensayo ha sido un remedo de algo que leí. Tenía ganas de probar sqldf (y también SQLite, claro). ¿Que qué es SQLite? Pues es una base de datos que algunos lleváis en el bolsillo. De hecho, la llevaba un tipo que alegaba que, en bases de datos, Oracle y nada más…

Pero, retomando el hilo de nuestro tema, haciendo:

library(sqldf)
tmp <- file( "test_data.txt" )
system.time( bigdata <- sqldf( "select * from tmp", dbname = tempfile(), file.format = list(header = T, row.names = F, sep = "\t")) )

uno vuelve a toparse con el consabido error. Efectivamente, los datos se cargan en SQLite pero luego, al tratar de importarlos a R… catástrofe. Eso sí, en tan sólo 688,20 segundos.

El problema de la lectura de conjuntos grandes de datos en R es acuciante y está —manifiesta y reiteradamente— sobre la mesa. Las buenas noticias son que problemas como el que cuento, hace ocho años, se tenían con ficheros de 10 megas. Dentro de nada, esto que escribo hoy será una reliquia que se leerá con un punto de nostalgia.

Una fabulilla (sobre PRIM) con múltiples moralejas

–Érase una vez un banco…
–¿Me cuenta Vd. un cuento?
–Mismamente, señora.
–¿Quiérese, pues, decir que cuanto Vd. relate es pura ficción, no pareciéndose ni las personas (físicas o jurídicas) ni los lances de su aún inaudita historia a personas (físicas o jurídicas, respectivamente) y lances reales, casualidades éstas que pudieran derivar, según la naturaleza de su exposición, en responsabilidades legales, políticas o de otra imprevisible índole y gravedad?
–Considere para la totalidad de los efectos mi respuesta afirmativa a su más que retórica pregunta, un, como gusta decir a los eruditos en la materia, solemnísimo disclaimer.
–Prosiga entonces, que lo escucho con asombrado interés.
–Con su venia, señora. Érase pues un banco…
–¿Banco, caja de ahorros o sucursal de una entidad de crédito foránea?
–No entre en distingos, señora, que me echa a perder el disclaimer. Digamos que banco y sigamos adelante.
–Ea pues… y disculpe.
–Tal banco (aunque, para el caso, bien pudiera haber sido una caja de ahorros o, como bien puntualizaba, la sucursal de una entidad de crédito extranjera) tenía clientes que usaban tarjetas de crédito y débito para sus habituales fines. Cada que la usaban para comprar en un comercio o similar, la tal entidad se quedaba un cacho. Pero cuando sacaban con ella dinero de un cajero, la entidad debía abonar un pico.
–¿Y no cobraban las tan habituales comisiones?
–No, dado que sus fines eran benéficos para con sus depositantes.
–Permítame, si no le importa, anotar en mi PDA (o papel de apuntar) esto que me participa como ejemplo sin parangón de oxímoron.
–Tómese su tiempo y guárdelo en el sostén, que ahí quedará calentito, al socaire de las inclemencias del invierno mesetario y no se le traspapelará.
–Mullidamente archivado queda. Prosiga.
–Pues la tal benéfica institución financiera (me complazco, como ve, en reiterar la tan atinadamente identificada figura literaria) no sólo quería ganarse el cielo al que aspiran, cuando fenecen, las personas jurídicas sino que, además, no siendo tonta, quería retrasar el tránsito hasta el ulterioriorísimo de los anaqueles.
–Para lo que, sospecho, hay que facturar pasta gansa.
–No se le escapa una, señora. Efectivamente, a facturar y no ser facturada aspiraba.
–Como las no tan benéficas, ¿verdad?
–Como tales, mas con una no pequeña salvedad. En lugar de azuzar (incentivar, dicen ahora los pedagogos de nueva generación) a sus clientes mediante la introducción de siempre jugosas comisiones para que desdeñasen los cajeros, quisieron proceder de otra manera.
–Me intriga Vd. Soy toda orejas. ¿Qué novedoso plan urdieron?
–Pues plantearon el cultivar de alguna manera esas inercias a las que tan dados somos los homínidos superiores cuando menos gala hacemos de nuestro manido epíteto de racionales. No sé si me explico o si, por lo contrario, he dejado los conceptos como colgando y revoloteando en el sutil aire.
–Muy bien no se explica, pero le adivino la intención: zanahoria y no palo. ¿Es así?
–Equilicuá.
–Y eso, ¿cómo se hace?
–Hay maneras.
–¿Cuáles?
–Ahí llegaremos. Lo relevante del punto es que no las conocían.
–¿Entonces?
–Llamaron por teléfono.
–Ay, Dios mío, esto se acelera: abandonamos el planteamiento, nos adentramos precipitadamente en el nudo y preveo un galopante desenlace no apto para cardíacos y epilépticos (tales como mi difunto).
–Tranquilícese, señora, que no le va en ello el pan y hágase cargo que me escucha por falta de otro más simpático entretenimiento.
–¿A quién llamaron? ¡Dígame sin asomo de demora!
–A unos señores que entraron en el mundo de la consultoría como el uno y el dos en el país de los ceros.
–¿Para medrar y hacer dinero?
–Bien conoce Vd. el fabulario español.
–Aquí donde me ve, cursé bachillerato con aplicación y provecho.
–Eso la honra: quedan ya pocas como Vd.
–Y, dígame, ¿se parecían más al uno o al dos?
–En su estilo y, salvando las distancias, eran pura raíz de cuatro.
–Me hago cargo. ¿Y qué hicieron?
–No se lo puedo contar.
–¿Me va a dejar así, toda ganosa?
–Si me deja sobarle la PDA, puede.
–¿En la Renfe y cabe impúberes? No hay trato.
–¿Ve?
–¿Entonces?
–Le hablaré de PRIM.
–¿El de Reus?
–No, ése es Prim. Fíjese que yo he usado mayúsculas por doquier.
–Ya decía yo. Ya nadie se acuerda del general.
–Es que metió a los borbones en el tren de Irún.
–¡Falta aún hacen gentes de su temple y calibre!
–¿Sabe, ya que lo menciona, que tiene calle en el DF?
–¿Donde las putillas?
–¿Putillas? Verdaderos putones verbeneros. Pero, eso sí, aseadas: se asperjan el chumino con ladillol. Y algo de inglés hablan.
–Es de ley, teniendo la embajada de los Estados Unidos de Norteamérica a tiro de piedra.
–¿Conoce Vd.? Me sorprende.
–¡Mundo tuve! Atropellaron tanto gringo rijoso cruzando Reforma que tuvieron que poner un semáforo.
–Nos aleja tanto circunloquio del meollo de nuestra conversa. Déjeme hablarle de PRIM con mayúsculas por doquier, que del otro ya se ocuparon a trabucazos y no hay remedio.
–Siga pues. ¿Quién es ese otro PRIM?
–No es un quién sino un cómo. PRIM quiere decir Patient Rule Induction Method
–Madre mía, ¡en inglés y !
–Es que nació a medio camino de Stanford, que fue México y ahora no, y Australia. Y algún nombre había que ponerle.
–¿Y cuál es su naturaleza o condición?
–Pues verá: se trata de un algoritmo (palabra de origen árabe, para que luego digan y maldigan) de minería de datos que permite encontrar zonas del espacio muestral donde una variable objetivo tiene un comportamiento singular y sobresaliente respecto a la media.
–Su cuento está cada vez menos claro y tendrá que dignarse a ofrecerme un ejemplo meridiano.
–Para eso comencé mi historia hablándole de bancos y tarjetas. Digamos que tal banco tiene x clientes y asociadas a cada uno de ellos, tropecientasmil variables (edad, ingresos anuales, dirección, cuotas satisfechas a la Real Asociación Colombófila de la Alpujarra, etc.). Por otro lado, una variable que mide en qué grado usa, por decir algo, su tarjeta de crédito…
–Lo sigo con más interés que aprovechamiento y más perplejidad que ninguna de las anteriores…
–Pues verá, mete todas esas variables a un ordenador, así, tal cual, sin mayores contemplaciones, pulsa el pley, se toma unas cañas, regresa… ¿y qué se encuentra?
–¡Ay, qué emoción…! ¿Qué? Dígamelo, que me reconcome la intriga…
–Pues se encuentra unos hiperrrectangulillos.
–¡Nunca lo hubiese imaginado! ¿De qué pasta y hechura son los tales?
–No tienen pasta ni hechura: los hiperrectangulillos son, hablando de manera más vecina al común entender, grupos de clientes que, por una parte, son similares respecto a ciertas variables descriptivas y, por la otra, tienen un comportamiento homogéneo en cuanto a la medida objetivo, siendo ésta, a su vez, muy distinta de la media.
–Sigo sin verlo claro.
–A ver, imagine que la tal variable objetivo es el ratio o cociente entre el dinero que sacan los clientes de los cajeros y la suma de sus compras con tarjeta…
–Eh…
–Es decir, pintamos una rayica (que significa dividir), ponemos arriba la plata del cajero y abajo lo que paga con la tarjetica. Y nos fijamos en si pesa más lo de arriba que lo de abajo.
–Claro, ahora me apercibo: lo de arriba son liabilitis y lo de abajo, asets
–¡Me sorprende Vd.! Gasta un spanglish tan cacofónico como impreciso. ¡Y sin saber de lo que habla, como si fuese toda una consultora yunior con ambiciones!
Desespabilada que es una. Y sin hacer la mili, ¡fíjese!
–No es enteramente así, pero como si lo fuese. En resumen, si el cocientico es alto, el cliente es un pesado que le hace agujeros al banco (o caja de ahorros…). Si es bajo, lo contrario; y al cliente habría que darle besos en la frente.
–Cargo me hago.
–Entonces, un hiperrectangulillo contiene, pongamos por caso, a clientes de lo que otrora fue el Reino de Aragón, que ganan menos de 100.000 pesetillas al mes, que viven en casa alquilada y no tienen churrumbeles. Y resulta que éstos son, de entre los pesados, los que más.
–¡Menuda cuadrilla! Seguro que Botín los ponía tiesos a comisiones.
–Puf, ése (note que acentúo según la gramática vieja) les mandaba los sicilianos a casa…
–Bueno, ¿y qué hace un banco (o caja…) benéfico con tal hiperrectangulillo?
–Vaya por orden y no queme etapas en falso, que el diablo se nutre de ambigüedades: los consultores dan al pley, sacan los rectangulillos, los imprimen en cuartillas, clavan éstas con chinchetas en una corchera y luego, en peticomité, junto con los resabidillos del banco acuerdan qué hacer con los sujetos que contiene cada uno.
–¡A los mañicos de su ejemplo les podían rifar unos botes de malocotón en almíbar si usaban menos el cajero!
–Ahí tiene Vd. toda la razón del mundo y me quita las palabras de la boca y las ideas de las intrincadas convoluciones frontales de mi cerebro. Pero bueno, tampoco me enfado con Vd. porque con lo que iba a ilustrarla es todo viejo y reconocido de casi todos: conoce, primero, a tus clientes (y ayúdate de PRIM para tal fin) y, después, mira a ver qué haces con ellos (la rifa de los que Vd. llama malocotones es una estupenda idea propia de un avezado mercadólogo).
–¿No me diga que en la tal entindad bancaria (o…) no procedieron de tal guisa?
–Podría decirle si no fuese porque Cide Hamete Benengelí, de cuyos desorganizados papeles aprendí el cuentecillo que le relato, llegado al punto que contestaba su pregunta, derramó café sobre el legajo y se corrió la tinta. Es como si yo le contestase con la boca llena de polvorones: oiría ruido, se le llenaría el escote de migas, pero no se enteraría de nada. Además, gana Vd. con eso que, de confesarle la verdad, luego habría de matarla para que no divulgase el secreto.
–Mejor, pues, permanecer sumida en la contumaz ignorancia. Pero, dígame, eso de PRIM, siendo cosa tan fina, ¿cómo es que no se conoce más y mejor y se aplica con más diligencia y oportunidad? ¿Es acaso una de esas teorías…?
–¿Teoría? Es teoría y praxis, señora. Una praxis la mar de práctica. Tanto que puede descargársela a su computadora sin aflojar un ochavo.
–Y usarse, ¿se usa?
–¡Y tanto! Allá en París…
–¡Tierra de masones! No me vale ejemplo alguno allende los Pirineos. ¡En París! Lo que no es tradición…
–Pues sí, señora, sí, en París hay una empresa que gana dinero a espuertas con una variante de PRIM.
–Y Vd. que parece tan gabachuzo, ¿por qué no se va con viento fresco a trabajar con ellos?
–No me tiente, señora, no me tiente ni me salga con carpetovenicidades extemporáneas, que me lío la manta a la cabeza… ¡No estoy de humor!
–Tampoco se me ponga así… Disculpe, pero es que cuando me acuerdo de lo que les hicieron a Daoiz y Velarde me hierve la sangre… ¡Y eso que han pasado ya 201 años y pico de aquello!
–Dispensada… y, ¿por dónde íbamos?
–No me acuerdo, pero déjeme que le haga una pregunta: si la cosa es tan buena, ¿por qué no se la conoce más?
–Por lo de siempre: la idea está encriptada.
–¿Encriptada?
–Sí, en párrafos llenos de texto y en inglés.
–¿Sólo se encuentra en ese enlace?
–¡Qué va! De hecho, la idea aparece explicada de manera sustancialmente más accesible en la biblia de la minería de datos. Pero igualmente encriptada por el mismo y arcano procedimiento.
–¿Llama Vd. encriptar a escribir de manera ordenada y lógica?
–¿Con letras? Sí. La gente ya ha perdido la capacidad de leer texto y le abruma el negro sobre el blanco. Si quiere que algo no se se sepa, escríbalo con buena sintaxis, cuidada ortografía y lógicamente riguroso discurso.
–Vd., tan avanzado en unas cosas, parece un carca en otras.
–¡Qué va! El lenguaje escrito es cada día más ideográfico. Volvemos a los alfabetos egipcio y chino (pero con colorines). ¿No se da cuenta?
–No me había apercibido, pero si Vd. lo cree así… ¡será!
–Y eso que el nuestro fue ideográfico en sus orígenes, ¿sabía? El progreso mal entendido cela corrientes regresivas…
–¡Ni que siguiese Vd. a Donoso Cortés en tuiter!
–¿Sabía Vd. que la letra A representaba una vaca?
–No tenía conocimiento.
–¿Se lo demuestro?
–Venga, ¿cómo?
–Haga el pino y yo profiero la A mayúscula.
–¿A la de tres?
–A la de tres: uno…, dos…, ¡tres! AAAAAAAAA
–Ya.
–¿La ha oído boca abajo?
–Talmente. Igualica que una res. ¡Alberga Vd. saberes güikipédicos!
–Y Vd. tiene las enaguas hechas un zarrio.
–Es la crisis. Y Vd., poco cababallero, por mirar.
–Pues sepa Vd. que cada civilización giró la susodicha letra noventa grados hasta que la dejó boca abajo, como colgada de una viga.
–Esta digresión erudita nos aleja del meollo de su fabulita, ¿sabe?
–Convengo, pero en su esencia, moralejas y todo, la doy por finiquitada. ¿Cree que le aportará provecho?
–No lo descarto, aunque su natural campo de aplicación resulta, cuando más, tangencial a mis domésticos y consuetudinarios quehaceres.
–Ya siento haberle dado la chapa, pero, o participaba mi fabulilla o me ésta me reconcomía por los adentros.
–No se me ponga así. ¿Quiere medio clines?
–No es para tanto; además, he de apearme: veo acercarse un revisor.
–¿Viaja sin billete?
–Es norma de la empresa: por recortar gastos, no paga el kilometraje.
–Entiendo.
–Tenga Vd. buen día.
–Igualmente, fue un placer.

Probando R sobre el EC2 de Amazon

Hacía tiempo que quería probarlo. Menos en las grutas pobladas de seres del siglo anterior, todo el mundo habla del EC2.

Entre otras muchas cosas que iré explorando más adelante, el EC2 de Amazon te alquila un servidor por horas. También te ofrece espacio de disco a unos precios de risa y otras cosas más que bien podrían mandar al paro a departamentos enteros de IT. Pero hoy, de momento, sólo me interesaba el servidor, alquilar un servidor por un rato.

Tengo un pequeño programa en R que resuelve un complicado problema de combinatoria, una especie de sudoku en el que hay que sentar a gente en sillas de acuerdo con una serie de normas. No lee datos de ningún sitio y la salida es un fichero pequeño. Pero podría freír la CPU de mi portátil si lo ejecutase en local.

Repasaré y dejaré, pues, constancia de lo hecho y conseguido:

Primero me he dado de alta en el servicio a través de http://aws.amazon.com. He dado mis datos, mi tarjeta de crédito, etc. y me han llamado al teléfono que les he dado: la voz de una señorita grabada en casete me ha pedido un código que me habían pasado previamente. Se lo he dado y me ha llegado un mensaje de confirmación.

En mi primer paseo por EC2 me he apoyado en dos páginas, una de Ubuntu y otra más genérica. Para interactuar con los servidores de Amazon hacen falta unos certificados de seguridad con claves privada y pública, etc. que esos tutoriales explican cómo gestionar mejor de lo que podría hacer yo. Pero en esencia, lo que hay que hacer es lo siguiente:

1) Descargarse los ficheros de los certificados (el certificado y la clave) de la sección “Security Credentials” de la página de Amazon.

2) Guardarlos en el lugar adecuado y crear una llave privada usando el comando ec2-add-keypair. Yo la he llamado ec2-keypair (lo hago constar para que queden claros comandos posteriores).

En Amazon EC2 hay muchos tipos distintos de servidores dependiendo del hardware, del software y de la ubicación. Ubicaciones hay tres: dos en EE.UU. y otra en Irlanda. Plataformas de hardware, también, otras tres: buena (1 núcleo de 32 bits, 1,7GB de RAM y 160GB de disco por 10 céntimos de dólar la hora), mejor y requetemejor (8 CPUs de 64 bits, 15GB de RAM y 1.690GB de disco por 0.76 céntimos de dólar por hora).

Dependiendo del software, hay la tira.  Hay Ubutus, Fedoras, Suses, Debians, OpenSolaris de varias versiones. Hay algunas que vienen ya con ciertos componentes de sofware montados: Drupal, Apache, R, WordPress, Postgres, LAMP, RoR, SugarCRM, etc. En total, he contado 4101 de ellas. Por no faltar, no faltan, para las abuelillas, máquinas con Windows (pero son más caros).

El comando

carlos@kropotkin:~$ ec2-describe-images -a

te permite ver todas. De hecho, para elegir una, he lanzado

carlos@kropotkin:~$ec2-describe-images -a | egrep i386 | egrep ubuntu | egrep karmic

para seleccionar una máquina, la ami-19a34270, de 32 bits con Ubuntu Karmic Koala, el mismo sistema operativo que tengo en local. Luego, con el comando

carlos@kropotkin:~$ ec2-run-instances ami-19a34270 -k ec2-keypair

he levantado mi instancia (y he puesto el taxímetro a correr).  Y con

carlos@kropotkin:~$ ec2-authorize default -p 22

he abierto el puerto 22 (el de ssh) para poder acceder remotamente a la máquina. El comando

carlos@kropotkin:~$ ec2-describe-instances

me ha permitido conocer la URL de mi servidor, ec2-274-192-183-237.compute-1.amazonaws.com, al que he accedido como root mediante

carlos@kropotkin:~$ ssh -i /home/carlos/.ssh/ec2-keypair.pem root@ec2-274-192-183-237.compute-1.amazonaws.com

Usando sftp de la forma

carlos@kropotkin:~$ sftp -oIdentityFile=/home/carlos/.ssh/ec2-keypair.pem root@ec2-274-192-183-237.compute-1.amazonaws.com:/root

he subido mi programa de R al servidor y una vez en él, después de curiosear por directorios y ficheros para ver si lo que tenía entre manos era, realmente, una cuenta root de una máquina más que decente, lo de siempre:

root@ec2:~# apt-get install r-base
root@ec2:~# R CMD BATCH src.R
root@ec2:~# tail -f src.Rout

Es decir, instalar R y correr mi pequeño programa, src.R, en remoto.

Al cabo de 807 segundos (y 10 céntimos de dólar) ya tenía mis resultados. Así que he cerrado mi sesión y he parado el taxímetro mediante

carlos@kropotkin:~$ec2-terminate-instances i-b7c282df

Simpático, ¿verdad?

Otro día tengo que probar el almacenamiento, hadoop, los web services y alguna cosa más de esas por las que en España no voy a facturar jamás un euro.

Migrando de SAS a R

Estoy ayudando a unos colegas a migrar de SAS a R. Están lejos, en un país de vino y carne al que alguna vez he de ir. Hemos quedado en que si alguna vez borran el último de sus SAS del disco duro, los ayudo gratis. Si no, cuando vaya, me tendrán que pagar hasta el último peso en lifaras y libaciones.

Tienen procesos que ejecutaban en SAS. Algunos los iban reescribiendo en R. Se sienten más cómodos en SAS pero cuando éste se queda corto, recurren a R. Es una aproximación “todo o nada”.

Existe una estrategia más eficiente y más, término de moda, vírica. Porque es posible correr R y SAS conjuntamente en un mismo proceso. El objetivo es muy evidente: ir sustituyendo progresivamente código SAS por código de R hasta que no quede nada del primero.

Hay manuales de migración de Windows a Linux y multitud de descripciones de casos de éxito.  A ver cuándo podemos crear una guía similar (junto con multitud de casos de éxito) de migraciones a entornos de trabajo analíticos libres y verdaderamente productivas.

Minería de datos con R: un pequeño paseo

Éste es mi primer monográfico. Como soy más perezoso que Raúl y peor estudiante que nadie, en lugar de hacerlo yo, lo copio. Y en lugar de desarrollarlo en su totalidad, dejo más de la mitad como deberes.

Y es que he encontrado un pequeño programa en R que repasa una serie de técnicas clásicas de minería de datos a modo de paseo. Está en inglés y tal vez alguien (es la tarea que propongo a algún voluntarioso lector del blog) se anime a traducirlo. De hacerlo, me comprometo a darle alojamiento y publicidad respetando las debidas atribuciones.

Viene acompañado de una presentación que parece que casi habla de otra cosa. Fea o bonita, está escrita con Beamer (para los no iniciados: Beamer es lo que el Ministerio de Trabajo no quisiera nunca que se popularizara: mandaría al paro a esas hordas de pepeteros que pueblan las oficinas menos productivas).