Rango Finito

fotoscódigoobservatorioshermanocerdo temas plots

cuentas

149

Escribir una entrada diaria numerada me ha permitido soltar en un par de conversaciones, como si fuera cualquier cosa, cuantos días llevamos este año. Todo muy casual. Creo que a eso se limitan por lo pronto los beneficios de este ejercicio ocioso y sin norte. No que esperara nada, la verdad.

Secuestros (sobre persona específica)

De nuevo los datos vienen de acá. Esta vez es una tabla de secuestros desde 1970 hasta 2010 que supongo es la misma que usa Natalia Springer en sus investigaciones para la fiscalía. Difícil saber qué tan válidos son esos datos (las fuentes cambian un montón). Me restrinjo para estos gráficos a secuestros sobre persona específica, la modalidad de secuestro más popular en Colombia. Por lo pronto me limito a números absolutos y no a índices relativos a población. No encuentro series de población por departamento en la página del DANE desde 1970. Sólo están disponibles, hasta donde pude ver, desde 1985.

Haga clic en los gráficos si quiere verlos más grandes.

Primero, contemos año por año:

secuestros.totales

Ahora contemos por autor (presunto):

porcentaje.secuestros.autor

A continuación la series año por año para cada departamento excluyendo a Antioquia:

secuestro.por.departamento

Excluyo a Antioquia porque la escala es totalmente distinta. En el siguiente gráfico, de arriba a abajo, vemos: (1) la serie para Antioquia en tono sólido y las series del gráfico anterior difuminadas; (2) la serie para Antioquia junto a la serie para el total nacional (punteada); (3) el porcentaje año a año de secuestros sobre persona específica en Antioquia con respecto al total nacional.

secuestros.caso.antioquia

Ahora contemos los secuestros atribuídos a las FARC comparados con los totales nacionales tanto en números absolutos como en porcentaje:

secuestros.caso.farc

Y de nuevo discriminemos por departamento esta vez limitados a secuestros de FARC:

secuestros.farc.departamentos

Aquí están el código y los datos en formato CSV.

Asesinatos selectivos

Con datos de acá, cuatro gráficos sobre asesinatos selectivos en Colombia desde 1981 hasta 2012.

Así definen el asesinato selectivo:

Es el homicidio intencional de 3 o menos personas en estado de indefensión en iguales circunstancias de modo, tiempo y lugar, perpetrados por los actores del conflicto armado.

Primero, asesinatos selectivos por año con la atribución dividida en cuatro grandes categorías:

asesinatos.selectivos.montanas

Segundo, una vez más por año pero ahora dividiendo por departamento (en número en la esquina superior derecha de cada panel es el total departamental):

conteoyeardepartamento

Tercero, asesinatos selectivos por período presidencial con la atribución a mayor nivel de detalle (ojo a la escala logarítmica en el eje horizontal) y promedio por día para cada gobierno:

conteoporpresidente

Finalmente, asesinatos selectivos en total por atribución:

conteototalautor

17

diferencias.resultados.participacion

Un problema de las denuncias de Uribe usando conteo de votos como un indicador de fraude es que no toma en cuenta que el total de participación también aumentó. Para hacer un análisis mínimamente serio sería importante considerar la diferencia de resultados como porcentajes del total de participación en cada vuelta. Esto daría una medida más justa del ascenso de los candidatos en los diferentes municipios. En esta gráfica calculo este valor para ambos candidatos y lo comparo con el cambio en la participación (como porcentaje del potencial electoral). Ambas nubes son relativamente similares salvo por ligeras diferencias regionales como un repunte de Santos en la costa caribe y el suroccidente y un repunte de Zuluaga en el nororiente. Otro punto clave es que Zuluaga perdió fuerza (diferencia de resultados negativa) en muchos más municipios que Santos). En todo caso, muy probablemente es posible encontrar ejemplos de saltos notables de votación para Zuluaga en Santander similares a los que Uribe denuncia para Santos en la costa como prueba de fraude (aunque en ese caso me imagino que la interpretación de Uribe será que el sentir popular motivó a los votantes independientes (“de opinión”) para apoyar al señor Zuluaga). En el gráfico de cajas a continuación presento las distribuciones de cambios de resultado para ambos candidatos para cada región. La pelea fue pareja pero entre Bogotá, sobre todo Bogotá, y la costa le dieron a Santos la victoria:

