Scraping

He tratado de contrastar una hipótesis sin éxito, así que solo publico el subproducto

R

Inspirado por esto he tratado de contrastar una hipótesis en otro contexto.

Las cosas, o se hacen bien, o no se hacen. Como mi análisis se ha complicado con casos y casitos particulares, aunque siga pensándo cierta (en caso de tener que apostar, como priori, claro) la hipótesis de partida, abandono su búsqueda.

Como subproducto, esto:

library(xml2)
library(stringr)
library(plyr)
library(lubridate)

periodos <- expand.grid(anno = 2010:2017, mes = 1:12)
periodos$ind <- periodos$anno * 100 + periodos$mes
periodos <- periodos[periodos$ind < 201711,]
periodos <- paste(periodos$anno,
  str_pad(periodos$mes, 2, pad = "0"), sep = "_")

raw <- lapply(periodos, function(x){
  url <- paste0("http://www.eldiario.es/sitemap_contents_", x, ".xml")
  print(url)
  as_list(read_xml(url))
})

#df <- lapply(raw, function(y)
  ldply(y, function(x) as.data.frame(t(unlist(x)))))

res <- lapply(raw, unlist)
res <- lapply(res, function(x) t(matrix(x, 3, length(x) / 3)))
res <- data.frame(url = res[,1],
  time = res[,2], stringsAsFactors = FALSE)

res$time <- gsub("\\+.*", "", res$time)
res$time <- strptime(res$time,
  "%Y-%m-%dT%H:%M:%S")

res$titular <- gsub("_0_[0-9]*.html", "", res$url)
res$titular <- gsub(".*/", "", res$titular)
res$titular <- tolower(res$titular)

res$year <- year(res$time)
res$month <- month(res$time)

Igual le sirve a alguien para analizar palabras clave en titulares de ese u otro medio, su evolución por mes, etc.

Tod[rep('a', 831)]s y tod[rep('o', 6450)]s los autores de paquetes de R

R

En los últimos tiempos se ha puesto de moda un subgénero periodístico que es una manera de generar artículos de acuerdo con el siguiente algoritmo:

  1. Se toma una lista de personas.
  2. Se cuenta en ella el número de mujeres (a) y de hombres (b).
  3. Si a >= b, GOTO 1; si no, se copipega y se mutatismutandea un manido argumento.

No sabiéndome sustraer al encanto del último grito, he escrito y corrido

Madrid decide, propone, vota, etc.

De siempre, no sé por qué motivo, me interesaron esas cosas relacionadas con la democracia directa. En la feria del libro del año nosecuántos compré un libro al respecto (que presté y no me han devuelto). He seguido de cerca del desarrollo de plataformas como Agora y conozco a alguno de sus desarrolladores. Di guerrita en Suiza a los locales para que me explicasen pros, contras y funcionamientos de lo que allí tienen instalado. Estoy al tanto de los problemas que ha planteado la democracia directa en California (sobre lo que recomiendo esto). Etc.

Para los que buscáis proyectos de análisis / visualización de datos

Igual hay alguien que busca un proyecto interesante de análisis / visualización de datos. Tengo uno en mente para el que ando sin tiempo. Así que lo sugiero aquí por si alguien quiere hincarle el diente.

Consiste en:

  • Bajarse el BOE hasta cuando hay texto en formatos decentes (principios de los 90, si no recuerdo mal)
  • Extraer los 1,2,3,¿4?-gramas
  • Construir algo parecido a esto
  • Ponerme en la letra chiquita de los créditos y pagarme una cerveza

¿O no es interesante?

Embalses en España: otro ejercicio inconcluso de "web scraping"

R

Vi el otro día que alguien había conseguido datos de la entrada en funcionamiento de las presas de EE.UU. y me picó la curiosidad: ¿se podrán conseguir también para España?

La respuesta es afirmativa.

El código para bajarse (y adecentar un poco) la base de datos es:

library(XML)

## bajada de datos
tmp <- lapply(1:47,
                function(x)
                readLines(paste("http://www.seprem.es/presases.php?p=",
                                x, sep = "")))
tmp2 <- lapply(tmp, readHTMLTable)

## limpieza de datos
res <- lapply(tmp2, function(x) x[[1]])
res <- do.call(rbind, res)
res <- res[,-c(1,7)]
res <- res[!is.na(res$V2),]
res <- res[-(1:5),]

res <- data.frame(lapply(res, as.character),
    stringsAsFactors=F)
names(res) <- make.names(as.character(res[1,]))

## filtros de filas
res <- res[res$Nombre != "Nombre",]
res <- res[res$Nombre != "",]
res <- res[!grepl("Presas", res$Nombre), ]
res <- res[!grepl("DIQUE DEL", res$Nombre), ]

colnames(res) <- c("nombre", "vertiente",
    "altura", "hm3", "finalizada")
res <- res[!is.na(res$vertiente),]

## texto a numérico
res$altura <- as.numeric(gsub(",", ".", res$altura))
res$hm3 <- as.numeric(gsub(",", ".", res$hm3))
res$finalizada <- as.numeric(res$finalizada)

## más filtros (se aplican a obras que no son embalses)
res <- res[!is.na(res$hm3), ]

## los embalses en construcción no tienen fecha de
## finalización
res$finalizada[is.na(res$finalizada)] <- 2015

En cuanto a qué hacer con ellos, me limitaré a mostrar la salida de