R
TelegRam[.]me!
Telegram es un sistema de mensajería por internet similar a WhatsApp, aunque con algunas diferencias notables:
- No es de Facebook
- Una vez tienes una cuenta, puedes usarla desde distintos dispositivos (Linux incluido)
- Tiene menos usuarios
- Es programable
De lo último es ilustración esta “conversación” que tuve con la cuenta @TeleR:

Los detalles, aquí. Y el crédito, para Rubén Tobalina.
Taller de mapas con R el 14 de abril en Madrid
Mi entrada de hoy es para anunciar un taller de mapas con R que tendrá lugar el día 14 de abril de 18 a 21 horas en Martina Cocina (cómo llegar).
Lo impartirá Beatriz Martínez, socióloga dedicada a la investigación social y de mercados, que ha trabajado en numerosos proyectos: desde investigación digital al desarrollo rural o programas de inclusión social. Está especializada en la la visualización de datos. Algunos de sus trabajos pueden verse en visualizados.com.
Pues sí: un curso de redes sociales con R
Debido a la positiva acogida de la propuesta para organizar un curso de redes sociales con R… pues se va a hacer.
- Cuándo: Los días 9 (jueves), 15 y 22 (miércoles ambos) de abril, de 18:00 a 20:30-21:00 horas.
- Lugar: Las cuevas de MartinaCocina (Cascorro 11, 28005 Madrid).
- Programa: Las partes 1-6 de este tutorial. Se completará en modo taller resolviendo por el camino las dudas que surjan y discutiendo los conceptos que aparecen en él. No tiene formato de clase magistral. Se espera la participación activa de los asistentes.
- Prerrequisitos: Cierto conocimiento de R es recomendable. Sospecho que no será provechoso para quienes, cuando menos, desconozcan los rudimentos de la programación (no necesariamente en R).
- Otras consideraciones: Las plazas son limitadas. Probablemente quede quien no pueda asistir. Por eso se espera de quienes obtengan una plaza un mínimo compromiso y seriedad, es decir, asistencia.
- Registro: Aquí. En unos días se cerrará el registro y, de exceder el aforo, se procederá a un sorteo para asignar las plazas; véase el punto anterior sobre la seriedad, el compromiso y la asistencia.
Compresión con SVD
lo he creado con
library(png)
tmp.file <- tempfile()
download.file("http://datanalytics.com/uploads/greco.png", tmp.file)
m <- readPNG(tmp.file)
svd.m <- svd(m)
filtra.svd <- function(svd, k){
tmp <- svd
tmp$d[(k+1):length(tmp$d)] <- 0
res <- tmp$u %*% diag(tmp$d) %*% t(tmp$v)
res[res > 1] <- 1
res[res < 0] <- 0
plot(1:2, type='n', xlab = "",
ylab = "", xaxt = "n", yaxt = "n",
main = paste(k, "primeras componentes", sep = " "))
rasterImage(res, 1, 1, 2, 2)
}
layout(matrix(1:9, 3, 3, byrow = T))
sapply(c(1,2,3,5,10,15,20,30,50),
function(k) filtra.svd(svd.m, k))¿Un curso de redes sociales con R?
Se me ha propuesto organizar un curso, taller o similar de redes sociales y su análisis con R. De nuevo, presencial.
Mi propuesta —dado que soy lego en el asunto— es organizar un taller basado en este. Ahí va mi propuesta: en una serie de sesiones en MartinaCocina plantamos un proyector y una pizarra y entre todos vamos avanzando en el tutorial y resolviendo las dudas colaborativamente.
Por supuesto, el asunto no estaría planteado como clase unidireccional en el que alguien habla y explica y los demás asienten. Más bien, como un taller de pares que aprenden y que a la voz de ya estamos todos pasamos al siguiente asunto.
Datos en formato largo y melt
En ocasiones uno recibe datos no muy distintos de
aragon <- read.table("http://datanalytics.com/uploads/pob_aragon",
header = T, sep = "\t")
aragon
# Provincias Periodo Hombres Mujeres
# 1 Huesca 2014 113840 111069
# 2 Huesca 2004 107961 104940
# 3 Teruel 2014 71449 68916
# 4 Teruel 2004 71073 68260
# 5 Zaragoza 2014 471675 488436
# 6 Zaragoza 2004 441840 455510Los mismos datos en formato largo son:
library(reshape2)
aragon.largo <- melt(aragon, id.vars = c("Provincias", "Periodo"))
aragon.largo
# Provincias Periodo variable value
# 1 Huesca 2014 Hombres 113840
# 2 Huesca 2004 Hombres 107961
# 3 Teruel 2014 Hombres 71449
# 4 Teruel 2004 Hombres 71073
# 5 Zaragoza 2014 Hombres 471675
# 6 Zaragoza 2004 Hombres 441840
# 7 Huesca 2014 Mujeres 111069
# 8 Huesca 2004 Mujeres 104940
# 9 Teruel 2014 Mujeres 68916
# 10 Teruel 2004 Mujeres 68260
# 11 Zaragoza 2014 Mujeres 488436
# 12 Zaragoza 2004 Mujeres 455510Si eso de datos largos (o en formato largo) no te suena, pierde un momento en:
format( "www.R-project.org", year = 2015)
Tal fue el asunto del correo en el que Martin Maechler anunció el lavado de cara de la página de R acontecido hace unos pocos días. Es muy revelador el argumento year = 2015: los usuarios de hoy en día ya no toleramos caóticas yuxtaposiciones de cualquier cosa que algunos llaman páginas de internet.
Los usuarios de hoy en día no tenemos tiempo de buscar y rebuscar. Nos molestan los tropezones. Nos molesta la complejidad innecesaria.
¿Cuál es la "mejor" manera de ordenar un dataframe?
El título de esta entrada es una pregunta honesta. Yo siempre he utilizado order así:
iris[order(iris$Petal.Length),]Y para ordenar por dos (o más columnas), así:
iris[order(iris$Petal.Length, iris$Petal.Width),]Es a lo que estoy acostumbrado. Sin embargo, la construcción anterior desconcierta a quienes dan sus primeros pasos en R. dplyr dispone de la función arrange con una sintaxis un tanto más natural:
library(dplyr)
arrange(iris, Petal.Length, Petal.Width)pero, de nuevo, puede resultar desconcertante tener que recurrir a paquetes avanzados: ¿es conveniente introducir a los principiantes en el proceloso mundo de los paquetes para la simple y muy natural operación de ordenar un dataframe?
Todos contra todos
¿Cómo se suman los cuadrados de un vector de números en un paradigma tradicional de programación? Se crea un bucle que lo recorre y que guarda las sumas parciales en un acumulador. Sumamente económico en términos de memoria: apenas consume unos pocos bytes en la pila. La versión funcional de la cosa se parece más a sum(x^2), que implica generar un vector de cuadrados y dilapidar memoria.
Así las cosas, en C uno tiende a recorrer y construir resultados parciales. R invita a crear estructuras de datos preprocesados y aplicar sobre ellas funciones resumen. Map y reduce, si se quiere.