cajas.regiones.dif.resutados

En Foco Económico, Nicolás Idrobo y Pablo Querubín publicaron este análisis sobre los resultados de las elecciones utilizando algunos de los datos que recopilé. Vayan y lean.

16

diferencia.resultados

Para cada municipio tomo el total de votos depositados y para cada uno de los dos candidatos calculo la proporción de votos que le corresponden (un número entre cero y uno). Lo hago en primera y segunda vuelta por separado y después resto el valor de primera vuelta del de segunda vuelta. El resultado es un número que, para cada candidato, me dice cómo mejoró (o empeoró, si es menor que cero) su resultado en el municipio. En el gráfico están las distribuciones de estos valores para los dos candidatos de la segunda vuelta. Los puntos sugieren potencial electoral de los municipios. La caja difuminada es la representación tradicional de distribuciones de valores numéricos. Los colores son las regiones que usa el Banco de la República.

15

Esta gráfica se podría llamar “Por qué Santos ganó”:

diferencias.participación.segunda

Y aquí está la tabla con el conteo de votos a nivel municipal hasta donde va a las 11:30pm de hoy.

A ver en qué termina ese tal proceso de paz.

16

Empleadas internas

Esta es una nueva versión del ejercicio con el índice de empleadas domésticas internas. Creo que es mejor enfocar el mapa en los departamentos y que los datos para municipios se vean en una tabla contigua. Por sugerencia de Katherine incluí la población para cada departamento/municipio mencionado.

Algo que descubrí haciendo los cálculos es que Antioquia se lleva de lejos a todos los demás departamentos en el número de municipios con más de 10.000 habitantes. Mientras que la mayoría de los departamentos centrales tienen unos 10-20 municipios en esta categoría, Antioquia suma 42. Curioso.

Y hablando de servicio doméstico, en este artículo sobre un fracaso en Silicon Valley mencionan, como evidencia de las excentricidades y excesos del muchacho emprendedor protagonista, que tenía una empleada interna. Y este es un pelao con un apartamento en el centro de San Francisco que vale más de un millón de dólares. Pone los números de Colombia en perspectiva.

16

Mapa con partidos ganadores de las elecciones al Senado a nivel municipal. No sobra decir que ese no es necesariamente el partido del candidato con mayor número de votos del municipio. Eso tal vez lo mire después (en otro juguete o una extensión de este) candidato a candidato.

Aquí tengo una lista con todo lo que he hecho sobre las elecciones parlamentarias del domingo pasado así como enlaces a las tablas de datos que he descargado y organizado. Seguirá creciendo poco a poco hasta que me aburra.

9

Aquí un gráfico con la distribución del Senado que parieron las elecciones de 2010 más un estimado de los departamentos donde los partidos tuvieron candidatos fuertes (¿algo así como dominio territorial?). A ver qué pasa hoy.

19

