¿Dónde es más necesario crear liceos? Parte I

Hace tiempo que estoy con ganas de empaparme y jugar un poco con Spatial Data Science. El hecho de combinar GIS (Sistemas de Información Geográfica), DBMS (Sistemas de Gestión de Bases de Datos), Data Analytics y Big Data me divertía bastante pero no encontraba una excusa o un problema concreto que me motivara resolver.
Hace tiempo que Ernesto Talvi, precandidato a la presidencia de la República por el Partido Colorado, repite a todo aquel que lo quiera escuchar su propuesta de crear 136 liceos públicos modelo en todo el país. Ahí encontré un problema que me interesara ¿dónde iría a crear esos liceos Ernesto Talvi?
Él en sus discursos dice que los hará en “los barrios más vulnerables del país” donde “sólo 13 de cada 100 termina el liceo”. Resulta razonable ya que, de acuerdo con la INEEd, las diferencias más importantes en relación a la tasa de egreso de la educación media superior se encuentran cuando se considera el contexto socioeconómico: la tasa es de un 64,1% de egreso para los jóvenes del quintil 5 (más ricos) y un 12,5% para los del quintil 1 (más pobres).
A mí se me ocurrió resolver el problema de localizar los 136 liceos de otra manera. Mi idea era localizarlos de forma que el Uruguay estuviera lo mejor cubierto posible, es decir, intentar minimizar la distancia desde cualquier punto del país a un liceo.
La primera solución intuitiva que se me ocurrió fue la de posicionar en el mapa de Uruguay todos los liceos que existen actualmente y dibujar circunferencias que irían aumentando su diámetro. Al ir aumentando el diámetro llegaría un momento en el que esos círculos cubrirían todo el país menos un único punto. Ese punto, que está por fuera de todas las circunferencias, sería el punto más lejano a cualquier liceo existente, ahí deberíamos construir nuestro primer liceo. Este proceso debería repetirse 136 veces más, teniendo en cuenta en cada iteración los nuevos liceos creados ¡y listo!
El primer problema sería geolocalizar todos los liceos existentes, no sabía si esa información existía. Por casualidad, coincidí en una reunión con “El Chino”, que realmente se llama Daniel Carranza, co-founder de DATA Uruguay que está metido en todo el tema de Open Government, Open Data and Civic Tech y mencionó que esa información existía, así que luego le mandé un mail para que me dijera como lo podía conseguir y me pasó un link al catálogo de datos abiertos.
El problema al que me enfrenté es que las coordenadas estaban en el sistema EPSG:32721 WGS 84 / UTM zone 21S. El área de uso de este sistema es entre los meridianos 60°W y 54°W y entre el paralelo 80°S y el Ecuador. En otras palabras, se utiliza en los países Argentina, Bolivia, Brasil, Paraguay

No me gustaba mucho tener que usar ese sistema, prefería usar el EPSG:4326 WGS 84 que es el que usan los GPS, GoogleMaps, aplica a todo el mundo y no solo a una región específica y al que estaba más acostumbrado.
Luché para intentar hacer una función que transformara un punto de una coordenada a otra, intenté buscar cómo se podía hacer y no hubo caso. Salió al rescate mi amigo Andrés Aguiar (de Quanam) al que le tenía toda la fe y encontró (no sé dónde) una fórmula “aproximada” (él sabe de estas cosas porque navega en barcos y demás). El problema con la fórmula es que asume que la Tierra es una esfera perfecta y sabemos bien que no lo es.
Encontré páginas web que hacen la conversión y las intenté consumir tipo WS (con librerías Python tipo http.client, urllib): asumieron que era un scrapper y me bloquearon.
Intenté hacerlo usando Selenium (es una herramienta que sirve para automatizar tareas que uno puede hacer desde su browser, generalmente para automatizar test de aplicaciones web) pero tampoco pude: se graban todos los pasos, se genera el script pero el input de salida no tiene el método store value, store text, store title, nada.
Con el BadBoy software, que es una aplicación utilizada con propósitos similares al Selenium, tampoco tuve suerte.
Probé varias APIS pero como no tenía ganas de pagar me limitaban la cantidad de requests, mensajes como los que se muestran a continuación son recurrentes y no existía la chance de hacerle un sleep al thread hasta que pudiera volver a consultar porque no terminaba nunca más en la vida:

urllib.error.HTTPError: HTTP Error 429: Too Many Requests

o

<geonames><status message=”the hourly limit of 1000 credits for hectorcotelo has been exceeded. Please throttle your requests or use the commercial service.” value=”19″/></geonames>

Al final fuimos a lo simple, lo que no se me había ocurrido, una librería, la querida pyproj! Lo que hace es justamente realizar transformaciones cartográficas entre coordenadas geográficas (lat / lon) y proyección de mapas (x / y). También se puede transformar directamente de un sistema de coordenadas de proyección de mapas a otro. Las coordenadas se pueden dar como numpy arrays, python arrays, listas, etc. Va un ejemplo del código:

Solucionado ese tema, iba a poder arrancar con la solución.

Ampliamos las circunferencias…

Un poco más

Y un poquito más

Se ve que con ese tamaño de circunferencias hay 3 áreas que aún no están de azul, los puntos serían aproximadamente -57.049, -31.798 (en Paysandú, cerca de Paso del Parque Daymán), -30.886, -56.430 (en Salto, cerca de la frontera con Artigas) y -32.220, -53.717 (en Cerro Largo, cerca del Río Yaguarón).
Esa solución sería posible de implementar. Si tenemos una circunferencia cuyo centro es el punto C (a, b) y con radio r, la ecuación ordinaria es (x ─ a)^2 + (y ─ b)^2 = r^2. Si sustituimos cada uno de los puntos que están en el Uruguay (x,y) en cada una de las ecuaciones de las circunferencias de los liceos y en todas da mayor a 0 significa que está por fuera de todas las circunferencias mientras que, si en al menos una da negativo significa que ese punto está dentro del “radio de influencia” del liceo en cuestión.
Verán que, si bien se puede hacer, no parece muy informatizable. Es decir, intuitivamente está bien. Si la idea es que la solución sea visual también está muy bien, pero justamente, es una solución más pensando en lo visual, de la forma que lo solucionaría un humano, frente a la mejor forma en la que lo resolvería una computadora.

En próximos artículos seguiremos desmarañando otras posibilidades para llegar a una solución. No me rendiré.

Héctor Cotelo  @CoteloHector

Consultor en Business Analytics & Information Management

Leave a Reply