El número efectivo de partidos

El número efectivo de partidos es el nombre de una página de la Wikipedia, que contiene la fórmula $$ N = \frac{1}{\sum_i p_i^2}$$ y excipiente alrededor. Aplicada a España (usando datos del CIS como proxy), Como casi siempre, el código: library(rvest) library(rvest) library(reshape2) library(plyr) library(zoo) url <- "http://www.cis.es/cis/export/sites/default/-Archivos/Indicadores/documentos_html/sB606050010.html" raw <- read_html(url) tmp <- html_nodes(raw, "table") tmp <- html_table(tmp[[2]], fill = TRUE) colnames(tmp)[1] <- "partido" tmp <- tmp[!is.na(tmp$partido),] tmp <- tmp[1:30,] tmp <- melt(tmp, id.vars = "partido") tmp <- tmp[tmp$value != ".",] tmp$value <- as.numeric(tmp$value) tmp$variable <- gsub("ene", "01-", tmp$variable) tmp$variable <- gsub("abr", "04-", tmp$variable) tmp$variable <- gsub("jul", "07-", tmp$variable) tmp$variable <- gsub("oct", "10-", tmp$variable) tmp$variable <- gsub("-0", "-200", tmp$variable) tmp$variable <- gsub("-1", "-201", tmp$variable) tmp$variable <- gsub("-9", "-199", tmp$variable) tmp$variable <- paste0("01-", tmp$variable) tmp$variable <- as.Date(tmp$variable, format = "%d-%m-%Y") dat <- tmp dat <- ddply(dat, .(variable), transform, total = value / sum(value)) res <- ddply(dat, .(variable), summarize, enp = 1 / (sum(total^2))) res <- zoo(res$enp, order.by = res$variable) plot(res, main = "Número efectivo de partidos\nen España(1996-2016)", xlab = "", ylab = "número efectivo de partidos")

25 de enero de 2017 · Carlos J. Gil Bellosta

Dos nuevos tutoriales sobre data.table y dplyr

Los productos de Apple, aun admitiendo su calidad, resuelven problemas que yo hace años que no tenía. Tanto data.table como dplyr vinieron a resolver problemas a los que muchos nos enfrentábamos con sudor y lágrimas. Ha aparecido recientemente una serie de tutoriales sobre ambos paquetes que recomiendo: El de data.table El de dplyr (parte I, parte II) Y mis comentarios: Para el 99% de mis problemas de manipulación de datos, me sobra con, además de R base, reshape2 y plyr. Para datos más grandes, me decanto por data.table. En gran medida, porque es previo a dplyr. No obstante, tengo la sensación de que dplyr acabará llevándose el gato al agua: tengo suficientes años como para haber presenciado sin que me las cuenten batallas anteriores: Beta vs VHS, WordPerfect vs Word, etc.

12 de julio de 2016 · Carlos J. Gil Bellosta

Descarga de datos del Ibex 35 (¿y otros?) minuto a minuto en tiempo (casi) real

El código es library(httr) library(plyr) base.url <- "http://www.infobolsa.es/1/wtdb/ChartIntraday" res <- POST(base.url, body = list(mv = "M SAN", date = "20160518", compressionMult = 1, isSession = 1)) dat <- content(res, as = "parsed", type = "application/json") dat <- dat$answer$LST$TV$T09 dat <- ldply(dat, unlist) Los mutatis mutandis, si alguien tiene la gentileza, en los comentarios.

20 de mayo de 2016 · Carlos J. Gil Bellosta

plyr, dplyr, data.table: ¿qué opinas?

Fui un pájaro mañanero con [plyr](http://cran.r-project.org/web/packages/plyr/index.html). Probé una vez [data.table](http://cran.r-project.org/web/packages/data.table/index.html) y no me convenció. Volví a él cuando realmente lo necesitaba y ahora es la prolongación de mis dedos. Aún no me he puesto con [dplyr](http://cran.r-project.org/web/packages/dplyr/index.html) aunque he visto el suficiente código escrito con él que no creo que me cueste mucho comenzar a usarlo. Pero tengo la sensación de que tenemos un cisma como el de vi contra emacs en ciernes. Comienza a haber, parece, partidarios acérrimos de tirios y troyanos. Así que abro la sección de comentarios para que opines sobre estos paquetes. A mí y a muchos otros lectores nos gustaría conocer tu opinión al respecto. ¿Cuál utilizas? ¿Qué te gusta de cada cual? ¿Cuál recomendarías?

24 de septiembre de 2014 · Carlos J. Gil Bellosta

Totales agregados por bloques en tablas

En ocasiones uno quiere añadir un total calculado en ciertos bloques a una tabla. Por ejemplo, en la tabla set.seed(1234) ventas.orig <- data.frame( cliente = rep(1:10, each = 5), producto = rep(letters[1:5], times = 10), importe = rlnorm(50)) tenemos clientes, productos e importes. Y nos preguntamos por el porcentaje en términos de importe que cada producto supone para cada cliente. Una manera natural pero torpe de realizar este cálculo consiste en usar un objeto intermedio y merge: library(plyr) tmp <- ddply(ventas.orig, .(cliente), summarize, total = sum(importe)) ventas <- merge(ventas.orig, tmp) ventas$pct.producto <- 100 * ventas$importe / ventas$total No os asustéis, se puede hacer aún peor (p.e., usando sqldf). Pero existen dos maneras, cuando menos, de hacerlo mejor. La primera es usando data.table. ...

25 de marzo de 2014 · 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