Por culpa del mapa de homicidios, ayer me crucé con varias personas que se rehusan a aceptar datos (si es que los leen) cuando estos ponen en duda (o incluso cuando no demuestran contundentemente) la mitología política asumida. Frente a una tendencia clara de reducción de homicidios en un cierto período responden con teorías de conspiración de bolsillo y se sostienen (so pena de sonar enajenados o agüevados) en sus narrativas populares de los baños de sangre apocalípticos y la violencia desatada (¡la más alta de la historia!). Una mujer proponía ayer que la reducción de la tasa de homicidios entre 2002 y 2010 se debió (en las narrativas fáciles todo siempre se explica de un escobazo con un solo factor, en lugar de reconocer que detrás hay siempre una red compleja de condiciones no siempre controlables y altamente aleatorias) a manipulaciones perversas de la “tasa demográfica” (?) en la registraduría, para poner un ejemplo. Otros no pueden aceptar los datos porque consideran que la práctica de los “falsos positivos” (un eufemismo periodístico horrible y ya extendidísimo para referirse al asesinato metódico de muchachos por parte de miembros de las Fuerzas Militares para hacerlos pasar por guerrilleros caídos en combate, acreditar éxitos operativos y ganar permisos, recompensas y condecoraciones) debería amplificar contundentemente las estadísticas de homicidios en general (aunque en la práctica correspondan a menos del 3% de los homicidios cometidos en un año). Y es verdad que estos crímenes son una atrocidad inaceptable, una vergüenza. Y son todavía peores cuando se reconfirma todavía hoy que dentro de las Fuerzas Militares son percibidos como errores casi exculpables de la guerra. Pero yo no me atrevería a decir que el resto de homicidios (en la escala de decenas de miles cada año — las tasas de homicidio, incluso ahora que están en caída, siguen siendo preocupantes) son menos serios. Los conteos son burdos e inexactos (a veces incluso tendenciosos) pero ayudan a poner las historias que nos contamos en perspectiva, a contrastarlas, a cuestionarlas. Aprender a leer números y tomarlos en cuenta no limita ni pervierte. No nos debilita. No deforma el mundo (ese está afuera, no en las tablas, y hay que volver a él siempre). Tampoco nos convierte en cínicos. Es una habilidad valiosa (una de tantas) para no perderse en las exageraciones y vaguedades comunes en discursos políticos. Las gráficas y las tablas no son generadores automáticos de conclusiones incontrovertibles sino plataformas para discutir y tomar distancia ocasional. No podemos sobrevalorarlas pero tampoco desestimarlas.

Capicúas

Esta tarde escribí un cuaderno de iPython para jugar con números capicúas. La motivación fue este problema propuesto por Cédric Villani en su sección recién inaugurada de juegos matemáticos de Le Monde. (Loable el esfuerzo de Villani por promover personalmente la matemática entre la gente del común, por cierto. Y adorable su uso (francesísimo) de tablero y tiza para presentar y resolver los problemas. Cada vez me cae mejor.)

Siete meses

Hoy Laia cumple siete meses. Esta semana pasó del grito esporádico a la articulación descontrolada y constante de sonidos, especialmente cuando alguien cerca habla. Ayer dijo varias veces “Ta-ta”. Ya asumí que se refiere a mí. En la piscina conversa con cualquiera que le preste atención. Ha tenido unas cuantas noches difíciles últimamente. Sospechamos que tiene que ver con la llegada inminente de un diente. La piscina la deja exhausta y duerme muy bien durante el día. Ayer me di cuenta de que ahora llora por antojos y no sólo por necesidades fisiológicas básicas. Llora porque Plinio no se acerca lo suficiente o la ignora. También llora porque no le traigo el juguete que quiere. Hoy, mientras jugábamos en la sala, un halcón inmenso se paró por un par de segundos en el árbol frente a la ventana. Creo que iba tras las torcazas residentes. Cuando me levanté para mirarlo mejor levantó vuelo de nuevo entre la nevada.

I went through a sudden period where I couldn’t read

Llevo meses postergando este ejercicio. Hace un par de semanas le dediqué una tarde, pero con la muerte del computador perdí el trabajo (entre muchas otras cosas), así que ayer por la noche lo volví a hacer. El resultado final es más oscuro que iluminador pero qué más da. Su génesis se encuentra en el largo monólogo de Chris Fogle que ocupa el capítulo §22 de The Pale King, la (pseudo)novela póstuma de David Wallace:

[I]nstead of reading something I’d count the words in it, as though reading was the same as just counting the words. [En lugar de leer algo contaba sus palabras, como si leer fuera lo mismo que sólo contar palabras.]

The Pale King (en español El rey pálido, traducción de Javier Calvo) es el esqueleto escueto de una novela que, estimo, rondaría las 1500 páginas (i.e., apenas un tercio de la novela fue concluída). Está estructurada (al menos en su primera edición) en 50 capítulos que, tras la muerte de Wallace, fueron dispuestos en orden lineal por su editor (Wallace no dejó mayores directivas al respecto). Mi pregunta inicial, intencionalmente ingenua, era cómo automatizar ese trabajo o al menos facilitarlo mediante un procesamiento automático del texto que involucrara, cómo no, conteos de palabras.

Gráfico del logaritmo de la extensión en carácteres de cada uno de los capítulos de The Pale King

Con el tiempo, sin embargo, me decanté por un ejercicio alternativo más a mi alcance: (1) Calcular una distancia léxica entre los capítulos, y (2) Disponerlos como puntos en un plano de manera que respetaran (dentro de lo posible) la distancia propuesta. Mi teoría era que un gráfico de ese estilo sería una herramienta útil (un criterio más) para facilitar la organización del texto. Ya no estoy tan seguro.

*

El primer componente del ejercicio es la distancia. La aproximación más intuitiva al cálculo de distancias entre documentos (este artículo de Anna Huang ofrece un sobrevuelo por varios métodos) se basa en recolectar una lista de palabras presentes en los documentos (más detalles adelante) y utilizarlas como base de un espacio vectorial. Bajo este esquema, a cada documento le corresponde una combinación lineal de la base con escalares elegidos de acuerdo al número de apariciones (frecuencia) de la palabra en el documento. Así, si la lista de palabras es $\{v_i\colon 1 \leq i \leq M\}$, entonces un documento $d$ es representado por el vector $M$-dimensional $$\sum_{i=1}^M f_i(d) v_i,$$ donde $f_i(d)$ es igual al número de apariciones de la palabra $v_i$ en el documento $d$. Una vez representados de esta manera, calcular distancias entre documentos se reduce a aplicar el teorema de Pitágoras.

Una versión sólo un poco más sofisticada de lo anterior se basa en la siguiente observación: si una palabra $v_i$ es muy frecuente en un documento $d$ pero también está presente en la mayoría de los documentos disponibles (supongamos que tenemos $N$ documentos) entonces probablemente no sea tan representativa del documento $d$ como cabría esperar inicialmente. Para tomar en cuenta esto, reescribimos la representación vectorial del documento $d$ como $$\sum_{i=1}^M f_i(d) \log\left (\frac{N}{P_i}\right ) v_i,$$ donde $P_i$ es igual al número de documentos que contienen la palabra $v_i$. De esta manera, la frecuencia de la palabra $v_i$ en cada documento es penalizada multiplicándola por un número ($\log(\frac{N}{P_i})$) que se acerca a cero entre más documentos la mencionen.

Así, al final el problema del cálculo de distancias se reduce a decidir cuál debe ser la lista de palabras que se utilicen como base del espacio vectorial de documentos. Siguiendo (a mano alzada) el artículo de Huang, tras una serie de filtros sencillos que removieran diferencias innecesarias y contenido irrelevante busqué (usando NLTK, la navaja suiza del análisis automatizado de texto) todas las palabras que aparecieran más de siete veces en todo el libro. 2060 palabras (aproximadamente un décimo de las que contiene el libro) cumplían con esta condición. Esto en particular implica que los capítulos del libro son representados por puntos en un espacio de dos mil y tantas dimensiones. Calcular distancias entre ellos, ya lo dije, es sencillo. Verlos en un plano es otra historia.

*

Había sobrestimado seriamente la incomprensibilidad del texto. Un conteo burdo de nombres propios en páginas 12-21 ofrece 38, 28, 17, 28, 40, 32, 31, 31, 18, 22. Número medio por página, 28,2, desviación estándar de 6,9, 70% de los datos a s de la media. Número promedio de palabras por página basado en una muestra de 2, 302. O sea 9% de comprensibilidad. Alto.

— H. DeWitt, Ese oscuro objeto del deseo

*

