Colusión de anunciantes en perjuicio de navegantes

O algo así. Aunque alguno puede pensar que no es en su perjuicio sino en su beneficio. A saber. Solo que con collusion (un plugin para el navegador) uno puede construir gráficos tales como que significa lo que su leyenda dice y que aquí traduzco brevemente. Uno instala en plugin y comienza a navegar por internet. Al hacerlo, collusion detecta esos sitios con los que las páginas que uno visita comparte información a través de galletitas y similares. Algunos de esos sitios pueden ser inofensivos (al parecer, Renfe se ha enterado de que he entrado a marca.es) y otros, los marcados en rojo, pertecen a redes de anunciantes. Más propiamente, a redes de seguimiento de navegantes, que tratan de inferir su perfil para… proporcionarles anuncios a medida, supongo. Estos sitios no solo saben que uno ha aterrizado en una página determinada, sino que pueden seguirlo a través del resto de los sitios que comparten información con él. Por eso en la red que genera collusion aparecen nodos de centralidad elevada (¡hubs!) que corresponden a sitios que colocan sus galletitas por doquier (y previo pago). ...

10 de abril de 2014 · Carlos J. Gil Bellosta

El lenguaje de Wolfram (según Wolfram)

En el siguiente vídeo Wolfram habla del lenguaje de Wolfram. Siento repetirme, pero quiero dejar claro que puede haber un sesgo. Porque como no lo haya, el Sr. Wolfram me va a tener como admirador (y puede que hasta como cliente). Mirad lo que cuenta: ¿Es o no casi increíble?

4 de abril de 2014 · Carlos J. Gil Bellosta

Predictores con varianza casi nula, inflación, loterías y línea de comandos

Hoy viernes vuelvo a traer a mis páginas cuatro enlaces interesantes. El primero de ellos es como las malas películas: un arranque espléndido, un planteamiento prometedor y, al final, humo. Pero no trata de chico-conoce-chica sino de qué hacer con esas variables que tienen una varianza casi nula (a la hora de crear modelos estadísticos, se entiende). Me llegó tan oportunamente que pensé que alguien que vela por mí desde lo alto me lo enviaba para sacarme de mi semanal atolladero. Pero no fue el caso. ...

28 de marzo de 2014 · Carlos J. Gil Bellosta

Cuatro enlaces sobre R: Excel, C++, CSV y paralelización

Hoy traigo a mis páginas cuatro enlaces que apuntan a recetarios y tutoriales sobre la solución a cuatro problemas que pueden encontrar los usuarios de R: Conectar R y Excel Importar grandes ficheros CSV (y falta LaF) Integrar R con C/C++ Paralelizar código con snow ¡Espero que os resulten útiles!

21 de marzo de 2014 · Carlos J. Gil Bellosta

Guarjolización de fotos con R

Inspirado en esto aunque con la intención de mejorar el horrible código adjunto, escribí el otro día esto: library("biOps") library("cluster") # leo una foto usando readJpeg de biOps # el objeto devuelto es un array mxnx3 dimensional # la última dimensión es el rgb de cada pixel tmp <- tempfile() download.file("http://blog.guiasenior.com/images/Retrato_Garber.jpg", tmp) x <- readJpeg(tmp) # si quieres mostrar la foto como un gráfico... #plot(x) # convertimos el array 3D nxmx3 en uno 2D (nm)x3 # luego buscamos 5 clústers # esencialmente, buscamos 7 "píxels representativos" d <- dim(x) clarax <- clara(array(x, dim = c(d[1] * d[2], d[3])), 7) # reemplazamos cada rgb de cada cluster por su # "píxel representativo" (medioide) correspondiente rgb.clusters <- clarax$medoids[clarax$cluster,] # convertimos la matriz resultante en un array 3D # (invirtiendo la transformación anterior) # y representamos gráficamente plot(imagedata(array(rgb.clusters, dim = d))) Obviamente, podéis cambiar la foto y hacer variar el número de clústers. Pero conviene recordar que: ...

