jueves, 29 de mayo de 2014

Ya podéis utilizar nuestros datos en JSON-LD

Ya sabéis que estamos trabajando continuamente en facilitar el acceso a nuestra API y el uso de nuestros datos, para que podáis incorporarlos en vuestras aplicaciones. Por ejemplo, recientemente incluimos un formato como GeoJSON, del que ya hemos hablado en algunos posts previos, y que os permite mostrar fácilmente nuestros datos en varios servidores de mapas.

Hoy tenemos una muy buena noticia para todos los que usáis nuestra API (y también para los que nos seguís y aún no os habéis registrado en nuestro portal de desarrolladores). Teniendo en cuenta el feedback que hemos recibido de algunos de vosotros, hemos decidido incluir un nuevo formato (JSON-LD) que os permitirá procesar JSON de una manera más reutilizable, y que está siendo ya utilizado, por ejemplo, por schema.org.

Tal y como se describe en la página principal de JSON-LD, este formato combina la sencillez de JSON con un contexto que facilita su tratamiento, proporcionando identificadores únicos (URIs) para las propiedades que se utilizan en el documento JSON. Esto también permite transformar estos datos automáticamente a formatos como RDF (que ya sabéis que también os proporcionamos en nuestra API de manera nativa).

Aquí tenéis un ejemplo de una salida en JSON-LD, para la siguiente URI:


{
"@graph" : [ {
"@id" : "http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/11007335L10",
"localidata:direccionComercial" : "CALLE ABADA, 2, MADRID, ESPAÑA",
"rdfs:label" : "BELLAS ARTES BAZAR"
}, {
"@id" : "http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/11007335L10.rdf?_sort=label",
"os:itemsPerPage" : {
"@type" : "xsd:long",
"@value" : "10"
},
"os:startIndex" : {
"@type" : "xsd:long",
"@value" : "1"
},
"items" : {
"@list" : [ "http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/11007335L10" ]
},
"api:page" : {
"@type" : "xsd:long",
"@value" : "0"
},
"xhv:first" : {
"@id" : "http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/11007335L10.rdf?_sort=label&_page=0"
}
} ],
"@context" : {
"direccionComercial" : {
"@id" : "http://datos.localidata.com/def/City#direccionComercial",
"@type" : "@id"
},
"label" : {
"@id" : "http://www.w3.org/2000/01/rdf-schema#label",
"@type" : "@id"
},
"rest" : {
"@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest",
"@type" : "@id"
},
"first" : {
"@id" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#first",
"@type" : "@id"
},
"itemsPerPage" : {
"@id" : "http://a9.com/-/spec/opensearch/1.1/itemsPerPage",
"@type" : "@id"
},
"startIndex" : {
"@id" : "http://a9.com/-/spec/opensearch/1.1/startIndex",
"@type" : "@id"
},
"items" : {
"@id" : "http://purl.org/linked-data/api/vocab#items",
"@type" : "@id"
},
"page" : {
"@id" : "http://purl.org/linked-data/api/vocab#page",
"@type" : "@id"
},
"rdfs" : "http://www.w3.org/2000/01/rdf-schema#",
"os" : "http://a9.com/-/spec/opensearch/1.1/",
"localidata" : "http://datos.localidata.com/def/City#",
"dct" : "http://purl.org/dc/terms/",
"xsd" : "http://www.w3.org/2001/XMLSchema#",
"rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"api" : "http://purl.org/linked-data/api/vocab#",
"xhv" : "http://www.w3.org/1999/xhtml/vocab#"
}
}



Por supuesto, siempre podéis utilizar nuestra API desde la línea de comandos, y hacer la siguiente petición:
curl -H "Accept:application/ld+json" http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/11007335L10?api_key=<<API_KEY>>
En alguno de nuestros próximos posts os contaremos con más detalle cómo podéis explotar al máximo este formato. De momento, os recomendamos ir probando...

lunes, 5 de mayo de 2014

¿Qué farmacias tengo cerca?

Recientemente nos han preguntado si nuestra API podría servir para poder encontrar rápidamente las farmacias que están cerca del sitio en el que nos encontramos (y quien dice farmacias, dice cualquier otro tipo de local comercial). Hoy os explicamos cómo obtenerlas y cómo mostrarlas fácilmente en Google Maps y CartoDB.

Ya sabéis lo primero que os vamos a decir, que tenéis que solicitar vuestra API_key para poder replicar lo que estamos haciendo aquí. Cada vez tenemos más usuarios, y muchos de vosotros nos estáis dando ideas muy buenas para mejorar la API y así dar soporte a las necesidades que tenéis. Seguid así.

Bueno, pues suponiendo que tenemos ya nuestra API key, lo primero es buscar en el portal de desarrollador la llamada que nos permite buscar locales de un tipo concreto alrededor nuestro. Aquí la tenéis:
http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/NE/<LatitudNE>/<LongitudNE>/SO/<LatitudSO>/<LongitudSO>/AE/label/<actividadEconomica>

donde:
  • <LatitudNE><LongitudNE> y <LatitudSO><LongitudSO> nos delimita el bounding box en el que queremos buscar.
  • <actividadEconomica> es cualquier texto contenido en cualquiera de las actividades económicas del local.
Supongamos que estamos en MediaLab-Prado (C/ Alameda, 15) en Madrid. Google o nuestro GPS nos dirá que estamos en el lugar con latitud y longitud (40.4108,-3.6938). En este caso vamos a seleccionar como punto NE el siguiente (40.413967, -3.688840) y como punto SO el siguiente (
40.408592, -3.702165), que se corresponden con el rectángulo (bounding box) que se muestra en la siguiente figura.

Así que la llamada a nuestra API sería la siguiente:

Si utilizamos un navegador Web para acceder a esta URI, obtendremos algo parecido a lo siguiente:

Con esto ya tenemos las direcciones de las farmacias que se encuentran en este bounding box. Ahora ya sólo queda obtener más información (por ejemplo, sus coordenadas) y mostrar estas farmacias en un mapa.

En primer lugar, para obtener las coordenadas de todos estos recursos usaremos alguna de las dos vistas _view=ampliada o _view=coordenadas, y subiremos el tamaño de las páginas para tener más de 10, que son las que obtendremos por defecto. Además, usaremos la extensión .geojson para mostrarla en Google Maps y CartoDB, como ya hemos descrito en algunos posts anteriores.


Aquí tenemos las visualizaciones en Google Maps (en este enlace hay que cambiar la API key para que sea la vuestra) y CartoDB:

https://dl.dropboxusercontent.com/u/1406775/farmaciasMediaLabPrado.html


http://cdb.io/1ncl2ca


¿Y si os pidiéramos ahora que buscaseis los bancos cercanos? ¿Cómo lo haríais?

viernes, 25 de abril de 2014

¿Puede un periodista usar la línea de comandos? #JPD14

Ya hacía un par de semanas que no publicábamos nada, y es que con la Semana Santa hemos preferido dar un descanso a todos nuestros seguidores (y también a nosotros mismos...) ;-)

Hoy volvemos a la carga con nuestro blog, y curiosamente lo hacemos en un día no habitual, como es un sábado. ¿Por qué?


Pues porque este fin de semana LocaliData  participa en las II Jornadas de Periodismo de Datos y Open Data (#jpd14), organizadas por el capítulo español de la Open Knowledge Foundation. Y dentro del denso programa de las jornadas hemos decidido ayudar un poco con un taller en el que iremos a las bases del tratamiento con ficheros de datos: la línea de comandos.

Así que allá vamos... Esperamos que os resulte de interés también a los que ya conocéis bastante de lo que se puede hacer simplemente con una terminal abierta y unos pocos comandos en Linux.

La línea de comandos

Comencemos emulando a Lope de Vega...
Esta sesión me manda hacer Adolfo
que en mi vida me he visto en tal aprieto;
la línea de comandos aquí os presento;
rumba rumbando van los primeros comandos.

Esta sesión comienza con la explicación de un conjunto muy básico de comandos con los que nos moveremos por el sistema de ficheros. Progresivamente iremos viendo cómo se pueden usar otros comandos para hacer el tratamiento de los datos que podemos tener en nuestro sistema de ficheros, y como podemos automatizar muchas de estas tareas, tan necesarias cuando uno tiene que hacer preprocesamiento de datos.

Atención: vamos a utilizar la terminal de sistema operativo Linux o de MacOs para todas estas tareas. En Windows existen otros comandos alternativos que se pueden utilizar, pero para facilitar esta tarea recomendamos instalar Cygwin, que nos permite emular el shell de Linux directamente. El instalador para Windows está disponible aquí, y basta con la instalación básica, siempre que se añada, para los últimos pasos del curso, el paquete curl durante la instalación.
Si alguno de los comandos que se presentan en la sección 1, especialente ls, no funciona adecuadamente, puede que el problema sea por las variables de entorno. En tal caso, hay que realizar las siguientes operaciones.
  1. En Mi PC o Equipo, pulsar el botón derecho del ratón, acceder a Propiedades / Avanzadas / Variables de Entorno. Otra opción es acceder por Panel de Control / Sistema / Propiedades de Sistema.
  2. Añadir la variable de entorno CYGWIN_HOME con valor C:\cygwin (si aquí es donde se ha instalado Cygwin).
  3. Añadir en la variable de entorno PATH el valor ;C:\cygwin\bin
  4. Reiniciar el PC

1. Moviéndose por el sistema de ficheros, copiando y borrando ficheros y directorios, etc.

Existen varios comandos que son básicos para moverse por el sistema de ficheros, crear y borrar directorios, etc. Fundamentalmente cd, ls, rm, touch, echo, mkdir y rmdir. Si ya estás acostumbrado a trabajar con la línea de comandos, puedes pasar directamente al punto 2.

Una vez tenemos una terminal abierta con la línea de comandos, podemos ver los ficheros y directorios que hay disponibles en el directorio en el que nos encontramos (en el que nos hemos descargado nuestro fichero):
ls -la

Podemos crear directorios utilizando el comando mkdir. Por ejemplo, mkdir directorio1 crear el directorio 1 en el directorio en el que nos encontramos, y podemos también crear un subdirectorio ejecutando mkdir directorio1/directorio2.

Podemos acceder al directorio comerciosMadrid usando cd comerciosMadrid. Y volver de nuevo al directorio anterior usando cd .. También podemos acceder al directorio directorio1/directorio2 usando cd directorio1/directorio2. Podemos volver al directorio inicial personal escribiendo cd. También podemos acceder al directorio raíz usando cd /. Y si queremos en algún momento saber dónde estamos en nuestra estructura de directorios, simplemente tenemos que usar el comando pwd.

Además, podemos usar el tabulador para ir completando nuestro comando según vayamos escribiendo los nombres de los ficheros.

Si queremos crear un fichero vacío, podemos usar touch pruebaFicheroVacio.txt

Si queremos incluir un texto en un fichero, podemos usar echo "hola mundo" > prueba.txt. Si queremos añadirlo a un fichero existente, podemos usar echo "hola mundo" >> prueba.txt. Si queremos ver lo que tenemos ahora mismo como contenido de este fichero, podemos ejecutar cat prueba.txt.

Podemos ahora borrar el fichero prueba.txt usando rm prueba.txt. También podemos borrar directorios usando rmdir. Por ejemplo, rmdir directorio1/directorio2, y rmdir directorio1. Si queremos borrar más rápido una estructura de directorios podemos ejecutar rm -r directorioPrueba.

Si queremos renombrar un fichero ejecutaremos:
mv pruebaFicheroVacio.txt ficheroVacio.txt.
También funciona con directorios, de la misma manera.

Si queremos copiar un fichero haremos cp ficheroVacio.txt ficheroVacio2.txt. También funciona con directorios.

¿Y cuál fue ese comando que ejecutamos hace un rato y del que ya no nos acordamos? Probad ejecutando el comando history.

2. Dividiendo nuestros ficheros en varios trozos

En muchas ocasiones tenemos que trabajar con un fichero muy grande. Tan grande que ni siquiera lo podemos abrir con nuestras herramientas habituales. Algún ejemplo podría ser la información detallada de fincas catastrales, los microdatos de la EPA, etc. 

Para que la descarga del fichero original en el que tenemos nuestros ejemplos no sea muy lenta, vamos a trabajar con un fichero que sí que podemos abrir con herramientas como Microsoft Excel, R, Open Refine, etc. Se trata del fichero ComerciosMadrid.csv, obtenido del portal de datos abiertos del Ayuntamiento de Madrid. Lo hemos dejado en https://dl.dropboxusercontent.com/u/1406775/ComerciosMadrid.csv, así que lo podéis descargar de esa URL. Incluso podéis utilizar la línea de comandos para ello, ejecutando el siguiente comando:
curl https://dl.dropboxusercontent.com/u/1406775/ComerciosMadrid.csv > ComerciosMadrid.csv

Este fichero tiene algo más de 150,000 líneas (esto se puede comprobar utilizando wc -l ComerciosMadrid.csv)

Una opción es la de dividir el fichero en varios ficheros más pequeños. Por ejemplo, podemos dividir el fichero anterior en ficheros de 2000 líneas cada uno. Para ello, se puede utilizar el comando split, como mostramos a continuación:
split -l 2000 ComerciosMadrid.csv

Esto generará 76 ficheros, con nombres xaa, xab, ..., xcx, cada uno de ellos con 2000 líneas (excepto el último). Podemos moverlos a un directorio que vamos a crear para ellos, mediante los dos siguientes comandos:
mkdir comerciosMadrid
mv x* comerciosMadrid

Otra opción que puede ser interesante para reducir el tamaño de un fichero, y así poderlo tratar con mayor facilidad al ser más pequeño, puede ser la de obtener sólo los valores de algunos campos del CSV. Por ejemplo, en el fichero CSV anterior, tenemos los siguientes campos:
"id_local";"id_distrito_local";"desc_distrito_local";"id_barrio_local";"desc_barrio_local";"desc_seccion_censal_local";"coordenada_x_local";"coordenada_y_local";"desc_tipo_acceso_local";"desc_situacion_local";"id_ndp_edificio";"clase_vial_edificio";"desc_vial_edificio";"nom_edificio";"num_edificio";"cal_edificio";"secuencial_local_PC";"id_ndp_acceso";"clase_vial_acceso";"desc_vial_acceso";"nom_acceso";"num_acceso";"cal_acceso";"coordenada_x_agrupacion";"coordenada_y_agrupacion";"id_agrupacion";"nombre_agrupacion";"id_tipo_agrup";"desc_tipo_agrup";"id_planta_agrupado";"id_local_agrupado";"rotulo";"id_seccion";"desc_seccion";"id_division";"desc_division";"id_epigrafe";"desc_epigrafe"

Si estamos interesados únicamente en los campos correspondientes a coordenada_x_local y coordenada_y_local (que son los campos séptimo y octavo, y que nos pueden permitir representar nuestros datos en un mapa), podemos ejecutar el siguiente comando:
cut -f 7,8 -d ';' ComerciosMadrid.csv

Y para que el resultado se almacene en un fichero, podemos usar el siguiente comando:
cut -f 7,8 -d ';' ComerciosMadrid.csv > ComerciosMadridCoordenadas.csv

Nota: si este comando devuelve el siguiente error: error: illegal byte sequence, entonces se pueden ejecutar los dos siguientes comandos:
export LC_CTYPE=C 
export LANG=C
 
Para los más rápidos:
  • ¿Cómo dividirías el fichero de comercios que hemos utilizado anteriormente para que los nombres de los ficheros que se generen comiencen como ComerciosMadrid_?
    Pista: puedes utilizar man split para ver más detalles sobre este comando, así como para cualquier otro comando.
  • El comando cut también se puede utilizar para dividir un fichero en campos si tienen un tamaño predefinido (por ejemplo, los ficheros de Catastro o algunos ficheros de microdatos del INE). ¿Cuál sería el comando a utilizar para obtener del fichero de comercios de Madrid todos los códigos de los locales, que se encuentran en cada línea entre las posiciones 2 y 10? ¿Cuál es el tamaño final del fichero obtenido?

3. Buscando ficheros que contengan alguna cadena de caracteres

¿Cuántas veces habéis tenido que buscar algún fichero que contenga una cadena de caracteres concreta? Por ejemplo, imaginemos que tenemos un montón de CSVs en nuestro ordenador, con información de comercios de Madrid, y queremos encontrar los CSVs que tengan información sobre bares de la franquicia "100 Montaditos".

Para ello, podemos usar el comando grep, que nos permite buscar una cadena de caracteres concreta, o incluso una expresión regular, dentro de un conjunto de ficheros en los directorios que especifiquemos. Vamos a buscar nuestros 100 Montaditos en el directorio comerciosMadrid. Para ello, ejecutaremos el siguiente comando:
grep '100 MONTADITOS' -r .

La opción -r es para que el comando busque de manera recursiva por toda nuestra estructura de directorios, y el . es para especificar que empiece por el directorio en el que nos encontremos.

Para los más rápidos:
  • ¿Cómo buscarías los ficheros que contengan 100 MONTADITOS o 100 Montaditos? Es decir, ¿cómo harías las búsquedas independientes de si se utilizan mayúscula o minúsculas?
  • ¿Cómo guardarías en un fichero todas las líneas que contienen 100 MONTADITOS?

4. Reemplazando cadenas de caracteres dentro de nuestros ficheros

Otra actividad habitual es la de tener que modificar algún dato dentro de nuestros ficheros. Esto es algo que se puede hacer fácilmente con herramientas como Open Refine, pero en ocasiones nos puede interesar realizar este tipo de sustituciones directamente en los ficheros fuente, antes de procesarlos con este tipo de herramientas. Para ello, vamos a utilizar el comando sed.

Vamos a continuar con el ejemplo anterior, y supongamos que queremos cambiar todas las apariciones de la cadena de caracteres 100 (de 100 MONTADITOS) por la cadena CIEN. Para hacer esta sustitución, en el fichero original ComerciosMadrid.csv, ejecutaremos el siguiente comando:
sed s/100/CIEN/ ComerciosMadrid.csv

Sin embargo, con el comando anterior también podemos modificar sin querer algún trozo de texto que contenga la cadena "100". En tal caso, vamos a sustituir todas las apariciones de la cadena de caracteres 100 MONTADITOS por la cadena CIEN MONTADITOS. Para hacer esta sustitución, en el fichero original ComerciosMadrid.csv, ejecutaremos el siguiente comando (como se puede ver, para añadir el espacio en blanco utilizamos el carácter \):
sed s/100\ MONTADITOS/CIEN\ MONTADITOS/ ComerciosMadrid.csv

Para los más rápidos:
  • ¿Cómo reemplazarías cadenas como 100 MONTADITOS, y en general cualquier número seguido de un conjunto de caracteres, por la cadena de caracteres seguida del número (es decir, MONTADITOS 100)?

5. Descargando ficheros de APIs de datos abiertos con curl

En ocasiones tenemos a nuestra disposición URLs desde las que nos podemos descargar ficheros que nos puedan interesar. Concretamente, en el caso de los datos abiertos, estos datos pueden estar disponibles mediante APIs REST para cada uno de los datos en los que podemos estar interesados. 

Uno de los ayuntamientos que lleva más tiempo trabajando en la creación de APIs para sus datos abiertos es Zaragoza con su API de datos abiertos. Así que vamos a ver qué podemos obtener si le hacemos la siguiente petición:
curl -H "Accept:text/csv" http://www.zaragoza.es/api/recurso/turismo/restaurante/14

También tiene una API el Gobierno de Aragón en su portal de datos abiertos, y concretamente en lo que se ha denominado la AragoDBpedia. Por ejemplo, si queremos obtener un CSV del municipio de Jaca, podremos realizar la siguiente petición (en este caso con una API_KEY, muy habitual para el acceso a APIs REST):
curl -H "Accept:text/csv" http://opendata.aragon.es/recurso/territorio/Municipio/Jaca.csv?api_key=e103dc13eb276ad734e680f5855f20c6\&_view=ampliada

Para los más rápidos:
  • ¿Podéis acceder a la descripción de la API de datos abiertos de Zaragoza e intentar determinar cuántos restaurantes hay en Zaragoza, según esta API?
  • ¿Cómo creéis que se podría obtener información de la provincia de Huesca en la API de datos de Open Data Aragón?

6. Realizando scripts para automatizar tareas

En ocasiones necesitamos realizar varias operaciones sobre un conjunto de ficheros, u operaciones repetitivas. Esto se puede conseguir creando scripts, que luego se pueden ejecutar desde la línea de comandos.

Comenzaremos con un script muy sencillo, que vuelve a regenerar el fichero inicial de comercios de Madrid a partir de los ficheros en los que lo dividimos. Para ello, se puede crear primero el fichero unirFicheros.sh utilizando el comando touch unirFicheros.sh. A continuación, el fichero se debe hacer ejecutable, mediante el siguiente comando:
chmod u+x unirFicheros.sh
Y finalmente se debe editar el fichero con los siguientes comandos:
for f in `ls comerciosMadrid/*`; do
   cat $f >> ComerciosMadridRegenerado.csv
done

A continuación, se puede ejecutar este script, ejecutando ./unirFicheros.sh

Para los más rápidos:
  • ¿Cómo podemos obtener en un único fichero los datos completos de todos los restaurantes de Zaragoza, utilizando su API y algún script para tratar los datos adecuadamente?
  • ¿Cuál sería el script a utilizar para que, dado el listado de todos los municipios de la provincia de Huesca, podamos hacer llamadas a la API de AragoDBpedia y obtener todos sus datos?

lunes, 7 de abril de 2014

Open Data Aragón: vamos a hacer algunas consultas SPARQL

Después de mucho hablar de Madrid, en nuestro post de hoy hemos decidido viajar un poco, ahora que empieza el buen tiempo, e irnos a Aragón.

Aragón Open DataLa andadura de esta comunidad autónoma con los datos abiertos comenzó hace ya algo más de un año. De hecho, hace un par de meses (el 6 de febrero) hubo una jornada en la que se presentaron varias novedades en su portal de datos abiertos.

Una de estas novedades fue la Aragopedia, creada por la gente de Idearium Consultores. Esta wiki, cuyos contenidos se ofrecen también mediante una API, ha sido generada a partir de datos de los que dispone el Gobierno de Aragón sobre cada uno de sus municipios, comarcas y provincias, así como de toda la comunidad autónoma.

Y otra de las novedades fue la AragoDBpedia, en cuya construcción participamos nosotros. A partir de los datos anteriores generamos datos en RDF correspondientes a cada uno de los municipios, comarcas y provincias, utilizando el mismo proceso que se sigue para la generación de la DBpedia, así como de la DBpedia española. Y, ¿cómo no?, los exponemos también en un punto de consulta SPARQL (detalles aquí) y a través de una API.

Hoy os vamos a contar algunas cosas que se pueden hacer con el punto de consulta SPARQL, y ya dejaremos el uso de la API para algún otro post.

En primer lugar, y para entender bien los tipos de datos con los que nos vamos a encontrar en este punto de consulta, nuestra recomendación es la de empezar leyendo un poco sobre el vocabulario en el que se basan estos datos. Como se puede ver se recogen conceptos como el de municipio, comarca, provincia y comunidad autónoma. Hemos decidido reutilizar todo lo posible de la ontología de DBpedia, por eso del enfoque que hemos seguido para la generación de estos datos y API, pero no descartamos que en un futuro no muy lejano todos estos conceptos se unifiquen en algún vocabulario de uso común para todas las autonomías y municipios en España. También usamos DataCube, un vocabulario propuesto por el W3C para la representación de datos estadísticos, que se había publicado definitivamente como estándar el 16 de enero.

Una vez vistos los vocabularios, es hora de empezar a consultar al punto de consulta SPARQL. En la documentación sobre SPARQL que aparece en la Web de Aragón Open Data, y que os aconsejamos leer antes de continuar, tenemos algunas consultas sencillas:
  • Dame la lista de comarcas de Aragón (aquí), así como su número (aquí).
  • Dame todos los detalles de un municipio como Albelda (aquí).
  • Dame las plazas hoteleras de la provincia de Huesca en el año 2011 (aquí).
  • Ordena de mayor a menor los municipios de Aragón por la superficie dedicada a aeropuertos dentro de su término municipal (aquí), así como por el número total de kilogramos de vidrio reciclados (aquí).
Una última consulta antes de terminar este post... Esta me la pidió un periodista recientemente, que quería la lista de los nombres de los alcaldes de una comarca. La consulta se escribiría de la siguiente manera, por ejemplo, para la comarca de Cuencas Mineras:

PREFIX aragodef: <http://opendata.aragon.es/def/Aragopedia#>
PREFIX dbpedia: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?uriMunicipio ?nombreMunicipio ?alcalde
WHERE {
 ?uriMunicipio a dbpedia:Municipality .
 ?uriMunicipio rdfs:label ?nombreMunicipio .
 ?uriMunicipio aragodef:mayor ?alcalde .
 ?uriMunicipio aragodef:enComarca <http://opendata.aragon.es/recurso/territorio/Comarca/Cuencas_Mineras>
}



El resultado lo podéis comprobar vosotros mismos aquí. Si necesitáis ayuda para hacer uso de este dataset, no dudéis en contactar con nosotros, y si queréis aportar vuestras propias consultas, hacedlo como un comentario a este post, que estaremos encantados de darle publicidad.






 

lunes, 31 de marzo de 2014

Uniendo datos de la Wikipedia y LocaliData usando Open Refine

Wikipedia image

¿Cuántas veces habéis usado la Wikipedia para buscar datos que os interesaban? Sí, ya lo sabemos, muchas veces... Y no, hoy no os vamos a decir que la abandonéis porque tenemos todos sus datos en nuestra API... Entre otras cosas porque os estaríamos engañando...

Lo que os vamos a contar hoy es cómo utilizar datos de la Wikipedia como fuente para buscar más información en nuestra API, y así tener datos mucho más completos, procedentes de diversas fuentes. Eso sí, para poder seguir mejor este post es importante que hayáis practicado un poquito con Open Refine. Hay muy buena documentación en su website.

Así que vamos a empezar proponiéndonos la siguiente historia: "partimos de la lista de barrios de Madrid que tiene la versión española de Wikipedia, y queremos, para cada uno de ellos, saber el número de locales comerciales que tiene, así como su población, para mostrar toda esta información conjuntamente en alguna aplicación".

La verdad es que podríamos sacar esta lista de barrios directamente desde nuestra API (sí, tenemos una llamada que permite, dado un municipio como Madrid, obtener un listado de todos sus barrios)

Vamos, que podemos hacer la siguiente llamada y tener ya toda la información que necesitamos:
http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Barrio?api_key=<<API KEY>>

Y además, para obtener la información ampliada podemos usar la vista ampliada
http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Barrio?_view=ampliada&api_key=<<API KEY>>

Pero como en muchas ocasiones tenemos que comenzar con datos procedentes de alguna Web, esto es lo que vamos a aprender hoy. Vayamos paso por paso:

Paso 1. Obtener el listado de barrios de Madrid de Wikipedia y cargarlo en Open Refine

Simplemente buscando en la Web "barrios de Madrid Wikipedia" obtenemos una URL que nos proporciona un listado de barrios de Madrid.

Vamos a abrirlos en Open Refine, que previamente habremos tenido que instalar en nuestro ordenador. Normalmente, podremos acceder a Open Refine en la siguiente URL: http://127.0.0.1:3333/. A continuación creamos un proyecto y especificamos la URL de Wikipedia.

Cuando seleccionamos "Next >>" se cargará esta página de Wikipedia, y entonces tendremos que seleccionar como formato de la entrada XML y seleccionaremos la lista que contiene los barrios de Madrid como un listado, tal y como se muestra en la siguiente figura:

Una vez seleccionada la parte del código fuente HTML en la que estamos interesados, aparecerá algo parecido a lo que vemos en la siguiente figura:

Así que le podemos dar un nombre a nuestro proyecto (por ejemplo, BarriosDeMadrid) y comenzamos a trabajar con el proyecto.

Paso 2. Limpiando los datos que hemos obtenido de Wikipedia

Vamos a hacer las siguientes operaciones para limpiar estos datos:
  1. Hay varias columnas que podemos eliminar (la primera, la cuarta y la última), de tal manera que nos quedaremos sólo con las columnas del nombre del barrio y la página Wikipedia correspondiente. Para ello, seleccionamos en el menú de cada una de estas columnas la opción "Edit Column -> Remove this column".
  2. Las dos columnas que nos quedan las podemos renombrar, para que sea más sencillo tratar con ellas. Para ello, seleccionamos en el menú de cada una de estas columnas la opción "Edit Column -> Rename this column". Las vamos a llamar "Nombre" y "URL Wikipedia"
  3. También conviene quitar lo de "(Madrid)" de algunos de los barrios, para lo cual podemos seleccionar en el menú de la columna "Nombre" la opción del menú "Edit Cells -> Transform...", y realizar la transformación siguiente: value.replace("(Madrid)","").trim().
El resultado de realizar estas tres operaciones es el que se muestra en la siguiente figura:

Paso 3. Obteniendo los datos de nuestra API

Teniendo en cuenta que para obtener datos de cada uno de los barrios, las URIs de nuestra API se construyen con el siguiente patrón:
http://datos.localidata.com/recurso/territorio/Barrio/label/<<nombreBarrio>>?api_key=<<API Key>>

y que para obtener más datos del barrio (como los que estamos interesados en obtener para cada barrio) tenemos que usar la vista ampliada, deberíamos crear para cada barrio URIs del siguiente tipo:
http://datos.localidata.com/recurso/territorio/Barrio/label/<<nombreBarrio>>.json?_view=ampliada&api_key=<<API Key>>

Lo que podemos hacer es, en la columna "Nombre", seleccionar la opción de menú "Edit Column --> Add column based on this column...", y crear una nueva columna "URI LocaliData" con el siguiente valor: "http://datos.localidata.com/recurso/territorio/Barrio/label/"+escape(value,"url")+".json?_view=ampliada". Hay que tener en cuenta que aplicamos la función escape() sobre el valor del barrio para que se traten correctamente los valores con espacios en blanco, la ü de Argüelles, etc.

Como resultado de estas operaciones, obtendremos lo que aparece en la siguiente figura:

Paso 4. Ejecutando las llamadas a nuestra API

Ahora es el momento de ejecutar las llamadas a nuestra API para obtener los datos de cada uno de los barrios de Madrid. Para ello, en la columna "URI LocaliData" vamos a la opción "Edit Column --> Add Column by Fetching URLs...", que llamará a la URI correspondiente para cada una de las filas de nuestro fichero (139 de momento). Le daremos a la columna el nombre "Resultado LocaliData". Y para no saltarnos las limitaciones en el número de llamadas que cada usuario puede hacer por minuto a nuestra API, pondremos como opción de "throttle" un valor de 1000 milisegundos. La expresión a utilizar sera value+"&api_key=<<API KEY>>".

Después de un par de minutos obteniendo resultados de las 139 llamadas que se realizan a nuestra API, tendremos algo parecido a lo que se muestra a continuación.

Si facetamos sobre la columna recién obtenida, podemos ver que hemos conseguido encontrar resultados para 79 de los 139 barrios. Aunque en primer lugar debemos tener en cuenta que el número de barrios que actualmente tiene Madrid es de 128. Aunque parezca un número bajo, hay que tener en cuenta que la lista que obtuvimos en Wikipedia contenía barrios que realmente no son considerados barrios oficiales de Madrid (por ejemplo, Chueca, Ciudad Pegaso, La Rosilla, Covibar - que pertenece a Rivas-Vaciamadrid -, etc.). 

En otro post os contaremos cómo podemos mejorar ese número.

Paso 5. Obteniendo los datos de población total y número de locales a partir de los resultados en JSON

Una vez que ya tenemos todos los datos de los barrios, es el momento de encontrar los datos que estábamos buscando. Para ello, Open Refine proporciona una función para parsear JSON (parseJSON), que nos permite acceder a los datos que nuestra API ha devuelto. Concretamente, podemos crear dos columnas ("Edit Column --> Add Column based on this Column"), utilizando las siguientes dos expresiones:
  • value.parseJson().result.items[0].poblacion
  • value.parseJson().result.items[0].locales


Paso 6. A utilizar los datos...

Bueno, pues ya tenemos los datos que queríamos... Ahora ya podemos hacer lo que queramos con ellos. ¿A alguno de vosotros se le ocurre qué podemos hacer? Quizás podáis conseguir alguna idea viendo alguno de nuestros posts anteriores: con Google Maps, CartoDB, DataWrapper, etc.






domingo, 23 de marzo de 2014

Ya podéis usar el GeoJSON generado por nuestra API para mostrar nuestros datos en Google Maps

Hace sólo unos días Google anunció que se podían incorporar datos en GeoJSON en Google Maps. La verdad es que esto no ha sido ninguna sorpresa, porque ya nos habían dicho algo sobre esto hace un par de semanas en el Linking Geospatial Data Workshop que se celebró en Google Campus London, y donde Alejandro Llaves, uno de los miembros del OEG-UPM, y el que aquí escribe presentamos la aplicación Map4RDF-iOS, desarrollada por el OEG-UPM y utilizando, entre otros, algunos datos de LocaliData. Podéis ver un video breve aquí.

Pues nada, hoy he decidido que sería buena idea enseñaros cómo se puede usar esta nueva funcionalidad de Google Maps para mostrar datos procedentes de nuestra API. Como siempre, con este post añadiremos un vídeo, por si os apetece más verlo en lugar de leer... Aunque os advierto que es mejor que lo leáis, porque así podréis copiar y pegar el texto HTML...

Paso 1. Creamos un HTML muy sencillo para mostrar nuestro mapa

Lo primero que hacemos es crear un HTML sencillo para poder mostrar nuestro mapa. Aquí tenéis el código que podéis copiar y pegar en un fichero con extensión HTML (por ejemplo, mapaGoogle_Paso1.html).

<!DOCTYPE html>
<html>
<head>
<title>Mostrando un mapa con datos de LocaliData</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var map;
function initialize() {
// Crear un mapa centrado en Madrid y con zoom 12
map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 12,
center: {lat: 40.422, lng: -3.709}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>



Si abrimos este fichero HTML en nuestro navegador, veremos algo parecido a lo que se muestra en la siguiente imagen:


Paso 2. Buscar los datos que queremos mostrar en el mapa

Esto lo vamos a hacer en nuestra API de datos. Como siempre, tenéis que tener un usuario registrado para poder trastear con nuestra API. Concretamente, hoy vamos a mostrar los barrios del distrito de Salamanca. Así que buscamos cómo encontrar los datos de los barrios de un distrito, y eso lo encontramos en esta llamada:
Así que la llamada a realizar será algo así como:
http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito/label/salamanca/Barrio?api_key=<<API KEY>>

Con esto se obtiene la vista en HTML de los seis barrios del distrito de Salamanca: Castellana, Fuente del Berro, Goya, Guindalera, Lista y Recoletos. Recordad añadir el parámetro api_key para que estos enlaces funcionen, o metedlo en la sesión del navegador.


Ahora ya sólo queda recordar que no estamos interesados en el HTML, sino en la vista en GeoJSON. Si miráis arriba del todo, en el menú de opciones de la derecha, veréis que hay un enlace que pone geojson. Ese es el que queremos, y si pinchamos en él veremos que la URL es algo así como:
http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito/label/salamanca/Barrio.geojson?_sort=label&api_key=<<API KEY>>

Ojo!! No os lo descarguéis. Sólo hace falta copiar la URL (y si no tiene la API Key, hay que recordar también incluirla después.

Paso 3. Añadir una línea al HTML anterior

Sí, basta con sólo añadir una línea para ya tener nuestra visualización en Google Maps... La línea en cuestión es la siguiente:
      map.data.loadGeoJson('http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito/label/salamanca/Barrio.geojson?api_key=<<API KEY>>');



Así de sencillo, así que nuestro HTML quedará como sigue (de nuevo, puedes copiarlo, pegarlo en un editor de texto, guardarlo con extensión HTML y abrirlo en cualquier navegador):

<!DOCTYPE html>
<html>
  <head>
    <title>Mostrando un mapa con datos de LocaliData</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
    <script>
      var map;
      function initialize() {
      // Crear un mapa centrado en Madrid y con zoom 12
      map = new google.maps.Map(document.getElementById('map-canvas'), {
                 zoom: 12,
                 center: {lat: 40.422, lng: -3.709}   
                });
      // Cargar el GeoJSON con los datos correspondientes al distrito de Salamanca
      map.data.loadGeoJson('http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito/label/salamanca/Barrio.geojson?api_key=<<API KEY>>');
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>


Así que una vez que lo abrimos nos deberían salir nuestros polígonos...
¿Qué ha pasado? Vaya, no funciona... ¿Por qué será?

Claro, es que se nos había olvidado que si queremos ver polígonos, tendremos que decirle a nuestra API que le pase los datos a Google a través de la vista de coordenadas, en lugar de sólo pasarle el nombre y código del barrio. Así que realmente el HTML que tenemos que generar es el siguiente (fijaos en la pequeña diferencia en lo que ponemos dentro de la función loadGeoJson. Es lo que está en negrita.

<!DOCTYPE html>
<html>
  <head>
    <title>Mostrando un mapa con datos de LocaliData</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
    <script>
      var map;
      function initialize() {
      // Crear un mapa centrado en Madrid y con zoom 12
      map = new google.maps.Map(document.getElementById('map-canvas'), {
                 zoom: 12,
                 center: {lat: 40.422, lng: -3.709}   
                });
      // Cargar el GeoJSON con los datos correspondientes al distrito de Salamanca
      map.data.loadGeoJson('http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito/label/salamanca/Barrio.geojson?api_key=<<API KEY>>&_view=coordenadas');
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>


Y ahora ya sí que podemos verlo todo bien:

Paso 4. Ahora os toca a vosotros...

¿Os atrevéis a hacerlo con otro distrito, con otros barrios, con secciones censales o con cualquier otro de nuestros datos? Nos encantaría recibir vuestras visualizaciones...




lunes, 17 de marzo de 2014

Incorporando información de los distritos de Madrid en CartoDB (I)

Escribimos este post por votación popular...

Hay varias personas que nos han contactado recientemente para que les contáramos cómo podían incorporar información de nuestra API en CartoDB. Antes de seguir, simplemente decir que CartoDB es una aplicación creada por la empresa Vizzuality, que permite visualizar con bastante facilidad datos en un mapa.

Pues aquí van algunos detalles sobre cómo hacerlo (si en lugar de leer, o además de leer, preferís ver un vídeo explicativo, aquí tenéis más o menos lo mismo. Comenzamos pidiéndole a nuestra API que nos enseñe un listado de los distritos de Madrid (obviamente, lo que os contamos aquí vale también para barrios, secciones censales, locales comerciales y prácticamente cualquiera de los elementos que os ofrecemos en nuestra API).

La llamada que tenemos que hacer tiene la siguiente pinta:
http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito?_sort=label&_page=0&_pageSize=25&api_key=<TU API KEY>

Daos cuenta de que hemos establecido el tamaño de la página en 25 registros (más que suficiente, porque en Madrid hay 21 distritos). Lo que obtenemos es algo parecido a lo que mostramos en la siguiente figura:

Esta es la visualización básica de estos datos en HTML, pero aún no contiene ninguna coordenada geográfica, lo que va a hacer bastante complicado que visualicemos nuestros datos en ningún mapa... Para conseguir obtener los distritos con sus coordenadas tendremos que seleccionar la vista de coordenadas, añadiendo a la URL anterior lo siguiente: _view=coordenadas, con lo que obtendremos lo siguiente:

Es decir, ahora también tenemos un atributo con la geometría de cada uno de los distritos (de hecho, nuestra API para Madrid ofrece dos geometrías, una en el sistema de coordenadas EPSG23030 - UTM 30N - y otra en el sistema de coordenadas EPSG4326 - WGS84 -). Para los que no se quieran meter con todo este detalle, nos basta con saber que la segunda es la que podemos utilizar cuando hablamos de latitudes y longitudes, que es lo que estamos acostumbrados a utilizar con nuestro GPS.

Sin embargo, todavía no podemos importar los datos en CartoDB, porque lo que estamos mostrando no es más que los datos en HTML. Lo que realmente nos interesa es que se puedan mostrar en un formato que sea aceptado por CartoDB, así que vamos a hacer click en el enlace que tenemos al formato geojson (en la lista de enlaces que están arriba a la derecha). Con esto no hacemos otra cosa que mostrar la información en GeoJSON, que es uno de los formatos para representar datos geográficos que le encantan a CartoDB. Nos saldrá algo así:

Ahora podemos hacer dos cosas: 
Así que ya estamos preparados para entrar en CartoDB e importar la información de nuestros distritos. Para ello, entramos en CartoDB con nuestro usuario (en mi caso, por ejemplo, http://ocorcho.cartodb.com), le decimos que queremos crear una nueva tabla, le especificamos o bien el fichero que hemos guardado o bien la URL anterior, como se muestra en la siguiente imagen...

Y en unos segundos aparecerá la tabla de los 21 distritos de Madrid con sus coordenadas en la columna the_geom (la utilizada por defecto por CartoDB para expresar información de coordenadas geográficas) y toda la información adicional que tenía la vista que hemos seleccionado en nuestra API como se muestra a continuación.


A partir de este momento, ya se puede trabajar en CartoDB configurando las visualizaciones, para por ejemplo conseguir la que mostramos a continuación (seleccionando Map view, y seleccionando las columnas código, _about y label para que se visualicen cuando se pinche en cualquier polígono).


En un próximo post os contaremos algunas cosas más que se pueden hacer con estos datos en CartoDB, y con algunos más que podemos obtener de nuestra API. Stay tuned

Aquí, de nuevo, un enlace al vídeo que tiene más o menos los mismos contenidos que este blog post, por si os apetece verlo en un par de minutos:


viernes, 14 de marzo de 2014

Actualización de nuestra API


Acabamos de actualizar nuestra API (http://datos.localidata.com). Nuestra intención en las actualizaciones es añadir nuevas mejoras, corregir algún bug (siempre se nos escapa alguno) y que sea totalmente compatible con la anterior versión.

Las mejoras son las siguientes:
  • Hemos añadido como parámetros el nombre de la Provincia y del Municipio. Estamos cargando datos distintos municipios y con este cambio podréis acceder a esta información igual que lo hacéis con Madrid, simplemente cambiando el nombre del municipio y/o de la provincia.
  • Nueva vista "tabla": ha surgido la necesidad de devolver los datos sin filas repetidas. Lo normal en el formato csv es que se repitan las filas cuando hay un valor múltiple ("límites", "igual que",..). Con esta vista eliminamos las propiedades que puedan tener este tipo. Solo existe si el dato que solicitamos tiene ese tipo de propiedades.
  • Estadísticas por "método" en el portal del desarrollador. hemos agrupado nuestras URIs en cuatro grupos: "comercio", "economía", "estadística" y "territorio". Ahora podemos ver las peticiones a nuestra API agrupadas.
Los bugs solucionados son estos:
  • Rendimiento en algunas consultas.
  • Correción en la desreferenciación en nuestras URIs.
Si tenéis alguna sugerencia, mejora o habéis cazado alguna incidencia no dudéis en contárnoslo. Podéis hacerlo desde el foro en nuestro portal del desarrollador.

lunes, 10 de marzo de 2014

Visualizando los datos de nuestra API con Datawrapper

Cuando por fin tenemos los datos que necesitamos, lo normal es querer visualizarlos utilizando algún tipo de gráfico.

Esta semana os enseñamos cómo usar la herramienta "Datawrapper" con los datos de nuestra API. Esta herramienta es capaz de generar "al vuelo" las representaciones gráficas más comunes, para que puedas compartirlas o incrustarlas en cualquier web de forma rápida y eficaz.

Os vamos a explicar paso a paso el proceso para poder visualizar nuestros datos con esta aplicación web. Si queréis ver todos los pasos en vídeo podéis pulsar aquí.

Primero necesitamos conseguir los datos, nosotros para eso lo tenemos fácil. Nos vamos a la API de Localidata, y vemos cómo obtener los datos de los distritos de Madrid.



La URI por defecto es esta:

http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito?api_key=API_KEY

La "tuneamos" un poco, le voy a añadir un tamaño de página de 50 (hay menos distritos), y la vista "tabla":

http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito?api_key=API_KEY&_pageSize=50&_view=tabla

Además queremos los datos en formato "CSV" así que la URL final sería esta:

http://datos.localidata.com/recurso/territorio/Provincia/Madrid/Municipio/madrid/Distrito.csv?api_key=API_KEY&_pageSize=50&_view=tabla

Ahora nos vamos a la web de Datawrapper: https://datawrapper.de

Aunque podemos crear una visualización sin estar registrados luego no podremos compartirla, por lo que mejor nos damos de alta. 

Una vez registrados, en el menú superior pulsamos en la opción "Crear Gráfico":

Paso 1: Subida de datos

Aquí tenemos varias opciones, nosotros lo que hacemos el pulsar en el botón "...o Sube un archivo CSV" y en lugar de seleccionar un fichero, le pegamos nuestra "URL". Tardará unos segundos pero obtendrá todos los datos. Automáticamente estaremos en el paso 2.

Paso 2: Revisar & Describir



En este paso podemos ir columna a columna y pulsando en la esquina superior derecha de cada una, configurar el formato de cada una. También podemos ocultarla si no la queremos utilizar. 

Estos son los cambios que hemos hecho por aquí:
  1. Ocultamos la primera columna
  2. La columna "Área" la dejamos con tres decimales
  3. Ocultamos las columnas "Código" y "Código Alternativo".
  4. La columnas "Densidad comercial" y "Densidad de población" también con tres decimales.
  5. Ocultamos la columna "Municipio" y "Municipio > URI".

Siguiente paso.

Paso 3: Visualizar

En parte izquierda veremos una primera visualización de nuestros datos. Podemos cambiar de valor a través de la lista desplegable para ver como varían los datos. También podemos especificar el tamaño de nuestro gráfico si se nos queda pequeño.


En la parte derecha aparecen tres pestañas que usaremos para completar la visualización: 

a) "Selección de gráfico": nosotros vamos a quedarnos con el gráfico de Barras y dejaremos el "layout" por defecto.


b) "Refinar el gráfico": aquí podemos elegir los colores que utilizaremos y opciones de orden automático y escala (dependiendo del gráfico seleccionado tendremos diferentes opciones).




c) "Cuenta tu historia": Aquí podremos poner el título a nuestro gráfico y cumplimentar la información extra de nuestro gráfico.



Pulsamos el botón "Publicar" y ...

Paso 4: Publicar e Incrustar

Nuestro gráfico ya está publicado. A la derecha podremos ver y jugar con nuestro gráfico.



Y a la izquierda se nos generará el código par incrustar nuestro gráfico en cualquier web, e incluso una "URL" Corta para compartir nuestro gráfico.



En nuestro caso, el enlace es este:

http://cf.datawrapper.de/eFDbs/1/

Como podéis ver con servicios como este, podéis sacar mucho partido a nuestros datos.

Aquí está el vídeo que hemos enlazado arriba, por si queréis ver todo el proceso.




lunes, 3 de marzo de 2014

Incorporando datos de locales comerciales en Aluche en Excel (I)

Hoy comenzamos una pequeña serie de posts para mostraros cómo se puede enlazar nuestra API con una herramienta que muchos utilizamos casi a diario, como Microsoft Excel. Bueno, para aquellos a los que os gusta OpenOffice o LibreOffice también os enseñaremos cómo hacerlo, que no tenemos acciones de Microsoft ;-).

El ejemplo lo vamos a hacer con los datos de locales comerciales de un barrio de Madrid. Y como soy yo quien elige el barrio, vamos a hacerlo con Aluche (porque me recuerda los tiempos que pasé de pequeño allí con mis abuelos y porque tanto Juan Carlos como yo estamos muy unidos a algún que otro pueblo de Toledo, y en Aluche abundan calles con sabor toledano).

Así que empezaremos como siempre, metiéndonos en nuestro portal de datos (si todavía no habéis creado vuestro usuario, ya va siendo hora, jeje) y buscando la llamada a la API que debemos usar.

Hay varias posibilidades para obtener información de Barrios (de hecho, hay una sección entera de la API dedicada a sacar información de barrios). Pero no estamos tan interesados en los barrios como lo estamos en los locales comerciales que están en el barrio, así que la llamada que estamos buscando es la siguiente:

http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/Barrio/Label/<nombre del barrio>

Por tanto, como siempre, vamos a hacer la llamada correspondiente, y veamos qué obtenemos...

Ahh, como siempre, recordad poner vuestra API_key, que si no no funcionará nada y aparecerá nuestra amiga Mari. Un día os comentaremos más sobre ella.



Bueno, lo dicho, vamos a obtener la lista de locales comerciales en Aluche, y como habrá bastantes, iremos obteniéndolos de 50 en 50 (para eso ponemos el parámetro _pageSize=50). Si no establecemos el número de locales a obtener en cada página, los obtendremos de 10 en 10.
http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/Barrio/Label/Aluche?_sort=label&_page=0&_pageSize=50&api_key=<TU API KEY>

Y si vamos cambiando el parámetro _page podremos ir viendo los siguientes 50 (_page=1), y los siguientes 50 (_page=2), y así hasta que ya no haya más locales allá por la página 45 (porque tenemos ahora mismo 2250 locales registrados en el barrio).

Como estamos interesados en importar nuestros datos en Excel, recomiendo que saquemos los datos en el formato CSV (comma-separated values). Así que pincharemos en el enlace que aparece arriba, donde pone csv, y veamos qué sale.


Si nos fijamos en lo que aparece como URL, vemos que ahora nuestra URL original se ha convertido en la misma URL con una extensión .csv. Así que esta es otra forma de obtener un CSV directamente.

Asimismo, según tengamos configurado nuestro navegador nos saldrá algo como lo mostrado en la imagen, o el navegador nos preguntará que si queremos abrir o guardar el archivo. En cualquier caso, guardaremos el resultado como un fichero, con extensión csv. Por ejemplo, Aluche_página1.csv.

A continuación ya podemos importar en Excel. El proceso es sencillo:
  • Abrimos Excel.
  • Creamos un nuevo documento.
  • En el menú Archivo seleccionamos Importar...
  • Seleccionamos Archivo CSV (como se muestra en la figura de abajo)
  • Seguimos los pasos por defecto del importador...
  • Y nuestros datos ya están disponibles para trabajar en Excel.


Y aquí el resultado...



En los próximos posts de esta serie, os contaremos cómo sacar todos los locales comerciales de una sola vez, en un único CSV, y cómo obtener más información de cada uno de los locales comerciales, y no sólo su identificador, rótulo y dirección.