No sé por qué pensaba que el problema de aplanar dimensiones debía estar completa y contundentemente resuelto desde hace décadas. Fue difícil dar por mi cuenta con soluciones convincentes. Finalmente, Juan Manuel me sugirió revisar los métodos de manifold learning implementados en scikit-learn. Para mi sorpresa, varios de los algoritmos disponibles son bastante recientes y provienen de laboratorios de ciencias cognitivas interesados en visión. El que elegí para mi ejercicio, Isomap, fue desarrollado por Josh Tenenbaum (y amigos) cuando trabajaba en Stanford.

La conexión entre visión y reducción de dimensiones se basa en el hecho, permítome ser burdo, de que el ojo cuenta con (muchísimos) sensores que registran el estímulo (imaginen cada sensor como un vector independiente) y luego el cerebro toma esas (combinaciones lineales de) señales y compone una imagen bidimensional (o tal vez un par). ¿Cómo lo hace? Ni idea. Los métodos de manifold analysis intentan simularlo. La idea es asumir que un conjunto de puntos en un espacio de dimensión alta yacen sobre una superficie (de ahí el término manifold) y luego aplanarla preservando en lo posible distancias locales. En el caso particular de Isomap primero se construye un grafo que captura, mediante la imposición de vértices, el sabor local de la colección de puntos, luego se define una distancia optimizada sobre el grafo y finalmente se soluciona un problema de optimización para encontrar los puntos de baja dimensión correspondientes (para el interesado en por qué y cómo funciona, aquí hay detalles y aquí todavía más detalles). Como es de esperarse, entre más puntos, mejor el resultado.

*

Tal vez cincuenta puntos no sean suficientes. (Aquí más grande.)

Este de arriba es el resultado de aplicar Isomap a una versión normalizada (para evitar desequilibrios por diferencias de extensión) de los 50 puntos 2060-dimensionales que representan, de acuerdo a la lista de palabras elegidas, los 50 capítulos de The Pale King. Así se ve. Con Javier discutimos una noche los posibles significados de varios gráficos similares a este pero no logramos decidir si se conectaban de alguna manera con la sustancia del libro, lo que quiera que eso signifique. La verdad, prefiero que sea así. El anticlímax tiene naturaleza de Buda.

*

Anoche, antes de acostarme, se me ocurrió un posible orden lineal que se desprendería de estos cálculos: organizar los capítulos de acuerdo a la distancia al centro de masa (Isomap lo clava en $(0,0)$). El orden sería: §20, §6, §9, §22, §2, §14, §13, §7, §15, §16, §35, §32, §21, §46, §31, §17, §43, §26, §29, §45, §4, §8, §42, §19, §39, §10, §38, §33, §24, §50, §36, §27, §44, §47, §49, §12, §34, §23, §5, §1, §18, §11, §28, §30, §41, §48, §37, §3, §40 y §25. Ya puestos, calculé directamente sobre los puntos originales (en el espacio de dimensión 2060) y en ese caso (cambia, obviamente) el orden es: §22, §24, §2, §27, §42, §30, §7, §19, §33, §9, §5, §14, §47, §6, §49, §16, §8, §46, §43, §15, §13, §23, §36, §32, §26, §45, §39, §3, §12, §18, §29, §20, §17, §48, §38, §37, §50, §21, §31, §4, §35, §44, §1, §11, §41, §40, §28, §34, §10 y §25. En ambos, el recorrido se cierra en ese capítulo neurótico a dos columnas (Devils are actually angels) que describe la tediosa cotidianidad diaria de la oficina de impuestos (casi todos los personajes son mencionados), y se inicia (o casi) con el soliloquio de Chris Fogle (§22) sobre, entre otras cosas, su tendencia a contar palabras en lugar de leer. También podrían organizarse en sentido inverso, como en una espiral hacia el origen. Tal vez eso tenga más sentido.

Bogotá en bola

El ejercicio era hacer una versión automatizada y animada de esto usando la mezcla HTML5+JScript (de la que sabía/entendía muy poco). Bogotá en bola representa, usando bolas, algunos datos sobre Bogotá (recopilados mayoritariamente por Miguel con ayuda de sus contactos en el bajo mundo burocrático — estamos en el proceso de aclarar las fuentes) a nivel de localidades. En varios de los gráficos (o en las transiciones entre uno y otro) quedan en evidencia las disparidades y contradicciones de la ciudad. En un área relativamente pequeña caben muchas ciudades con características dispares (casi universos paralelos) y estas disparidades a su vez generan barreras (algunas físicas y otras más sutiles y poderosas) que refuerzan las diferencias.