10 de marzo de 2014 · Carlos J. Gil Bellosta

Macros sintácticas con R

Creo que muchos hemos tropezado con las macros alguna vez. Yo conocía las del preprocesador de C o el tinglado que tiene SAS. Y nunca fui muy amigo de ellas. Pero el otro día leí Stop Writing JavaScript Compilers! Make Macros Instead y se me alargaron los dientes. Así que he buscado información adicional hasta hacerme una idea de la diferencia entre una macro que se limita a reemplazar texto, una macro procedural —como las del lenguaje PL/I, antecesor e inspirador de SAS— y las sintácticas, como las que tiene Lisp (¿cuándo tendré tiempo para aprenderlo en condiciones?). ...

16 de enero de 2014 · Carlos J. Gil Bellosta

Mis copias de seguridad

Por referencia mía y de otros, voy a dejar acá escrito y explicado cómo gestiono mis copias de seguridad. Porque los discos duros se rompen y los ordenadores desaparecen. Etc. Primero, mi instalación: tengo un ordenador de bajomesa (tiramisu) y un netbook (kropotkin). Ambos corren la misma versión de Xubuntu, la última estable. Mi primera línea de defensa contra las pérdidas de información es la sincronización de ambas máquinas. Aquellos directorios que contienen cosas que no quiero perder (documentos, fotos, código, ¡copias de seguridad de otras máquinas, incluido esto que lees ahora!, cosas que no son documentos en desarrollo, etc.) se guardan en el directorio .bck de ambos ordenadores. Los directorios que veo son enlaces blandos (vía ln) a subdirectorios de .bck. ...

21 de agosto de 2013 · Carlos J. Gil Bellosta

Mi definición de "big data"

No sin descaro, me atrevo a aportar una definición alternativa a eso que llaman big data y que yo traduzco en ocasiones como grandes datos. No obstante, para comprenderla, considero necesaria una pequeña digresión de dos párrafos —con la que muchos, espero, no aprenderán nada que no traigan ya sabido— sobre los lenguajes de programación declarativos e imperativos. En los primeros, programar consiste esencialmente en escribir con cierta notación aquello que quieres: la suma de los elementos de un vector, el promedio de los valores de una columna de una tabla, la suma de los saldos de los clientes de Soria, etc. El intérprete se encarga de servirte los resultados en la proverbial bandeja. ...

10 de julio de 2013 · Carlos J. Gil Bellosta

data.table (II): agregaciones

Sigo con mi lacónica serie sobre data.table. La protagonista: frases[sample(1:nrow(frases), 3),] #pos.es pos.en length.es length.en en es frase tfe qjilm num #1: 15 43 72 72 i de 2632 4.881416e-02 0.01369863 6.686871e-04 #2: 33 48 46 48 X países 5321 2.726146e-06 0.02040816 5.563563e-08 #3: 2 35 53 66 in preguntar 4582 2.424379e-08 0.01492537 3.618476e-10 dim(frases) #[1] 6340091 10 El tiempo: system.time({ setkey(frases, "frase", "es") denominadores <- frases[, sum(num), by = key(frases)] setnames(denominadores, c("frase", "es", "den") ) frases <- merge(frases, denominadores) frases$delta <- frases$num / frases$den }) #user system elapsed #5.628 0.208 5.841 En particular, ...

9 de mayo de 2013 · Carlos J. Gil Bellosta

Dependencias funcionales en R con foodweb

El otro día tropecé con un problema de rendimiento con R y al utilizar Rprof() encontré muchas llamadas a funciones que yo no hacía directamente. La principal sospechosa era la función daply (del paquete plyr) que parecía depender de bastantes otras. Uno puede navegar el código de las funciones para identificar esas dependencias, pero, mirad qué maravilla: library(mvbutils) library(plyr) foodweb(find.funs("package:plyr"), prune = "laply") genera Ahí se ve la dependencia de daply con respecto a laply. Y uno adquiere, además, una visión panorámica del paquete plyr. ...

8 de mayo de 2013 · Carlos J. Gil Bellosta