Todo lo necesario para subir capas a CartoDB desde Python

La plataforma de CartoDB es por muchos conocida, y se está situando como referente en la visualización de datos geográficos. Ya realicé hace casi dos años un post sobre ejemplos de esta plataforma, donde además se incluía una charla-taller organizada por Geospatial Training, realizada por Alejandro Martínez, ingeniero en CartoDB.

Si no conocíais esta plataforma podéis entrar se web para descubrir ejemplos de uso o para aprender mediante tutoriales a usar la plataforma (muy interesantes estos tutoriales, no se limitan a lo básico). Justo acabo de ver que incluyen un apartado “The Map Academy” donde incluyen minicursos sobre CartoDB, desconozco como serán pero seguro que os pueden interesar.

Al grano, vamos a explicar rápidamente como subir archivos a tu cuenta de CartoDB desde código Python.

Para ello lo primero que vamos a necesitar es (para los que no lo tengáis ya) una cuenta en CartoDB, y registraros es completamente gratuito. No penséis que por ser gratuito estarán muy limitadas sus opciones, para nada.

Una vez hecho esto, ya podemos entrar a la web con nuestro login, hasta entrar a la web que tiene una pinta similar a esta:

2015-11-10 21_01_16-CartoDB · oscar9

Aquí nos saldrán las últimas modificaciones que hemos hecho sobre nuestros datos, la visualización que aparece será una hecha por vosotros.

Para acceder a nuestra cuenta desde código necesitaremos una API Key. Tendremos que ir al icono de arriba a la derecha y al hacer el click nos aparecerá un desplegable con la opción “Your API Key”.

Os aparecerá una página como esta, donde podréis copiar vuestra Key y ver dos ejemplos de uso de esta Key para usarla con peticiones mediante http.

2015-11-10 21_09_07-Your API keys _ CartoDB

Cuidado, esta Api key da acceso a vuestra cuenta de forma completa, esto lo digo tanto para que no la compartáis como para que tengáis cuidado con vosotros mismos, si tenéis información importante y ejecutáis algún código SQL que no fuera correcto, podríais modificar tablas que necesitéis o llegar a borrar vuestras bases de datos. Si estáis usando CartoDB de manera profesional, recomiendo que os creéis otra cuenta diferente para hacer pruebas.

Para acceder desde Python a vuestra cuenta tendréis que bajaros la siguiente librería: cartodb-python 

Esta os permitirá acceder a vuestras bases de datos en la plataforma y, como en este caso, a subir ficheros nuevos. Para más información sobre la SQL API de CartoDB en su web, explican esto y muchos más, partes que también explicaremos en próximos post.

En Github, a la derecha, aparece el botón de descargar zip. La carpeta os la descargáis y la descomprimís en C:// por ejemplo. Ahora desde terminal accedéis a ella.

Anotación rápida para moveros por la consola: podéis escribir “cd ..” para bajar ruta hasta C://, y luego podéis escribir “cd cart” y apretar TAB hasta que salga el nombre de cartodb-python-master, nombre del fichero que habéis descomprimido. Con “dir“, aparecen los ficheros de la carpeta.

Ahora, en esta carpeta, podéis ejecutar:

python setup.py install

2015-11-10 21_42_49-Administrador_ Símbolo del sistema

 

Si escribimos en la terminal: python accedemos a la consola de python en la que podemos internar importar la librería con un:

import cartodb

Para hacer este post lo estoy haciendo en otra máquina y me ha aparecido que me falta una librería, así que vamos a instalarla. Volvemos a la terminal pulsando “Control + D“. Y en mi caso parece que todo se soluciona con un:

pip install requests_oauthlib

2015-11-10 21_51_12-Administrador_ Símbolo del sistema - python

Si no os funciona lo anterior, hay que comprobar que tenemos instaladas las siguientes librerías. Es posible que ya tengáis algunas, ir comprobando la consola por si os aparece algún error sobre la falta de estas al ejecutar el código, similar al que me aparecía arriba. Creo que todas las que necesitáis son las siguientes.

En principio podéis instalarlas siempre escribiendo en la terminal mediante:

pip install nombre-libreria

Si esto no os funciona por lo que sea, podéis descargarlas manualmente y copiarlas a la carpeta de instalación de lib dentro de C://Python27// o cual sea la distribución que uséis.

Si seguís el post que expliqué sobre Instalación de Python con Anaconda, la carpeta será C://Anaconda//Lib y también podréis instalar las librerías directamente desde la terminal con:

conda install nombre-libreria

Ejemplo de descargarlas de forma manual.

2015-11-10 21_53_54-httplib2-0.9.1.zip - WinRAR (copia de evaluación)

Copiaríamos solo a la carpeta lib de python, la carpeta señalada que contiene exactamente el nombre de la librería

Estoy utilizando la IDE de Python denominada Rodeo, la cual instalé en el post anterior junto a Anaconda. De todas formas este código lo podéis ejecutar también desde la terminal que hemos estado usando o cualquier otra IDE de Python.

Para probar podemos empezar con un código sencillo, solo para ver que realmente nos coge bien la librería de CartoDB.

2015-11-10 22_00_33-Rodeo

Como paso final, vamos a crear una conexión a nuestra cuenta con la API Key que tenemos y el nombre de nuestra cuenta, permitiéndonos subir un shape directamente (comprimido en un zip). El zip que utilizamos es el que usamos de ejemplo en anteriores post, descargado desde OSM y trasnformado a shape con ogr2ogr, que podéis descargar de aquí en Github.

El código, solo tendréis que cambiar vuestra apikey, cuenta, y la ruta del zip que contenga los 4 ficheros necesarios para un shape: .shp, .prj, .dbf, .shx. También podríais, por ejemplo, subir un fichero csv e indicar en cartodb, una vez ya subido, cuales coordenadas corresponden a X e Y. En la web de la librería CartoDB-Python, explica el siguiente código y el uso que le podemos dar.

from cartodb import CartoDBAPIKey, CartoDBException, FileImport

API_KEY ='miapikey'
cartodb_domain = 'micuenta'
cl = CartoDBAPIKey(API_KEY, cartodb_domain)

#Import shape
fi = FileImport("C:/temp/shp/cities_europe_shp.zip", cl)
fi.run()

Revisando estas fuentes, he comprobado que también permite la subida de datos directamente desde un enlace web con el siguiente código:

from cartodb import URLImport

fi = URLImport("http://acdmy.org/d/counties.zip", cl)
fi.run()

Si tenemos la web de cartodb nos aparecerá una pestaña abajo a la izquierda así, indicando que se está subiendo un nuevo dataset:

2015-11-10 22_15_02-oscar9 _ CartoDB

¡Y listo! si comprobáis vuestros dataset, ya veréis que aparece la visualización del nuevo shape:

2015-11-10 22_18_32-cities_europe_shp _ CartoDB

Próximamente otro post sobre cómo hacer peticiones SQL sobre esta base de datos que acabamos de subir, fácil si ya hemos completado hasta aquí en este post.

Si estáis interesados particularmente en algo ponerlo en los comentarios y podrá ser temas de próximos post.

 

 

1 comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: