Luchando con los barómetros del CIS

TLDR: cómo procesar uan pregunta de todos los barómetros del CIS que no está en los archivos fusionados. Necesito para mi tesis procesar todos los microdatos. Preguntas y próximos pasos al final.

Una de las fuentes de datos que uso para mi tesis son los barómteros del CIS. Cada mes desde hace muchos años el CIS hace una encuesta, barómetro, en donde se pregunta por los tres principales problemas que tiene España.

Como los microdatos de cada barómetro están disponibles, esto es, cada una de las respuestas a los cuestionarios está publicada, es posible analizar y cruzar variables por edad, comunidad autónoma o profesión. El primer problema es conseguir y procesar los datos.

Disponibilidad de los datos: web y FID

Lo primero es dirigirse a la página del CIS a descargarlos (pestaña Estudios http://www.analisis.cis.es/cisdb.jsp), pero se encuentra uno el primer problema: hace falta introudcir tus datos personales (nombre, apellidos, universidad, email, objeto) para descargarlo, lo cual descarta un scrapero rápido automatizado de los datos. Existen datos fusionados de varios barómetros juntos para algunos años, pero no están disponibles para todos los años.

Así que la siguiente opción es usar los Fichero Integrado de Datos (FID) (http://analisis.cis.es/fid/fid.jsp)  “un único fichero, de los microdatos de un conjunto de variables, para los estudios del CIS que se seleccionen”:

“El interfaz permite al usuario elegir de forma rápida y cómoda a partir de una colección, los estudios que desee y, de estos, las variables deseadas de entre las contenidas en el diccionario del FID. Posteriormente, la solicitud se envía al CIS y, una vez que el CIS procede a su autorización, el fichero con los microdatos seleccionados se puede descargar en formato ASCII o SAV, de modo sencillo y fácil de tabular por diversos programas estadísticos. Es necesario el registro del usuario o identificación del mismo (si el usuario ya está registrado), para completar una petición de datos”.

Web del CIS. Explicación sobre los Fichero Integrado de Datos (FID).

El problema es que la pregunta que necesito “¿Cuál es el principal problema que existe en España? ¿ y el segundo? ¿y el tercero?”, aunque su enunciado concreto ha ido variando a lo largo de los años, no está disponible en los FID, ya que solamente se ofrece un subconjunto de las variables integradas.

.zip a .zip

Así que he solicitado por email todos los barómetros disponibles, esta es la lista de todos los disponibles: https://code.montera34.com/numeroteca/barometro_cis/-/blob/master/data/original/barometros-cis.csv

Según me han indicado soy el primero en hacerlo. Me parece raro que nadie lo haya hecho antes, ciertamente. Seguramente hayan usado otros métodos.

Tras una serie de pruebas con unos archivos de prueba para comprobar que los abría bien han procedido a preparar para que descargue todos los microdatos de los barómetros en zips por año. En pocos días me he hecho con la colección completa de microdatos de barómetros.

.zips esperando paciente a ser abiertos.

Un poco de código para descomprimirlos fácilmente:

unzip ‘*.zip’        unzipear todos los archivos
mv */* .            mover los que están en directorios al raiz
mv MD*/* .
rm -r 19* 20*  fu*    eliminar directorios vacíos
Ahora que tengo todos, volver a unzipear:
unzip ‘*.zip’

Ahora creo un archivo con todos los *.sav:
ls | grep sav > files.csv

Ahora tengo el listado de todos los barómetros disponibles (los de 2020 y 2021 me da un problema para abrirlos que tengo que resolver “error reading system-file header”). Puedo procesar todos los microdatos de los barómetros desde junio de 1989, los anteriores solamente están disponibles uno de 1987 (nº 1695), dos de 1985 (nº 1442 y 1435) y otro de 1982 (nº 1320), que me enviarán cuando sea posible. Para el resto desde junio de 1979 no hay microdatos y habría que pagar por ellos si los quisiera.

Encontrar la pregunta y su número

Documentos que se incluyen en un .zip de un barómetro.

Para poder analizar las respuestas por CCAA, que es mi objetivo, tengo que encontrar el código de la pregunta, que, oh sorpresa, va cambiando a lo largo de los años. Para ello he montado una hoja de cálculo para anotar qué código lleva la pregunta (https://docs.google.com/spreadsheets/d/1xxlt8FnWanVzYkIQdU2yaWlE8-HUvnzVXSiE2QvNJRU/edit#gid=0). Así, la primera vez que aparece es en los archivos disponibles es de mayo de 1992, y tiene los códigos P501, P502 y P503, una por cada uno de los problemas percibidos. Ese código ha ido variando a lo largo de los años a la pregunta: P1401, P701, P1601, P1201… los primero números indican el número de la pregunta. Para averiguar el código hay dos maneras. Cada barómetro está compuesto por un conjunto de archivos. Así, el barómetro nº 3134 tiene los siguientes archivos:

  • 3134.sav microdatos
  • DA3134 archivo dat
  • ES3134
  • FT3134.pdf ficha técnica
  • cues31314.pdf cuestionario original
  • codigo3134.pdf códigos utilizados
  • tarjetas3134.pdf tarjetas que usan los encuestadores

Al principio miraba si la pregunta estaba en el cuestionario, pero luego vi que era más rápido mirar directamente si en el archivo con los códigos venía la pregunta y su número: “P.7 Principal problema que existe actualmente en España. El segundo. El tercero” que con suerte correspondería con la variable P701, P702 y P703. 

El problema es que en algunos casos contados ponen la “p” de la variable con minúscula y el código es p701. Algo que solamente se puede averiguar abriendo el archivo .sav. Para ver lo que contiene el archivo.sav con la librería “foreign” en R: df <- read.spss(data, use.value.label=TRUE, to.data.frame=TRUE), siendo data el “path” al archivo .sav correspondiente.

Desde Rstudio se puede previsualizar el archivo .sav cargado y mirar cuál es el código correcto:

Así se ve en Rstudio.

Lo que pasa es que muchos barómetros no tienen disponible esa pregunta, pero ¿cómo saberlo para ahorrarnos tiempo? Existe una página, ya ni recuerdo cómo llegué a ella, que tiene todas las respuestas recogidas y procesadas “Tres problemas principales que existen actualmente en España (Multirrespuesta %)  http://www.cis.es/cis/export/sites/default/-Archivos/Indicadores/documentos_html/TresProblemas.htm, esto pernite de un vistazo saber cuáles son los barómetros que tienen respuesta:

Un trozo de la página resumen a la pregunta http://www.cis.es/cis/export/sites/default/-Archivos/Indicadores/documentos_html/TresProblemas.html

Así se puede ir a tiro hecho a buscar el código en los barómetros que sabemos tienen respuesta. Relleno celdas de la hoja de cálculo de las columnas p1, p2 y p3 (cada una corresponde con una de las respuestas a los 3 principales problemas) copiando el valor anterior, hasta que da error el script que lo procesa (ver más adelante).

Clasificando en p1, p2 y p3 los códigos de las preguintas en cada uno de los barómtreos. En negro si lo he mirado, en gris si lo he “acertado” y no ha fallado el script.

Pero no se detienen los problemas. Los encuestadores recogían la respuesta libre (que no se ofrece en los microdatos) para después clasificarla en unos cajones-respuestas establecidos:

Lo que ocurre es que en algunos años “La corrupción y el fraude” no se ofrecían como respuesta posible, así que de haber habido alguna respuesta corrupción como respuesta en aquello años de bonanza económica habrá ido a la casilla de “otros”. Esto pasó entre septiembre de 2000 y julio de 2001, por ejemplo, lo que hará que la serie tenga algunos agujeros. Habrá que hacerlos explícitos.

Procesar 1: juntar todas las respuestas

Una vez sorteadas estas trabas es la hora de programar un script que vaya abriendo cada archivo .sav, seleccione las variables adecuadas y cree un archivo con todas las respuestas:

# Select and load multiple barometro files ------------

# where are files stored
path <- "~/data/CIS/barometro/almacen/tmp/"

# remove if it hasn't got the questions
cis_files <- cis_files %>% filter( p1 != "" )

# iterate through all the files
for ( i in 1:nrow(cis_files) ) {
# for ( i in 1:8 ) {
  print("--------------------")
  print(paste(i,cis_files$name[i],cis_files$date[i]  ) )
  # create path to file
  data <- paste0(path, cis_files$name[i])
  # load data in the file
  df <- read.spss(data, use.value.label=TRUE, to.data.frame=TRUE)
  
  # chec if variable ESTU exists
  if ( "ESTU" %in% colnames(df) ) {
    df <- df %>% mutate(
      ESTU = as.character(ESTU)
    )
  } else {
    # if ESTU is not in the variables, insert the ID of the barometer
    df <- df %>% mutate(
      ESTU = cis_files$id[i],
      ESTU = as.character(ESTU)
    )
  }
    
  # if REGION exixts, rename it as CCAA 
  if ( "REGION" %in% colnames(df) ) {
      df <- df %>% rename(
        CCAA =  REGION
      )
    }
  
  # add date to data by taking it gtom cis_id dataframe
  df <- left_join(df,
                  cis_id %>% select(id,date),
                  by = c("ESTU"="id")
                  # ) %>% select( date, ESTU, CCAA, PROV, MUN, P701, P702, P703 )
  )
  # select the basic columns and the 3 questions
  # the true name of the question is specified in the online document https://docs.google.com/spreadsheets/d/1xxlt8FnWanVzYkIQdU2yaWlE8-HUvnzVXSiE2QvNJRU/edit#gid=0
  selected <- c( "date", "ESTU", "CCAA", "PROV", "MUN", cis_files$p1[i], cis_files$p2[i], cis_files$p3[i])
  
  df <- df %>% select(selected) %>% rename(
    p1 = cis_files$p1[i],
    p2 = cis_files$p2[i],
    p3 = cis_files$p3[i],
  ) %>% mutate(
    p1 = as.character(p1),
    p2 = as.character(p2),
    p3 = as.character(p3)
  )
  
  # For the first file
  if ( i == 1) {
    print("opt 1")

    # loads df in the final exportdataframe "barometros"
    barometros <- df
    
    print(df$date[1])
    print(df$ESTU[1])
    
  } else {
    print("not i==1")

    barometros <- rbind( df, barometros)
  }
  
}

Por el momento tengo 570.795 respuestas a la pregunta analizada de 223 barómetros, a falta de solventar algunos problemas.

Limpiar datos 1: los nombres de las CCAA

Ahora toca limpiar los datos. Lo primero es limpiar los nombres de las CCAA que a lo claro de los años han ido acumulando diferentes nomenclaturas y alguna vez han tenido el código de la CCAA en vez del nombre (ver https://code.montera34.com/numeroteca/barometro_cis/-/blob/master/analizando-CIS.R#L161), copio solamente un extracto:

barometros <- barometros %>% mutate(
CCAA = as.character(CCAA),
CCAA = CCAA %>% str_replace("\{",""),
CCAA = CCAA %>% str_replace("\}",""),
CCAA = CCAA %>% str_replace("\(",""),
CCAA = CCAA %>% str_replace("\)",""),
CCAA = CCAA %>% str_replace(" "," "),
CCAA = CCAA %>% str_replace("Euskadi","País Vasco"),
CCAA = CCAA %>% str_replace("País Vasco ","País Vasco"),
CCAA = CCAA %>% str_replace("Pais Vasco","País Vasco"),
CCAA = CCAA %>% str_replace("País vasco","País Vasco"),
CCAA = CCAA %>% str_replace("País vascoPV","País Vasco"),
CCAA = CCAA %>% str_replace("País VascoPV","País Vasco"),

)

Procesar 2: Contar respuestas por barómetro

Ahora toca agrupar las respuestas por barómetros de nuevo y calcular el número de encuestas por barómetro que hacen mención a tal o cual tema:

# Group by date and CCAA ----------------------
evol_count <- barometros %>% group_by(CCAA,date) %>% summarise(
  # counts number of elements by barometro and CCAA
  count_total = n()
) %>% ungroup()

evol_p1 <- barometros %>% group_by(CCAA,date,p1) %>% summarise(
  # counts number of answers for each type for question 1 by barometro and CCAA
  count_p1 = as.numeric( n() )
  )
evol_p2 <- barometros %>% group_by(CCAA,date,p2) %>% summarise(
  # counts number of answers for each type for question 1 by barometro and CCAA
  count_p2 = as.numeric( n() )
)
evol_p3 <- barometros %>% group_by(CCAA,date,p3) %>% summarise(
  # counts number of answers for each type for question 1 by barometro and CCAA
  count_p3 = as.numeric( n() )
)

# joins p1 and p2
evol <- full_join(
  evol_p1 %>% mutate(dunique = paste0(date,CCAA,p1)) ,
  evol_p2 %>% mutate(dunique = paste0(date,CCAA,p2)) %>% ungroup() %>% rename( date_p2 = date, CCAA_p2 = CCAA),
  by = "dunique"
) %>% mutate (
  # perc_p2 = round( count_p2 / count_total * 100, digits = 1)
) 

# fills the dates and CCAA that were empty
evol <- evol %>% mutate(
  date = as.character(date),
  date = ifelse( is.na(date) , as.character(date_p2), date),
  date = as.Date(date),
  
  CCAA = as.character(CCAA),
  CCAA = ifelse( is.na(CCAA), as.character(CCAA_p2), CCAA),
  CCAA = as.factor(CCAA)
)

# joins p1-p2 with p3
evol <- full_join(
  evol,
  evol_p3 %>% mutate(dunique = paste0(date,CCAA,p3)) %>% ungroup() %>% rename( date_p3 = date, CCAA_p3 = CCAA),
  by = "dunique"
) %>% mutate (
  # perc_p2 = round( count_p2 / count_total * 100, digits = 1)
) 

# fills the dates and CCAA that were empty
evol <- evol %>% mutate(
  date = as.character(date),
  date = ifelse( is.na(date) , as.character(date_p3), date),
  date = as.Date(date),
  
  CCAA = as.character(CCAA),
  CCAA = ifelse( is.na(CCAA), as.character(CCAA_p3), CCAA),
  CCAA = as.factor(CCAA)
)

# add number of answers per barometer and CCAA
evol <- left_join(
  evol %>% mutate(dunique = paste0(date,CCAA)),
  evol_count %>% mutate(dunique = paste0(date,CCAA)) %>% select(-date,-CCAA),
  by = "dunique"
) %>% mutate (
  count_p = count_p1 + replace_na(count_p2,0) +  replace_na(count_p3,0),
  # este sistema da error en los "no contesta" al contarlos varias veces al sumar!!!
  perc = round( count_p / count_total * 100, digits = 1)
) %>% select ( date, CCAA, everything(), -dunique, -date_p2, -date_p3, -CCAA_p2, -CCAA_p3 ) %>% mutate(
  p = p1,
  p = ifelse( is.na(p),p2,p),
  p = ifelse( is.na(p),p3,p),
  date = as.Date(date)
)

Limpiar los datos 2: las respuestas

Toca limpiar las respuestas para eliminar las múltiples formas de escribir “La corrupción y el fraude” o “Corrupción y fraude ” (ojo al espacio después de “fraude” que a algunos vuelve loco). Una tarea de estandarización de las respuestas que hago con OpenRefine y que en algunos casos requiere de decisiones subjetivas, véase el ejemplo:

Detección de respuestas parecidas para su consolidación en OpenRefine.
Proceso de consolidación de respuestas con OpenRefine.

Visualizar

El siguiente paso es visualizar los resultados para detectar los primero errores y corregir problemas en la captura y procesado. Antes de publicar esto ha ocurrido varias veces: detecté unos barómetros de 2016 que no se habían descomprimido, por ejemplo.

En las primeras visualizaciones trato de ver que salen valores congruentes y que no hay agujeros en los datos. En este primer gráfico de rejilla muestro el porcentaje de entrevistas de cada barómetro que tienen como respuesta “El paro” (rosa) y “La corrupción y el fraude” (verde). Ya se pueden ver cómo hay mucho más ruido en lugares como Ceuta y Melilla por el bajo número de respuestas, pero que el resto de valores sigue una tendencia parecida. En La Rioja (fila de abajo, tercera por la izquierda) también se ve ese problema, con sus 17 entrevistas por barómetro.

Un primer vistazo a las visualizaciones, publicaré más cuando tenga más claro que no hay errores en los datos

Problemas y siguientes pasos

Desde el CIS no solamente me enviaron todos los microdatos sino que me asesoraron sobre su uso. Les conté lo que pretendía hacer con los datos y me advirtieron de dos cosas relacionadas con la cantidad de entrevistas por CCAA y la ponderación:

A. Ponderación en SPSS

“Los ficheros Sav, por defecto van con la ponderación activada, siempre, en todos los que hemos pasado ya y en los que pasaremos, de esta lista”, algo que no entiendo del todo bien, porque eso no creo que deba afectar a los microdatos.
Si alguien ha trabajado con los .sav en SPSS quizás me pueda aclarar cómo funciona la ponderación en ese programa, dónde se almacena esa información.

B. Si no tienes más de 400 entrevistas…

“Nosotros no consideramos representativos los datos de Comunidades con un tamaño menor a 400 entrevistas. En los barómetros, salvo los del último año para algunas Comunidades (mire ficha técnica), el tamaño muestral es de entorno a las 2.500 entrevistas, eso significa que habitualmente salvo Madrid y Cataluña, la mayor parte se quedan muy por debajo, incluso de menos de 100. Los márgenes de error cuando se quiere hablar sobre esos datos son muy altos, y más aún si además va a hacer cruces”. Me redirigían a una sección de su web:

ADVERTENCIA: El error muestral aumenta conforme disminuye el número de entrevistas realizadas. Téngase presente sobre todo en los cruces de variables y las preguntas filtradas. A modo orientativo, bajo la hipótesis de muestreo aleatorio simple, P=Q=1/2 y un 95% de intervalo de confianza, véase la siguiente tabla: Fuente: http://www.analisis.cis.es/aAvisoVars.jsp?tipo=2&w=800&h=600

Una cuestión no menor que puede hacer que no use finalmente estos datos para las comunidades, o tenga que emplear grados de incertidumbre demasiado altos.

En los últimos estudios sí aparece la ponderación usada para el valor global:

Tabla de pnoderaciones (en un PDF) en la ficha técnica de un barómetro. Ejemplo http://www.cis.es/cis/export/sites/default/-Archivos/Marginales/3300_3319/3318/Ft3318.pdf

Un cálculo rápido de número de encuestas por barómetro y CCAA:

CCAAmediamediana
Andalucía439.4437
Cataluña396.9395
Madrid328.9328
Valencia261.6265
Galicia167.3164
Castilla y León152147
País Vasco129.8125
Castilla-La Mancha109.8109
Canarias99.599
Aragón75.274
Murcia71.472
Asturias66.864
Extremadura63.262
Baleares48.847
Navarra33.734
Cantabria33.533
Rioja17.117
Ceuta4.14
Melilla4.14
evol %>% select( date, CCAA, count_total) %>% distinct() %>% group_by(CCAA) %>% filter ( date < as.Date( “2017-12-01”)) %>% summarise(
media = round( mean(count_total), digits = 1),
mediana = median(count_total))

Día en que se realiza la entrevista ¿se podría saber?

Tenía interés en cruzar el día de la encuesta para ver si se podía estudiar con determinados escándalos que tienen un día muy marcado su anuncio en los medios de comunicación, podŕia verse su impacto en las encuestas, pero ese dato no está disponible. Lo que se conoce es el periodo en que se realizan las encuestas, que suele ser la primera quincena del mes. ¿se podrá conseguir la fecha exacta de cada entrevista?

El duro camino para publicar la serie de fallecidos por provincias en Euskadi

Así me siento tras conseguir reconstruir la serie de fallecidos por provincias.

Hace unos días os contaba lo difícil, por no decir imposible, que era seguir la evolución de los fallecidos por provincias en Euskadi, a no ser que dediques un buen rato, energía y técnica al asunto.

Basta pasearse por las páginas dedicadas a la COVID-19 en Euskadi en los principales diarios que ofrecen información local (eldiario.es, elcorreo.com, por ejemplo) para ver que esos gráficos de evolución de fallecidos por provincia no se publican. Y no se publican porque la Administración publica esos datos de una forma que hace imposible, digamos mejor muy dificultosa, su elaboración. Es un claro ejemplo de cómo la forma de publicar los datos dicta la agenda mediática. Publica los datos de una forma y los medios de comunicación hablarán de una determinada forma ¡Si quieres evitar que se hable de algo, no publiques esos datos!

Fallecidos diarios en las webs de El Correo y El Diario

Open Data Euskadi, la plataforma de datos abiertos en País Vasco, publica los datos diarios de fallecidos para toda Euskadi una vez a la semana (pestaña 08 de la hoja de cálculo). Por poner un ejemplo: hasta hoy solamente conocíamos los fallecidos agregados en las tres provincias vascas hasta el 15 de noviembre ¡hace 10 días!

Esta serie de datos vale para ver la evolución en la CAPV, pero no por provincia (Nota: sí que se publica en días laborables los fallecidos por hospitales, que era la cifra que usábamos, por aproximación, hasta hace bien poco).

Para construir la serie de fallecidos por provinicas tenemos que recurrir a los datos de fallecidos acumulados que se publican por municipio y una vez a la semana (pestaña 07). Ojo, no se publica el histórico, como sí se hace con los casos o los hospitalizados. Esto es, si quieres saber los fallecidos que había habido en un municipio en determinada fecha no puedes saberlo, porque el archivo que se publica sobre escribe al anterior. Tampoco puedes saber los fallecidos en una determinada semana, porque el dato que se publica es el total acumulado de muertes.

Esto cambió el 20 de octubre de 2020, tras solicitar que fuera posible acceder al histórico de archivos publicados. Además habría que comparar dos archivos para poder calcular el incremetno de muertes de una semana a otra. No nos engañemos, una tarea que nadie va a realizar. A pesar de la buena noticia de que ahora sí se guardan y se publican en abierto los archivos anteriores para permitir trazabilidad… las fechas anteriores al 20 de octubre siguen sin ser accesibles… a no ser que alguien haya guardado todos los archivos que se hayan publicado diariamente… y ¡nosotros lo hemos hecho! (esto es como el he “estudiado a Agrippa” de La Princesa Prometida).

Así que de este modo, no sin un poco de sudor, hemos podido reconstruir la serie histórica de fallecidos por municipios que nos ha permitido construir la serie por provinicas. Un proceso tedioso que implica rescatar con git (el sistema de versiones que usamos) todas las versiones de un archivo, construir la serie y agregar por provincias ¡Por fin tenemos la serie de fallecidos!

Fallecidos diarios por provincias en Euskadi. Se pueden ver los escalones de las últimas fechas al publicarse los datos de forma semanal. Para los últmos días se usan los datos de fallecidos en hospitales.
Más gráficos en la web de Escovid19data.

Tenemos un vacio entre mediados de mayo y junio: desde que se dejaron de publicar datos por provincias hasta que se empezó a hacerlo por municipios.

¿Por qué no se publican los datos históricos de fallecidos por municipios, OSI y provinicias? ¿a qué se debe esta opacidad y poner tan difícil una serie de datos que seguro está disponible internamente y que el resto de comunidades autónomas sí publican?

La serie de datos de casos y fallecidos sacada de los archivos por municipios está disponible, pero casi mejor usa la serie completa del repositorio de Escovid19data.

Tenemos más preguntas que ya hemos hecho a Open Data Euskadi, pero las dejamos para otro post.


Esta iniciativa de abrir datos abiertos forma parte del proyecto Escovid19data que recopila colaborativa y voluntariamente datos de COVID-19 en todas las comunidades y ciudades autónomas para ofrecer los datos y gráficos en abierto.

Fallecidos semanales en municpios de más de 10.000 habitantes en País Vasco. Más gráficos en la web de Escovid19data (se cambió la imagen, originalmente tenía un error en los colores),

Muerte por datos

Muero por datos cuando la administraciones publican datos aparentemente muy detallados pero que impiden ver el bosque.

Un ejemplo lo tenemos con los fallecidos por COVID-19 en Euskadi.

De primeras, si revisas las fuentes de datos que se publican, parece que hay muchos datos disponibles. Si miras un poco más en detalle parece imposible responder a una pregunta básica ¿cómo evolucionan los fallecidos por COVID-19 provincias en Euskadi?

Cada cuál llega con sus preguntas bajo el brazo e intentan que los datos le den la respuesta. En los medios de comunicación locales no he visto publicada la evolución de muertes por provincias.

En mi caso la inquietud forma parte del proyecto de recopilación y visualicación de datos colaborativo Escovid19data, que recopila datos de 19 territorios en España.

Open Data Euskadi ofrece varias series de datos de fallecidos, pero ninguna es la que necesitamos. Este es el listado de los diferentes conjuntos de datos que ofrecen:

  • Serie de fallecidos acumulados para todo Euskadi. Acumulados diarios del 24/02/2020 al 15/07/2020. Luego los datos pasan a publicarse semanalmente ¿por qué? Última fecha disponible 25/10/2020. Hace 16 días.
  • Serie de fallecidos diarios para todo Euskadi: “Casos positivos fallecidos en Euskadi por fecha de fallecimiento”. Datos diarios del 01/03/2020 al 01/11/2020 (hace 9 días). [2.212 acumulados]
  • Serie de fallecidos diarios por hospitales en Euskadi. Datos diarios del 01/03/2020 al 08/11/2020 desagregados por hospitales y el total diairo [1.528 acumulados].
  • Acumulados de fallecidos en cada municipio de Euskadi. No se ofrece la serie de datos temporales, se da el dato de la última fecha disponible con periodicidad semanal. Última fecha disponible 2020/11/01, hace 10 días.

Este último conjunto de datos es el que nos puede proporcionar la serie temporal de fallecidos por municipio y, por tanto, por provincia, si los agregamos convenientemente. Solamente podremos reconstruir la serie temporal si antes hemos ido descargando los archivos semana a semana. (El histórico de archivos publicados por Open Data Euskadi solamente está disponible desde el 20 de octubre 2020. Es buena noticia pero insuficiente para nuestro propósito).

Por suerte, en Escovid19data, hemos descargado el archivo situacion-epidemiologica.xlsx todos los días que ha sido publicado, así que en nuestro repositorio de git tenemos el histórico completo.

Con un script de git es posible obtener todas las versiones de un archivo y poder reconstruir la serie temporal.

Esperamos que Open Data Euskadi se anime a publicar la serie completa de fallecidos por provincias, como ha hecho recientemente con la serie de casos por franjas de edad. Originalmente se publicaba exclusivamente en datos diarios sueltos en los informes en PDF y ahora es una serie más de datos abiertos.

¿Por qué publicar una serie de casos detectados por provincias y no la de fallecidos?


El términio “death by data” fue usado por primera vez en este artículo “Longitudinal Field Research on Change: Theory and Practice” de Andrew M. Pettigrew (1990). Me lo ha soplado David Rodríguez Mateos, que es quien me introdujo al término.

Más gráficos sobre COVID-19 en Euskadi en la web de Escovid19data.

Cómo empezar a procesar millones de tuits (o tweets)

Nota de junio 2020: hay una funcionalidad del t-hoarder que permite el procesado de todos los tuits almacenados. Estoy ayudando a documentarla en la wiki de t-hoarder. Estoy teniendo algunos problemas para que me funcione, tema de CGI.

Para mi tesis sobre cobertura de corrupción en España llevo tiempo recopilando tuits. Llevo el seguimiento de mensajes de Twitter relacionados con algunos casos de corrupción, para luego poder compararlos con cómo los medios de comunicación han hablado del tema.

Utilizo t-hoarder, desarrolllado por Mariluz Congosto, para capturar tuits según se van publicando. Lo tengo instalado en un servidor remoto que está continuamente descargándose tuits que contienen una determindad lista de palabras. Con un interfaz en la línea de comandos desarrollado en python permite interactuar de manera sencilla con la API de Twitter para obtener y procesar tuits descargados (ver este manual que escribimos hace un tiempo para aprender a usarlo).

T-hoarder guarda los tuits en archivos .txt en formato .tsv. Cada cierto tiempo comprime el archivo streaming_cifuentes-master_0.txt en uno comprimido streaming_cifuentes-master_0.txt.tar.gz que contiene entre 150.000 o 250.000 tuits.

En el servidor se van acumulando estos archivos comprimidos que me descargo periódicamente con rsync:
rsync -zvtr -e ssh numeroteca@111.111.111.111:/home/numeroteca/t-hoarder/store/ .

Con ese sistema tengo un directorio con múltiples archivos de los diferentes temas que voy capturando:

El primer paso consiste en entender de forma básica qué he conseguido recopilar. Hay múltiples razones por las que puedo tener agujeros en los datos: el servidor se llenó, el acceso a la API de Twitter se interrumpió por algún problema de permisos, etc.

Para ello he desarrollado este pequeño script en bash para obtener la información básica que contiene cada archivo de tuits:

for f in ./*cifuentes-master*.txt.tar.gz; 
do 
echo "$f" &gt;&gt; mycifuentes.txt; 
gzip -cd  $f |  (head -n 1) | awk 'OFS="\t" {print $4}' &gt;&gt; mycifuentes.txt; 
gzip -cd  $f  |  (tail -n 2) | awk 'OFS="\t" {print $2}' &gt;&gt; mycifuentes.txt; 
gzip -cd  $f | wc -l &gt;&gt; mycifuentes.txt; 
done

Este script lee todos los archivos como streaming_cifuentes-master_20.txt
y va guardando en cada línea del archivo mycifuentes.txt en líneas separadas: el nombre del archivo tar.gz, la fecha y hora del primer tuit (head) y del último (tail) y por último el número de tuits. Con eso obtengo un archivo como este:

./streaming_cifuentes-master_11.txt.tar.gz
2018-04-26;18:28:24
2018-05-02;06:54:32
;
157770
./streaming_cifuentes-master_12.txt.tar.gz
2018-05-02;06:54:37
2018-05-11;10:33:00
;
155426

Que proceso a mano en gedit son sustituciones masivas (me falta generar mejor el tsv donde cada campo esté en la línea que le corresponde):

Actualización 8 junio 2020: Gracias a @jartigag@mastodon.social que me llegó por Twitter no me hace falta el procesado manual ya que cada dato va a su propia columna:

for f in ./*cifuentes-master*.txt.tar.gz;
do
printf "$f\t" >> mycifuentes.txt;
gzip -cd  $f | (head -n 1) | awk '{printf $4"\t"}'  >> mycifuentes.txt;
gzip -cd  $f  | (tail -n 2) | awk '{printf $2"\t"}'  >> mycifuentes.txt;
gzip -cd  $f | wc -l >> mycifuentes.txt;
done

Este es el resultado en formato tabla:

filestartendnumber_tweets
streaming_cifuentes-master_0.txt.tar.gz2018-04-05 14:41:192018-04-08 16:35:20828374
streaming_cifuentes-master_10.txt.tar.gz2018-04-25 23:09:132018-04-26 18:28:23158526
streaming_cifuentes-master_11.txt.tar.gz2018-04-26 18:28:242018-05-02 06:54:32157770
streaming_cifuentes-master_12.txt.tar.gz2018-05-02 06:54:372018-05-11 10:33:00155426

Proceso este archivo mycifuentes_processed.tsv, sin cabecera con este otro script de R:

mylist <- read_tsv("../../data/t-hoarder-data/store/mycifuentes_processed.txt", col_names=FALSE,  quote="")
names(mylist) <- c("file","first","last","n_tweets")
mylist <- mylist %>% arrange(first) %>% mutate(
  hours = last - first, # tweets per hour
  tweets_per_hour = round( n_tweets / as.integer(hours), digits=1)
)

lo que hace es leer el archivo (read_tsv) y cuenta las horas entre el primer y último tuit y calcula los tuits por hora:

Ahora ya podemos hacer las primeras visualizaciones para explorar los datos. En este primer gráfico cada línea es un archivo que va del primer al último tuit según su fecha. En el eje vertical se indica el número medio de tuits por hora. En el caso del master de Cifuentes el primer archivo no se comprimió por error y contiene 828.374 tuits. el fondo gris indica cuando no hay tuits descargados. Hay un periodo en blanco la inicio del caso y otro en diciembre de 2019, la escala vertical es logarítmica, para que se puedan ver todos los archivos incluyendo los primeros.

En este otro gráficos (escala vertical lineal) muestro los archivos de tuits que he capturado de unos cuantos medios de comunicación españoles, para luego poder comparar las diferentes coberturas, vuelvo a tener agujeros para los que todavía tengo que encontrar explicación.

En este otro gráfico comparo la fecha del archivo con el número de tuits que contiene:

Este es un primer análisis muy “meta” que no entra ni de lejos a analizar el contenido de los tuits pero me sirve como primer paso para entrar en faena a analizar los datos que tengo. Tenía que haber hecho esto hace tiempo. En cualquier caso bueno es ponerse en marcha y documentar. Mis conocimientos de bash son escasos pero creo que merece la pena y es más rápido en este caso que usar R. Inspirado por este libro que estoy a medio leer Data Science at the Command Line de Jeroen Janssens.

El código de R para procesar los datos está disponible en este script: https://code.montera34.com:4443/numeroteca/tuits-analysis/-/blob/master/analysis/index-tweet-containers.R

Análisis de propagación de COVID-19 por comunidades autónomas en España

Nota: no soy experto en epidemias ni en medicina. Me he limitado a plasmar gráficamente los datos publicados por el Ministerio de Sanidad. Si ves errores en los gráficos o de concepto, házmelo saber. Son datos de casos registrados, no tienen en cuenta los protocolos para obtención de datos (pruebas) de cada comunidad autónoma ni todos los casos “reales” que hay pero no han sido detectados.

Errores por resolver: la bajada de datos en Galacia en una base de datos acumulativa debe ser un error. Estamos mirando a qué puede deberse.


Hemos montado desde Montera34 una web para mantener actualizados estos datos en lab.montera34.com/covid19/


Cuando ayer publiqué una reflexión sobre lo que estaba pasando en relación al COVID-19 y la necesidad de autoencerrarse para la parar su propagación, no había mirado si había gráficos de evolución por comunidad autónoma en España. Sí que encontré mapas de “bolas”, tablas con el número por comunidad autónoma, pero no su evolución en el tiempo.

Lo primero que encontré fue el repositorio de datos por países (y algunas provincias y estados) que recopilan desde la universidad de Johns Hopkins y que se pueden ver en este dashboard de Rami Krispin. Sin embargo, lo que buscaba eran datos desagregados por comunidad autónoma o provincia en España, y esos no estaban disponibles. Quería conocer el avance del virus en mi entorno más cercano.

Encontré que el Ministerio de Sanidad, Consumo y Bienestar Social los estaba publicando en PDF (!) en informes diarios desagregados por comunidad autónoma. Cuando estaba descargando todos los PDF encontré que desde Datadista los habían pasado a un formato reutilizable. Alegría, visitad su respositorio. (Todavía no sé de qué PDF han sacado los datos previos al 3 de marzo, espero aclararlo cuando pueda).

Con los datos a mano monté un repositorio de R para analizar cómo estaba evolucionando la propagación por comunidad autónoma. Estos son los resultados.

Número de casos registrados

Lo primero es ver el número de casos registrados por cada comunidad autónoma. Un “small multiple” parece una buena opción para ver cada uno de los lugares:

Todos tienen una pendiente parecida. Sorprenden las “mesetas”, zona horizonal de de Cantabria y Extremadura. Ojo, porque estamos usando una escala logarítmica en el eje vertical, si usáramos una escala lineal veríamos poco o casi nada. (Sobre escala logarítmica y pandemias).

Podemos ver los mismos datos superpuestos en el siguiente gráfico, donde se aprecia que la pendiente es similar en cada línea. Una línea recta en una escala logarítmica indica que el crecimiento es exponencial. Madrid encabeza en número de casos seguido de País Vasco y Cataluña.

Si profundizamos un poco más podemos calcular los datos relativos a la población de cada comunidad autónoma. Aunque el número de casos acumulados es lo que muchos quieren saber, el relativo a su población nos puede permitir entender mejor lo que está pasando. En este caso representamos a los casos acumulados de COVID-19 por millón de habitantes:

La Rioja pasa del 4º al primer puesto con 647 por cada millón de habitanes, seguido por Madrid (208), País Vasco (156) y Navarra (111).

Número de ingresos en la UCI

Miremos ahora los casos registrados de personas en la UCI (Unidad de Cuidados Intensivos):

Madrid (135) parece está a la cabeza claramente en número de ingresos en la UCI por el COVID-19, seguida de Euskadi (18), y Castilla-La Mancha (9):

En números relativos también es la comunidad de Madrid la primera con respecto a su población, tiene 20,3 por cada millón de habitantes, seguida de Euskadi (8,2) y Navarra (4,6):

Fallecimientos por COVID-19

El número total de fallecimientos registrados por COVID-19 a día 12 de marzo de 2020 ascendía a 84 en toda España.

En números totales la Comunidad de Madrid va primera en fallecimientos con 56, muy lejos de Euskadi con 11.

Sin embargo, si lo relacionamos con su población, vemos que las diferencias no son tan grandes. La Rioja (6,3 fallecidos por cada millón de habitanes) pasa a estar muy cerca de Madrid (8,4), les siguen Euskadi (4,9) y Aragón (4,5).

Todo el código para producir estos gráficos está en este repositorio: https://code.montera34.com:4443/numeroteca/covid19. Os animo a echar un ojo y ayudar a mejorarlo. En la carpeta de imágenes podéis encontrar todas las que no han tenido cabida en este artículo.

Los datos representados son de casos registrados, según otros análisis, hasta que pasen varias semanas no sabremos

Fuente de los datos

Del COVID-19 en España están sacados del repositorio de Datadista los extrae a su vez de las tablas de la situación diaria de la enfermedad por el coronavirus (COVID-19) en España que publica el Ministerio de Sanidad, Consumo y Bienestar Social en incómodos PDF. Actualizados a día 12 de marzo de 2020. ¿Por qué no los publica en mejores formatos? Eso da para otro artículo.

Los datos de población en 2019 por comunidades autónomas son del INE.

Repositorio para ver cómo están hechos los gráficos con R. Participa. Los datos procesados están en /data/output.

Las visualizaciones actualizadas en lab.montera34.com/covid19

Coda: escala lineal vs escala logarítmica

A petición popular subo este gif animado que representa los mismos datos, número de casos registrados por comunidad autónoma en España cambiando la escala del eje vertical:

  1. escala líneal,
  2. escala logarítmica y
  3. escala logarítmica y casos por millón de habitantes.
A la izquierda escal lineal y a la derecha logarítmica

En la escala lineal solo se aprecia de manera clara los datos de Madrid.

Comparativa escala logarítmica y lineal en el eje vertical.

El hilo

Estoy para que me encierren

Actualización 12.03.2020: Análisis de propagación de COVID-19 por comunidades autónomas en España.

Los inevitables chistes, los del Atleti jugando el partido de la Champions en Anfield con todo el público y sus 2.000 aficionados cantando “coronavirus lo lo lo lo lo coronavirus”, los coles cerrados, otros coles abiertos, las universidades posponiéndolo todo, otras abiertas, las fallas suspendidas, la semana santa sevillana que no la toquen, los congresos cancelados, las videoconferencias, el teletrabajo, parlamentarios infectados, plantillas infectadas, verse por la calle y darse dos besos, verse y no tocarse, los pintxos en la barra, la tortilla en la barra, otras tortillas protegidas por plástico, la economía que va mal, las ayudas, los que pierden trabajo, los abuelos que echan una mano, los sistemas sanitarios saturados, políticos echándose las culpas, desde ayer es oficialmente pandemia y mientras… mis hijos en el cole.

Vivimos tiempos confusos, de precrisis o de crisis total. Sabemos muchas cosas aunque parece que no las sepamos. Ninguno queremos parecer paranoicos. Parece imposible pararlo todo ¡hasta los viajes en avión! ¡hasta el (sacrosanto) trabajo! pero todo es posible si la vida está en juego. Parece que es el momento de arrimar el hombro, preocuparse por lo importante (no me refiero a hacer acopio de comida en el súper), pero no lo hacemos del todo. Hace falta que nos obliguen, que nos lo manden.

Me imagino que si los efectos del cambio del clima fueran más rápidos y palpables (y cercanos) también entraríamos en estado de pánico y empezaríamos a actuar. ¿Recordáis aquel volcán que hizo que no se pudiera viajar en avión en Europa? Lo imposible era posible y no era Greta cruzando el Atlántico. Había otra forma de moverse o de quedarse en su sitio. La crisis del coronavirus pone de manifiesto los problemas de la producción deslocalizada (made in China), del crecimiento económico como mantra, por citar dos, cuando el centro de la vida no está ahí sino en pulmones respirando y corazones latiendo.

Habrá que hacer lo que sea para parar esto. Esperemos que se quede en una pandemia que conseguimos parar, o amainar por lo menos, pero para eso nos lo tenemos que tomar en serio, como si la vida de muchos estuviera en juego. Tenemos los manuales, las recomendaciones, pero algunos no los ponemos en práctica del todo. Parece como si el problema fuera de otros, cuando ya está llamando ahora mismo a nuestra puerta. Estamos para que nos encierren ¡ciérralo antes de que sea demasiado tarde! ¡antes de que pase otro día!

Por mi,
por todos mis compañeros
y, sobre todo,
por nuestros padres y abuelos.

Escrito desde un Bilbao feliz
con pintxos en la barra,
besándonos en la cara,
hablando a medio metro de distancia.

PD: poco después de publicar este post, que escribí anoche para mandarlo por el chat de whatsapp familiar, se anunció el cierre de todas las clases en centros educativos en Euskadi. El resto de medidas está por llegar.

PD2: he montado un repositorio para ayudar a procesar con R los datos del Ministerio de Sanidad.

Una serie de recursos de interés sobre el COVID-19:

Uso de infraestructuras digitales en Montera34

A raiz de un hilo de correo sobre uso de las redes sociales en Internet en Wikitoki y de nuestras infraestructuras digitales, he enviado esto sobre Montera34:

  • Nuestra web (montera34.com) como centro de comunicaciones: publicamos anuncio de actividades que luego son el archivo (recopilación de documento de la actividad). Si no llegamos a tiempo para anunciar, se publica el proyecto/actividad a toro pasado, para el archivo. Una vez se publica en la web se empieza la difusión en las diversas redes.
  • Blogs: lo tenemos descentralizado entre los blogs personales de Alfonso (voragine.net) y yo (numeroteca.org). Pensando siempre si habilitar uno para M34 (montera34.com/blog).
  • Wiki: para documentos activos en colaboración con otras gentes. Documentación de talleres, manuales, recetas, investigaciones abiertas. Ver la del proyecto Efecto Airbnb, por ejemplo: wiki.montera34.com/airbnb
  • Newsletter: sin periodicidad clara pero más o menos cada mes. Anuncio de protyectos/actividades futuras o pasadas. La hacemos con un pllugin desde nuestro WordPress (montera34.com/suscribete).
  • Repositorios de código: usamos github.com y nuestra propia guenta de gitlab en nuestro server. Ver código de proyectos (montera34.com/project-list).
  • Servidor autónomo: todo ello alojado en nuestro server asociativo que pronto será una máquina propia: hosting.montera34.org
  • Redes
    • Twitter: canal más activo de redes sociales en internet donde publicamos o RT cosas en proceso, anuncios, respondemos preguntas. Tanto desde la cuenta de @montera34 como de las nuestras personales. Se publica info ya publicada en la web. Es el canal donde estamos más activos. También manejamos otras cuentas de proyectos en que colaboramos (cadáveres inmobiliarios, bilbao data lab, datahippo, pageonex, kulturometer…).
    • Instagram: abierta pero poco activa. Se publica info ya publicada en la web.
    • Google+: la teníamos poco activa, y ya por fin google va a cerrar el servicio.
    • Youtube: para publicar los streamings y hangouts en directo que hacemos.
    • Facebook: lo mismo que las otras. Se publica info ya publicada en la web… si llegamos a tiempo. Cada vez menos.

En resumen: intentamos publicarlo todo en nuestras propias infraestructura para luego redifundirlo por otros canales. En Twitter es donde más conversamos con otros.

Ni dos ni cuatro partidos, ganan los abstencionistas

Todo empezó por el cansancio que me producen los mapas que colorean las regiones con el color del ganador. A cualquiera le alarmaría un mapa como este:
spanish-elections-2016-3
no porque gane el PP, sino porque da una información muy incompleta fácilmente malinterpretable. Un partido con el 28,7% de los votos emitidos colorea toda las superficie.

Conceptualmente no es muy diferente a este otro, donde se colorea cada municipio con el color del ganador. El nivel de detalle es mayor, por lo tanto vemos más datos, pero creo que el problema sigue siendo el mismo.

Mapa de elecciones generales 2015. 20D en El País http://elpais.com/elpais/2015/12/18/media/1450461184_895079.html
Mapa de elecciones generales 2015. 20D en El País.

Todos comparten el mismo problema the winner takes it all, esto es, aunque en una región haya ganado un partido por un 2% toda ella quedará pintada del mismo color. Prefieron n veces el mapa con el nivel de detalle de los municipios, pero nos sigue representando solamente a los ganadores en uan realidad simplificada. Algunos mapas trabajan con gradientes de los colores para indicar cuánto es el porcentaje de votos de cada partido, como en este buenísimo mapa interactivo:

Elecciones 20D Congreso 2015 en El Español http://datos.elespanol.com/elecciones-generales/resultados/congreso/
Lukas APpelhans y Martín González. Elecciones 20D Congreso 2015 en El Español http://datos.elespanol.com/elecciones-generales/resultados/congreso/

El gradiente aumenta la información que se ofrece al usuario, pero creo que sigue siendo insuficiente si lo que queremos es analizar un sistema de más de 2 jugadores que comparten porcentajes de voto similares. No se trata de mayor nivel de detalle, sino de poder representar en un mismo gráfico al segundo, tercer y cuarto más votados. Se han probado gradientes entre 2, 3 ó 4 colores, pero si ya es difícil interpretar en valores numéricos un gradiente, imaginad lo complicado que es interpretar un color mezcla de distintas intensidades de azul, rojo, morado y naranja.

Si a eso le sumamos que queremos ver a las personas que no han ido a votar y nos olvidamos del mapa de momento… sale algo como la siguiente visualización, donde cada punto representa 10.000 votos en las pasadas eleciones de diciembre de 2015 al congreso:

votos-abstenciones-20d
Puedes ver el interactivo en https://numeroteca.org/electiondots/

Uno de cada cuatro personas con derecho a voto no fue a votar. Los puntos en gris representan a los más de 9 millones de personas que se abstuvieron. Estamos tan acostumbrados a leer los porcentajes de los que votaron, a ver los semicírculos coloreados que representan el congreso, a ver los mapas de los ganadores, que se nos olvida que existen los que no ejercieron su derecho. Ya sabemos que España no es bipartidista, pero tampoco es de cuatro (y algunos más) colores.

Si agrupamos por comunidades autónomas saldría algo así [nota, faltan los votos a Ciudadanos en Galicia]:

elecciones-20d-comunidades-abstenciones-votos

Y en un primer acercamiento al mapa saldría algo así:

elecciones-20d-comunidades-abstenciones-votos-mapa

que es una interpretación de una idea de Mark Monmonier para mejorar algunos problemas de los mapas con gradientes de color o “choropleth maps“.

Lying with Maps. Mark Monmonier. http://archi-intranet.ulb.ac.be/cours/sis/conception/lyingwithmaps.pdf
Lying with Maps. Mark Monmonier.

Hay propuestas muy interesantes para representar la totalidad de los votos, como esta de El Confidencial, aunque no sea geográficamente. Para ver población en forma de puntos aleatoriamente distribuidos dentro de los perímetros de una circunscripción está este buenísimo ejempo del New York Times con los datos del censo. Para representar escaños geográficamente hay ejemplos interesantes como este de El Confidencial que utiliza una retícula hexagonal donde cada hexágono es un diputado (más sobre mapas electorales y retículas en este intereante post de cartonerd).

Nota: parte de los ejemplos e investigación vienen de un proyecto/conversación en marcha con @martgnz.

De propina, os dejo con este diagrama de barras:

abstencione-votos_barras-01

El Color de la Corrupción se va a Valencia

el-color-de-la-corrupcio_valencia-16-junio-2016

Audio (.mp3).

Este lunes 16 de mayo de 2016 estaré en Ca Revolta (Valencia) para hablar sobre El Color de la Corrupción:

El Color de la Corrupción. Conversa Oberta amb Pablo Rey Mazón
Dilluns, dia 16 de maig

Des d’ACICOM, amb la col·laboració de Ca Revolta, L’Observatori Ciutadà contra la CorrupcióHub Cívico i la Unió de Periodistes hem organitzat una CONVERSA OBERTA amb Pablo Rey Mazón (del qual podeu obtindre més informació sota aquestes línies). Volem conèixer de primera mà el treball que desenvolupa Pablo, amb sistemes avançats de visualització de dades, en concret sobre les Portades de la premsa escrita, com a una estratègia d’empoderament de la ciutadania i que ens pot aportar transparència i dades per a la lluita contra la corrupció.

INSCRIPCIÓ GRATUïTA en: https://goo.gl/mALjQm per facilitar organització i interacció.

Peer reviewed paper about PageOneX published at IJoC

160625_pageonex-ijoc

The paper Sasha and I have been working on for quite a long time has just been published at the International Journal of Communication PageOneX: New Approaches to Newspaper Front Page Analysis. We hope it provides an useful guide and resource to the field of the newspapers front page analysis.

PageOneX: New Approaches to Newspaper Front Page Analysis
Sasha Costanza-Chock, Pablo Rey-Mazón

Abstract

PageOneX is a Free/Libre and Open Source Software tool that we designed to aid in the coding, analysis, and visualization of newspaper front pages. Communication scholars have long analyzed newspaper front pages, using column inches as an important indicator of mass media attention. In the past, this involved obtaining physical copies of newspapers, coding and measurement by hand, and manual input of measurements into a spreadsheet or database, followed by calculation, analysis, and visualization. PageOneX automates some of these steps, simplifies others, and makes it possible for teams of investigators to conduct shared newspaper front page analysis online. We review scholarship in this area, describe our approach in depth, provide concrete examples of analysis conducted by media scholars using PageOneX, and discuss future directions for research and development.

Download article (pdf).

Una propuesta: Monitorización de medios

Cobertura de corrupción de enero 2013 a marzo 2014.
Cobertura de corrupción de enero 2013 a marzo 2014.



Monitorización de medios #jpd16 at slideshare.

Audio de la charla (.mp3).

Este sábado estaré dando una charla en las IV jornadas de periodismo de datos en Madrid para tantear el interés en desarrollar un proyecto colaborativo sobre análisis de contenidos de los medios de comunicación en España ¿te animas?

Monitorización de medios (numeroteca)
IVJornadas periodismo de datos 2016
15.30h Sábado 7 de mayo 2016.
Medialab-Prado. Madrid.

Las noticias son noticia. Lo que cuentan, cómo lo cuentan y lo que no cuentan aportan datos para entender cómo los medios de comunicación transmiten la información a los ciudadanos. Necesitamos, en una amplia primera persona del plural que incluye a periodistas y ciudadanos, encontrar formas de archivar toda esa información. Existen bibliotecas y hemerotecas pero ¿qué pasa con los periódicos online? La waybackmachine de archive.org no es suficiente al ritmo con que se actualizan los periódicos en la web.

En mi charla haré un repaso a diferentes herramientas para monitorizar los medios de comunicación. Contaré el proyecto de monitorización de cobertura de corrupción en España a través de las portadas de los diarios impresos (Color Corrupción https://numeroteca.org/colorcorrupcion) y el software que he desarrollado: pageonex.com.

Repaso de iniciativas de monitorización: newsdiff (control de cambios de noticias), Past Pages (pastpages.org), Storytracker (portadas online), PageOneX (portadas papel). Fix the media, T-hoarder (monitorización de Twitter en abierto), monitorización de noticias TV (archive.org), mediacloud…

Porcentaje por género y sección de los 3 periódicos a estudio en el UK News Gender Project.
Porcentaje por género y sección de los 3 periódicos a estudio en el UK News Gender Project.

East Timor vs Cambodia news from film Manufacturing Consent: Noam Chomsky and the Media
East Timor vs Cambodia news from film Manufacturing Consent: Noam Chomsky and the Media

East Timor vs Cambodia news from film Manufacturing Consent: Noam Chomsky and the Media
East Timor vs Cambodia news from film Manufacturing Consent: Noam Chomsky and the Media

Ads vs. News in News York Times Thursday, June 20th 2013 edition of The New York Times
Ads vs. News in News York Times
Thursday, June 20th 2013 edition of The New York Times.

 

Semana grande de la corrupción en PageOneX.com
Semana grande de la corrupción en PageOneX.com

The color of corruption goes PhD

In September 2015 I started a new phase in my research  about corruption coverage in Spain. I’ve joined the Information and Knowledge Society doctoral programme at the Universitat Oberta de Catalunya (UOC). The plan is to convert my research El color de la corrupción into a PhD dissertation in the following years.

Last semester I took two courses on research methodologies: Advanced Qualitative Methods and Research Design in Social Sciences which lead me to draft a research proposal for my dissertation.

Like I did with my architecture master thesis (Proyecto Final de Carrera in Spanish) I plan to document the entire process openly on line. For the moment I’ll use this blog you are reading at numeroteca.org.

There are a lot of things to talk about: selection of the topic, new areas of research, bibliography, methodology, on line education, why in English… and what it means (and why, how) to make a PhD.

I’ll start with this short presentation I prepared two weeks ago for a seminar at UOC to get some feedback about the research proposal. The following month I have to officially present the research plan.

Abstract

The color of corruption coverage in Spain. Agenda setting in a polarized media system.

In the recent years, the fast-growing list of corruption investigations in Spain have involved almost every institution in the country: the major political parties, the royal house, the main unions, the supreme court or the national bank, just to mention some of them. Everyday, new information and a new case is released/unveiled, provoking an increasing sense of indignation. This situation has pushed up the concern for corruption to the second position of the problems perceived in Spain.

Objectives and questions

The objective of this research is to study how corruption is portrayed in newspapers and analyze how corruption coverage influences public opinion:

  • to update theories about the Spanish partisan media ecosystem and understand how media outlets are reacting to the new wave of corruption scandals.
  • to find out if (and how) corruption coverage influences public opinion in order to help readers understand how persuasive is the mass media ecosystem. In a system where people select the newspaper more aligned to their ideology: what comes first, the agenda setting and framing by mass media or the general public predisposition?
  • to study how is the feedback between social networking sites and mass media regarding corruption coverage and how they drive attention to certain stories?

Methodology

We are going to analyze corruption stories in front pages of paper newspaper and home pages of online newspapers to measure the importance given by the media to certain topics. Whereas front page analysis is not new, we propose the use of new methods (PageOneX.com and StoryTracker software) to have better and more accurate metrics that take in account size and visual aspect of the analyzed stories. We plan to complete our research using existing datasets like opinion surveys and databases of social networking sites, like Twitter. Social networking sites are another key element to analyze the influence of mass media in the public agenda and to help understand the triangle media, politics and public opinion.

State of the research

A data visualization of front page data can be accessed at https://numeroteca.org/colorcorrupcion/

Thesis committe

The thesis committee is formed by Ismael Peña (tutor), Sasha Costanza-Chock and Victor Sampedro.

160418_seminar-presentation_uoc

Empieza a andar el grupo Bilbao Data

bilbao-data

El jueves 28 de abril de 2016 empieza a andar el grupo Bilbao Data. De 18.00h a 20.00h estaremos presentando la iniciativa en Wikitoki (Plaza de la Cantera 5, 2º, Bilbao). Hemos montado este grupo para intentar formar una comunidad en torno a los datos. A ver qué sale de todo esto.

Yo hablaré de los diferentes proyectos sobre datos en los que he particpado “Para trabajar con datos hay que generarlos”, en la mayoría de ellos el proceso ha pasado por crear o recopilar datos que no existían.

¿Qué vamos a hacer?

En esta primera sesión se va a presentar la iniciativa de Bilbao Data. Para mostrar qué cosas se pueden hacer algunos de sus participantes presentarán en sesiones exprés ejemplos de proyectos anteriores que han desarrollado.

El evento se integra dentro de las actividades previas de las IV Jornadas de periodismo de datos que tendrán lugar en Madrid de 5 al 7 de mayo 2016.

¿Qué es Bilbao Data?

El grupo de Datos Bilbao nace para explorar nuevas formas de analizar y visualizar datos. Pretende ser un punto de encuentro en Bilbao para todas las personas interesadas en trabajar con datos desde diferentes temáticas: economía, matemáticas, urbanismo o enfoques como la visualización de datos, la cartografía o el software. Todavía no nos hemos juntado, así que no tenemos una definición clara, pero estamos a medio camino entre una comunidad de aprendizaje un lugar de encuentro o un grupo desde el que generar proyectos.

¿Por qué?

Los medios de comunicación nos bombardean con la idea de que en la actualidad generamos más datos que nunca antes. Sería más acertado decir que somos capaces de acumular más cantidades de datos y que a la vez tenemos acceso a muchos tipos de bases de datos ¿cómo podemos hacer accesibles y usar estos datos para nuestro día a día? ¿cómo convertir la infoxicación en información?

¿Quiénes somos?

Un grupo de personas con ganas de pensar y compartir conocimientos en torno a los datos y la visualización de datos. Somos un grupo abierto (de hecho ¡todavía ni nos hemos formado como grupo ni hemos elegido un nombre!) y nos interesa trabajar principalmente con software libre, pero no es imprescindible.
La asociación y espacio Wikitoki (Laboratorio de procesos colaborativos) quiere servir para estos primeros pasos de anfitrión del grupo.

Programa del evento

  1. Presentación del grupo.
  2. Ronda de presentación de los asistentes.
  3. Presentación en modo Ignite (5 minutos por charla) de ejemplos concretos de trabajo con datos
    • Gorka: Mapa del tráfico o posibilidades con Udalmap (por definir).
    • Asier: “Inteligencia Artificial y predicción de resultados en un proyecto industrial”.
    • Aitana Oltra (@AitanaOltra): “Cuando los datos los aportan los ciudadanos” (ciencia ciudadana).
    • Habib Belaribi (@habsinn): “Familias y autismo en Francia: escuchar sobre los medios sociales para proponer otras terapias”
    • Pablo Rey Mazón (@numeroteca): “Para trabajar con datos hay que generarlos”.
    • ¡Tú! Abierto a la participación. Envíanos tu propuesta dejando un comentario más abajo.
  4. Debate sobre pasos futuros para el grupo: ¿comunidad de prácticas? ¿de aprendizaje? ¿desarrollar proyectos en conjunto? ¿punto de encuentro? ¿Creación de lista de correo? ¿siguientes pasos a dar? Próxima reunión encuentro.

Info actualizada sobre el evento en la web de Wiktoki.org.

Soria y los papeles de Panamá

He hecho esta visualización de la cobertura en la prensa escrita sobre el caso de José Manuel Soria, ministro de industria, y los papeles de Panamá.

160415_soria_03
Gráfico disponible en PageOneX.com

Como esta es solo una de las historias de corrupción que han aflorado este mes he codificado las otras historias (Mario Conde, alcalde de Granada, Aznar…) para entender cómo han sido las batallas de atención en las portadas.

160415_soria-otros_03
Puedes ver este gráfico en modo interactivo en PageOneX.com

Kulturometer cabalga de nuevo

Gráfico de distribución presupuestaria de gasto en Cultura del Ayuntamiento de Madrid. 2009.
Gráfico de distribución presupuestaria de gasto en Cultura del Ayuntamiento de Madrid. 2009.

Como continuación del proyecto Kulturometer (2009) que desarrollé en Medialab-Prado durante las jornadas de Visualizar’09: Datos públicos, datos en público junto con otros agentes culturales de Madrid (Atravesadas por la cultura), se presenta ahora la investigación gráfica sobre visualización de los presupuestos municipales del Área de Cultura del Ayuntamiento de Madrid en 2016 que he realizado junto con Mar M. Núñez (noez.org).

Una oportunidad para volver a trabajar y pensar sobre datos en abierto y reutilizables y explorar maneas de visualizar presupuestos públicos. Hace 7 años hice el gráfico de tipo sankey prácticamente “a mano” con Freehand. Ahora he podido usar d3 y el plugin para Sankey, lo cual facilita mucho la tarea.

Merece la pena recordar, si nos remontamos a los orígenes del proyecto, que el objetivo inicial no eran ni los datos abiertos, ni la visualización de datos “per sé”, sino el entender cómo fluía el dinero -o no- desde las instituciones a los productores culturales. Seguimos teniendo eso en mente, aunque el resto de cosas que se han añadido al proyecto nos interesen igualente.

Presentación y debate en torno a Kulturometer 2.0
19.00h Lunes 7 de marzo 2016. Medialab Prado. Madrid.

En esta primera sesión se compartirá la investigación sobre el análisis de los presupuestos. Se darán las claves para poder analizar presupuestos oficiales y por otra se presentarán diferentes análisis gráficos del gasto dedicado a cultura en el Ayuntamiento de Madrid. Será una sesión abierta para que cualquiera pueda compartir sus dudas y preguntas. Todo el mundo es bienvenido.

Taller (fecha por concretar. Junio 2016)

El proyecto Kulturometer 2.0 comprenderá además la celebración de un taller de dos días en primavera (fechas por concretar) en el que se presentarán otras experiencias de visualización de presupuestos y se trabajará de manera práctica con ejemplos concretos de presupuestos de cultura en torno a las siguientes preguntas: ¿Qué herramientas tenemos y podemos usar para hacer análisis comparativos de presupuestos, tanto para uso interno de las organizaciones como para hacerlos accesibles y comprensibles para la ciudadanía? ¿Qué tipo de procesos de participación podemos poner en marcha para deliberar sobre los presupuestos públicos?

Spam en mi buzón

Este es un experimento para medir la masa de papel de spam o correo no deseado que ha llegado a mi buzón durante el año 2015.

Durante el 2015 recibí 5,31 kg de publicidad en mi buzón.

Si en Bilbao hay 160.283 viviendas (según eustat), podemos extrapolar y calcular que serían 851 toneladas de papel/año solo en Bilbao.

Considerando que no todos los barrios y viviendas reciben la misma cantidad de propaganda, podemos minorar este resultado. Pensemos que 100.000 viviendas han acumulado la misma cantidad que mi buzón: serían 531 toneladas de papel al año. Casi 1,5 toneladas de papel por día.

He recogido los datos porque no había otra forma de evaluar la cantidad de spam de otra manera ¿Te animas a pesar la publicidad en tu buzón durante este año para hacer un estudio comparativo?

Así ponemos un grano de arena en forma de datos para acabar con el correo indeseado.

Nota: He incluido los 412 gramos de las páginas amarillas y los 362 gramos de un catálogo de juguetes.

Medir los titiriteros en TVE

Va haciendo falta desde hace tiempo iniciativas y herramientas para medir a los medios de comunicación. Desde hace un tiempo he desarrollado un software para medir la superficie dedicada en portadas de prensa impresa. Existen otras herramientas para medir Twitter, las portadas de los diarios online (story tracker), modificación de noticias en periódicos online (newsdiffs), pero no hay datos accesibles sobre uno de los medios de masas más importantes: la televisión. Al menos en España, no contamos con el archivo abierto que almacena toda la TV de EE.UU. 24 horas al día.

Durante el caso Zapata hice un inicio de experimento de captura de datos de los telediarios de TVE que no llegó muy lejos. El tuit de @MatthewBennett de más arriba me recordó la necesidad de tener los datos accesibles. Ahora algunos de los telediarios de TVE están minutados, incluso algunos disponen de la transcripción completa, valía la pena probar el experimento de nuevo. Una duda ¿por qué no todos los telediarios disponen de la misma información: transcripción + minutaje? Misterio.

En un rato libre me puse manos a la obra para corroborar los datos de Matthew. Mi estudio es sobre los datos del telediario de medio día, los suyos, creo que del de las 21h:

Puedes ver los datos recopilados a partir del minutaje que ofrece la propia página del telediario de medio día del 8 de febrero de 2016.

He montado unos sencillos gráicos de barras para mostrar el tiempo dedicado a las noticias. El fútbol gana (7:49 min), aunque también es cierto que no he sumado en el gráfico el tiempo dedicado a los pactos para formar gobierno, que anda cerca de los 9 minutos (8:41). El caso de los titiriteros se lleva 5:40, la bolsa 2:42 y los casos de corrupción Taula 1:23 y Nóos 1:02.

La duración no solo es lo importante, por eso he incluido un gráfico para ver en qué orden se emitieron las noticias. Abrieron sobre el caso de los titiriteros. Más tarde fue el tema que siguió la crónica política de los pactos.

Cobertura titiriteros telediario TVE

Habría que analizar también qué y cómo se contó la noticia, se lo dejo a otros. Aquí un avance:

Post relacionados: midiendo las intervenciones en una asamblea de Occupy Boston.

 

Superficie en portada dedicada a cada partido en #elecciones20D

Recopilo en este post los diferentes análisis que voy realizando sobre la cobertura en portada de prensa de los principales periódicos generalistas en España (El País, El Mundo, ABC, La Razón y La Vanguardia) durante el periodo electoral de las elecciones generales del 20 de diciembre de 2015.

El análisis, datos y las portadas han sido realizados con el Software PageOneX.com y están disponibles en el hilo abierto y visualización interactiva Partidos en portada #elecciones20D (PageOneX). También puedes usar y descargar los datos  de esta hoja de cálculo.

 

portadas-elecciones-3-por-periodico

portadas-elecciones-4-por-periodico-negativo

portadas-elecciones-3

 

elecciones-202-161215

 

 

 

Probando la base de datos de cadáveres inmobiliarios en varios mapas

Todavía quedan muchos cadáveres inmobiliarios que adoptar.
Todavía quedan muchos cadáveres inmobiliarios que adoptar.

Nota: Artículo también publicado en la web de Cadáveres Inmobiliarios.

Se muestran aquí las primeras pruebas que hemos desarrollado desde Montera34 de cara al festival Arquinset 2015 que tendrá lugar en noviembre 2011 con los datos existentes en Cadáveres Inmobiliarios. Esto engloba las bases de datos previas que han aportado diferentes colaboradores y la base de datos de cadáveres inmobiliarios. Los mapas están desarrollados con cartoDB.

Cadáveres (inmobiliarios) adoptados vs Cadáveres desenterrados


Mirad los puntos negros, que son los cadáveres detectados (“desenterrados”) y los amarillos, que son los cadáveres que han sido adoptados. ¡Aún nos quedan muchos muchos puntos por adoptar!

El proceso de adoptar consiste en ampliar la información de cada uno de los puntos y estructurarla según la base de datos de Cadáveres Inmobiliarios.
Continue reading

Dos años y medio de corrupción en portadas #ColorCorrupción

150520_explicacion-colorcorrupcion

El color de la corrupción, el proyecto que comencé en 2013 a raiz de la cobertura del escándalo de los papeles de Bárcenas y la contabilidad B del PP, ha continuado hasta hoy.

He reunido todos los datos recopilados hasta la fecha en para evaluar cuánto dedican a cada partido político o institución las portadas de los periódicos impresos. He usado PageOneX un software que estoy desarrollando, para analizar todas las portadas.

La idea es que se puedan usar esos datos tanto para controlar cómo están tratando la corrupción los medios impresos, como para controlar la dieta mediática que consume cada cual.

Complementa el gráfico el dato de percepción de la corrupción y el fraude como problema según el barómetro del CIS.

1505_mayo-corrupcion-elecciones