*

Aporte de homicidios por localidad al total de la ciudad en 2011

Aunque puse una leyenda explicativa en la esquina inferior izquierda de cada gráfico, tal vez valga la pena explicar mejor qué quiere decir cada una. Si dice “Aporte porcentual por localidad al total de la ciudad” entonces la bola sobre cada localidad representa (ejem) el porcentaje que la localidad aporta al conteo total de la ciudad. Si, en cambio, dice “Porcentaje sobre el total en la localidad” entonces cada bola representa el porcentaje de población en la localidad con tal o cual característica sobre el total de la localidad. Así, el grafo de Hogares con teléfono similar al de Población (porque el aporte por localidad al total de la ciudad es muy parecido al aporte de población total) pero en el grafo de Teléfono (relativo) (del segundo tipo) las bolas son todas de tamaño similar, porque el porcentaje de teléfonos por localidad es casi uniforme en toda la ciudad (con internet, por ejemplo, ya no es así).

*

Para representar la ciudad por localidades la describimos con un grafo de contigüidad (entre la localidad A y la localidad B hay un vértice si comparten una frontera) y calculamos la disposición del grafo utilizando la librería arbor.js, que determina la posición de los nodos (asunto en el que francamente no quería pensar) de acuerdo a un modelo físico. Es muy práctica (aunque tal vez un poco pesada). Un primer problema de esta aproximación es que La Candelaria está totalmente rodeada por Santa Fe y por tanto en el grafo se vuelve una cola. Otro problema obvio es el siguiente: dado que la configuración inicial de nodos es semi-aleatoria, existe la posibilidad de que el grafo generado sea una imagen especular del grafo deseado (o que salga enredado). Para compensar el grafo admite la opción de ser reconfigurado moviendo nodos como si fuera de caucho. Esto permite, con un poco de maña, adecuar la ciudad a la imagen preferida por el usuario. (Una posible tarea que surge de acá es cómo generar y describir con algo parecido a arbor.js grafos que sean orientados sobre una superficie bidimensional. No he mirado.)

Tasa de homicidios (i.e. número de homicidios por cada 100 Khab) por localidad en 2011

The Pale King (Un juego: conteo y lectura)

Situación: Suponga que tiene N (50) capítulos de una novela. Los capítulos están interrelacionados pero tras la muerte del escritor no hay manera sensata de decidir un orden lineal explícito. El editor hace lo que puede y organiza un libro a partir de la fragmentación, sobre ella, gracias a ciertas pistas, con la tranquilidad de que los lectores del escritor están acostumbrados al desorden (entre tantas otras cosas) y aceptarán sin mayor problema cualquier disposición propuesta. Son las cosas de la postmodernidad bien asumida.

Problema: Dado lo anterior, tal vez el mejor orden es suponer que no hay un orden sino apenas afinidades entre las partes y proponer, en lugar de una disposición lineal, un grafo de conexiones. ¿Es posible detectar automáticamente las interrelaciones entre los capítulos (claro, se podría hacer manualmente (para allá va esto), pero el reto aquí es restringirse a herramientas sintácticas)? Este análisis, por supuesto, no puede llegar demasiado lejos. ¿Pero será posible, por métodos de conteo y análisis estadístico de texto simples (o semi-simples), reconocer con cierta certeza los capítulos que tratan los mismos temas o hablan de los mismos personajes? Mejor dicho: ¿Será posible leer este libro sin leerlo (¡herejía!) mediante un conteo cuidadoso de sus palabras? (Problema difícil en general. Muy difícil.)

Tamaño de los capítulos en bytes

[…] instead of reading something I’d count the words in it, as though reading was the same as just counting the words.

D. Wallace, The Pale King (§22)

(Continuará, creo…)