Documentación

1. Introducción

Las visualizaciones son representaciones gráficas de datos que permiten comunicar de manera sencilla y efectiva la información ligada a los mismos. Las posibilidades de visualización son muy amplias, desde representaciones básicas, como puede ser un gráfico de líneas, barras o sectores, hasta visualizaciones configuradas sobre cuadros de mando o dashboards interactivos. Las visualizaciones juegan un papel fundamental en la extracción de conclusiones a partir de información visual, permitiendo además detectar patrones, tendencias, datos anómalos o proyectar predicciones, entre otras muchas funciones. 

Antes de lanzarnos a construir una visualización efectiva, debemos realizar un tratamiento previo de los datos, prestando especial atención a la obtención de los mismos y validando su contenido, asegurando que se encuentran en el formato adecuado y consistente para su procesamiento y no contienen errores. Un tratamiento previo de los datos es primordial para realizar cualquier tarea relacionada con el análisis de datos y la realización de visualizaciones efectivas.

En la sección “Visualizaciones paso a paso” estamos presentando periódicamente ejercicios prácticos de visualizaciones de datos abiertos que están disponibles en el catálogo datos.gob.es u otros catálogos similares. En ellos abordamos y describimos de manera sencilla las etapas necesarias para obtener los datos, realizar las transformaciones y análisis que resulten pertinentes para, finalmente, crear visualizaciones interactivas, de las que podemos extraer información que finalmente se resume en unas conclusiones finales.

En este ejercicio práctico, hemos realizado un sencillo desarrollo de código que está convenientemente documentado apoyandonos en herramientas de uso gratuito. Todo el material generado está disponible para su reutilización en el repositorio Laboratorio de datos de GitHub. 

Accede al repositorio del laboratorio de datos en Github.

Ejecuta el código de pre-procesamiento de datos sobre Google Colab.

2. Objetivo

El objetivo principal de este post es aprender a realizar una visualización interactiva partiendo de datos abiertos. Para este ejercicio práctico hemos escogido conjuntos de datos que contienen información relevante sobre el alumnado de la universidad española a lo largo de los últimos años. A partir de estos datos observaremos las características que presenta el alumnado de la universidad española y cuáles son los estudios más demandados. 

3. Recursos

3.1. Conjuntos de datos

Para este caso práctico se han seleccionado conjuntos de datos publicados por el Ministerio de Universidades, que recoge series temporales de datos con diferentes desagregaciones que facilitan el análisis de las características que presenta el alumnado de la universidad española. Estos datos se encuentran disponibles en el catálogo de datos.gob.es y en el propio catálogo de datos del Ministerio de Universidades. Concretamente los datasets que usaremos son:

  • Matriculados por tipo de modalidad de la universidad, zona de nacionalidad y ámbito de estudio, y Matriculados por tipo y modalidad de la universidad, sexo, grupo de edad y ámbito de estudio para estudiantes de doctorado por comunidad autónoma desde el curso 2015-2016 hasta 2020-2021.
  • Matriculados por tipo de modalidad de la universidad, zona de nacionalidad y ámbito de estudio, y Matriculados por tipo y modalidad de la universidad, sexo, grupo de edad y ámbito de estudio para estudiantes de máster por comunidad autónoma desde el curso 2015-2016 hasta 2020-2021.
  • Matriculados por tipo de modalidad de la universidad, zona de nacionalidad y ámbito de estudio y Matriculados por tipo y modalidad de la universidad, sexo, grupo de edad y ámbito de estudio para estudiantes de grado por comunidad autónoma desde el curso 2015-2016 hasta 2020-2021.
  • Matriculaciones por cada una de las titulaciones impartidas por las universidades españolas que se encuentra publicado en la sección de Estadísticas de la página oficial del Ministerio de Universidades. El contenido de esta dataset abarca desde el curso 2015-2016 al 2020-2021, aunque para este último curso los datos con provisionales. 

3.2. Herramientas

Para la realización del preprocesamiento de los datos se ha utilizado el lenguaje de programación R desde el servicio cloud de Google Colab, que permite la ejecución de Notebooks de Jupyter.

Google Colab o también llamado Google Colaboratory, es un servicio gratuito en la nube de Google Research que permite programar, ejecutar y compartir código escrito en Python o R desde tu navegador, por lo que no requiere la instalación de ninguna herramienta o configuración.

Para la creación de la visualización interactiva se ha usado la herramienta Datawrapper.

Datawrapper es una herramienta online que permite realizar gráficos, mapas o tablas que pueden incrustarse en línea o exportarse como PNG, PDF o SVG. Esta herramienta es muy sencilla de usar y permite múltiples opciones de personalización.

Si quieres conocer más sobre herramientas que puedan ayudarte en el tratamiento y la visualización de datos, puedes recurrir al informe \"Herramientas de procesado y visualización de datos\".

4. Preprocesamiento de datos

Como primer paso del proceso es necesario realizar un análisis exploratorio de los datos (EDA) con el fin de interpretar adecuadamente los datos de partida, detectar anomalías, datos ausentes o errores que pudieran afectar a la calidad de los procesos posteriores y resultados, además de realizar las tareas de transformación y preparación de las variables necesarias. Un tratamiento previo de los datos es esencial para garantizar que los análisis o visualizaciones creados posteriormente a partir de ellos son confiables y consistentes. Si quieres conocer más sobre este proceso puedes recurrir a la Guía Práctica de Introducción al Análisis Exploratorio de Datos.

Los pasos que se siguen en esta fase de preprocesamiento son los siguientes: 

  1. Instalación y carga de librerías
  2. Carga de archivos de datos de origen
  3. Creación de tablas de trabajo
  4. Ajuste del nombre de algunas variables
  5. Agrupación de varias variables en una única con diferentes factores
  6. Transformación de variables
  7. Detección y tratamiento de datos ausentes (NAs)
  8. Creación de nuevas variables calculadas
  9. Resumen de las tablas transformadas
  10. Preparación de datos para su representación visual
  11. Almacenamiento de archivos con las tablas de datos preprocesados

Podrás reproducir este análisis, ya que el código fuente está disponible en este repositorio de GitHub. La forma de proporcionar el código es a través de un documento realizado sobre un Jupyter Notebook que una vez cargado en el entorno de desarrollo podrás ejecutar o modificar de manera sencilla. Debido al carácter divulgativo de este post y con el fin de favorecer el aprendizaje de lectores no especializados, el código no pretende ser el más eficiente, sino facilitar su comprensión por lo que posiblemente se te ocurrirán muchas formas de optimizar el código propuesto para lograr fines similares. ¡Te animamos a que lo hagas! 

Puedes seguir los pasos y ejecutar el código fuente sobre este notebook en Google Colab.  

5. Visualización de datos 

Una vez realizado el preprocesamiento de los datos, vamos con la visualización. Para la realización de esta visualización interactiva usamos la herramienta Datawrapper en su versión gratuita. Se trata de una herramienta muy sencilla con especial aplicación en el periodismo de datos que te animamos a utilizar. Al ser una herramienta online, no es necesario tener instalado un software para interactuar o generar cualquier visualización, pero sí es necesario que la tabla de datos que le proporcionemos este estructurada adecuadamente.  

Para abordar el proceso de diseño del conjunto de representaciones visuales de los datos, el primer paso es plantearnos las preguntas que queremos resolver. Proponemos la siguientes:

  • ¿Cómo se está distribuyendo el número de hombres y mujeres entre los alumnos matriculados de grado, máster y doctorado a lo largo de los últimos cursos?

Si nos centramos en el último curso 2020-2021:

  • ¿Cuáles son las ramas de enseñanza más demandadas en las universidades españolas? ¿Y las titulaciones?
  • ¿Cuáles son las universidades con mayor número de matriculaciones y dónde se ubican?
  • ¿En qué rangos de edad se encuentra el alumnado universitario de grado?
  • ¿Cuál es la nacionalidad de los estudiantes de grado de las universidades españolas?

¡Vamos a buscar las respuestas viendo los datos!

5.1. Distribución de las matriculaciones en las universidades españolas desde el curso 2015-2016 hasta 2020-2021, desagregado por sexo y nivel académico

Esta representación visual la hemos realizado teniendo en cuenta las matriculaciones de grado, master y Doctorado. Una vez que hemos subido la tabla de datos a Datawrapper (conjunto de datos \"Matriculaciones_NivelAcademico\"), hemos seleccionado el tipo de gráfico a realizar, en este caso un diagrama de barras apiladas (stacked bars) para poder reflejar por cada curso y sexo, las personas matriculadas en cada nivel académico. De esta forma podemos ver, además, el global de estudiantes matriculados por curso. A continuación, hemos seleccionado el tipo de variable a representar (Matriculaciones) y las variables de desagregación (Sexo y Curso). Una vez obtenido el gráfico, podemos modificar de forma muy sencilla la apariencia, modificando los colores, la descripción y la información que muestra cada eje, entre otras características. 

Para responder a las siguientes preguntas, nos centraremos en el alumnado de grado y en el curso 2020-2021, no obstante, las siguientes representaciones visuales pueden ser replicadas para el alumnado de máster y doctorado, y para los diferentes cursos.

5.2. Mapa de las universidades españolas georreferenciadas, donde se muestra el número de matriculados que presentan cada una de ellas

Para la realización del mapa hemos utilizado un listado de las universidades españolas georreferenciadas publicado por el Portal de Datos Abiertos de Esri España. Una vez descargados los datos de las distintas áreas geográficas en formato GeoJSON, los transformamos en Excel, para poder realizar una unión entre el datasets de las universidades georreferenciadas y el dataset que presenta el número de matriculados por cada universidad que previamente hemos preprocesado. Para ello hemos utilizado la función BUSCARV() de Excel que nos permitirá localizar determinados elementos en un rango de celdas de una tabla. 

Antes de subir el conjunto de datos a Datawrapper, debemos seleccionar la capa que muestra el mapa de España dividido en provincias que nos proporciona la propia herramienta. Concretamente, hemos seleccionado la opción \"Spain>>Provinces(2018)\". Seguidamente procedemos a incorporar el conjunto de datos \"Universidades\", antes generado, (este conjunto de datos se adjunta en la carpeta de conjuntos de datos de GitHub para esta visualización paso a paso), indicando que columnas contienen los valores de las variables Latitud y Longitud. 

A partir de este punto, Datawrapper ha generado un mapa en el que se muestran las ubicaciones de cada una de las universidades. Ahora podemos modificar el mapa según nuestras preferencias y ajustes. En este caso, haremos que el tamaño de los puntos y el color dependa del número de matriculaciones que presente cada universidad. Además, para que estos datos se muestren, en la pestaña “Annotate”, en la sección “Tooltips”, debemos indicarle las variables o el texto que deseemos que aparezca. 

5.3. Ranking de matriculaciones por titulación

Para esta representación gráfica utilizamos el objeto visual de Datawrapper tabla (Table) y el conjunto de datos \"Titulaciones_totales\" para mostrar el número de matriculaciones que presenta cada una de las titulaciones impartidas durante el curso 2020-2021. Dado que el número de titulaciones es muy extenso, la herramienta nos ofrece la posibilidad de incluir un buscador que permite filtrar los resultados. 

5.4. Distribución de matriculaciones por rama de enseñanza

Para esta representación visual, hemos utilizado el conjunto de datos \"Matriculaciones_Rama_Grado\" y seleccionado gráficos de sectores (Pie Chart), donde hemos representado el número de matriculaciones según sexo en cada una de las ramas de enseñanza en las cuales se dividen las titulaciones impartidas por las universidades (Ciencias Sociales y Jurídicas, Ciencias de la Salud, Artes y Humanidades, Ingeniería y Arquitectura y Ciencias). Al igual que en el resto de gráficos, podemos modificar el color del gráfico, en este caso en función de la rama de enseñanza.  

5.5. Matriculaciones de Grado por edad y nacionalidad

Para la realización de estas dos representaciones de datos visuales utilizamos diagramas de barras (Bar Chart), donde mostramos la distribución de matriculaciones en el primero, desagregada por sexo y nacionalidad, utilizaremos el conjunto de datos \"Matriculaciones_Grado_nacionalidad\" y en el segundo, desagregada por sexo y edad, utilizando el conjunto de datos \"Matriculaciones_Grado_edad\". Al igual que los visuales anteriores, la herramienta facilita de forma sencilla la modificación de las características que presentan los gráficos.  

6. Conclusiones

La visualización de datos es uno de los mecanismos más potentes para explotar y analizar el significado implícito de los datos, independientemente del tipo de dato y el grado de conocimiento tecnológico del usuario. Las visualizaciones nos permiten construir significado sobre los datos y la creación de narrativas basadas en la representación gráfica. En el conjunto de representaciones gráficas de datos que acabamos de implamentar se puede observar lo siguiente:

  • El número de matriculaciones aumenta a lo largo de los cursos académicos independientemente del nivel académico (grado, máster o doctorado).
  • El número de mujeres matriculadas es mayor que el de hombres en grado y máster, sin embargo es menor en el caso de las matriculaciones de doctorado, excepto en el curso 2019-2020.
  • La mayor concentración de universidades la encontramos en la Comunidad de Madrid, seguido de la comunidad autónoma de Cataluña.
  • La universidad que concentra mayor número de matriculaciones durante el curso 2020-2021 es la UNED (Universidad Nacional de Educación a Distancia) con 146.208 matriculaciones, seguida de la Universidad Complutense de Madrid con 57.308 matriculaciones y la Universidad de Sevilla con 52.156.
  • La titulación más demandada el curso 2020-2021 es el Grado en Derecho con 82.552 alumnos a nivel nacional, seguido del Grado de Psicología con 75.738 alumnos y sin apenas diferencia, el Grado en Administración y Dirección de Empresas con 74.284 alumnos.
  • La rama de enseñanza con mayor concentración de alumnos es Ciencias Sociales y Jurídicas, mientras que la menos demandada es la rama de Ciencias.
  • Las nacionalidades que más representación tienen en la universidad española son de la región de la unión europea, seguido de los países de América Latina y Caribe, a expensas de la española.
  • El rango de edad entre los 18 y 21 años es el más representado en el alumnado de las universidades españolas. 

Esperemos que esta visualización paso a paso te haya resultado útil para el aprendizaje de algunas técnicas muy habituales en el tratamiento y representación de datos abiertos. Volveremos para mostraros nuevas reutilizaciones. ¡Hasta pronto!

 

calendar icon
Documentación

Gracias al análisis de los datos podemos descubrir patrones significativos y obtener un mayor conocimiento que nos lleva a una toma de decisiones informada. Pero un buen análisis de datos necesita ser metódico y seguir una serie de pasos de forma ordenada. En este vídeo te damos algunas pistas de los pasos a seguir:

La importancia del trabajo previo al análisis

El primer paso es tener claro el objetivo final. Debe ser concreto, claro y directo, identificando un problema a resolver. Una forma de plantearse el objetivo es dar forma a una pregunta concreta a responder, como cuántos accidentes de tráfico hay o cómo evolucionará la calidad del aire.

También es importante conocer el estado previo de la cuestión. Es probable que otras personas y organizaciones se hayan planteado nuestras mismas dudas previamente. Por ello es importante investigar qué proyectos anteriores existen sobre la temática elegida. En plataformas como data.europa.eu o datos.gob.es tienes secciones donde se recogen casos de uso como aplicaciones y empresas. También es recomendable examinar las propuestas presentadas a hackathons, retos y concursos, nacionales e internacionales, así como seguir de cerca la actividad de empresas y start-ups centradas en el ámbito de estudio.

Para poder abarcar tantos frentes, es recomendable contar con un equipo multidisciplinar con distintos puntos de vista, integrando científicos de datos, ingenieros, analistas de negocio, comunicadores, etc. Las habilidades llamadas “blandas”, como el pensamiento crítico, la comunicación efectiva o el conocimiento del sector, son tan importantes como las técnicas si queremos alcanzar el éxito.

¿Dónde localizar los datos?

Con el objetivo final claro, será más fácil determinar qué datos necesitamos para dar respuesta a la pregunta inicial. Lo más habitual es combinar distintas fuentes de información, pública y/o privada, para enriquecer el análisis y alcanzar un nivel de profundidad adecuado.

Además de la multitud de catálogos de datos nacionales existentes, también puedes buscar en repositorios especializados en ámbitos concretos como el medio ambiente, la salud y el bienestar o la economía.

El proceso de análisis

Una vez disponemos de los datos, es el momento de comenzar el análisis, siguiendo el siguiente flujo de trabajo:

ejemplo de proceo o workflow de análisis de datos. Fase 1: Importación y limpieza (importar y ajustar). Fase 2: Exportación y modelo (transformar, visualizar y modelar). Fase 3: Comunicar.

  • Fase 1: Importación y limpieza. Antes del análisis, hay que depurar los datos para conseguir una estructura homogénea, libre de errores y en el formato adecuado. Para ello se recomienda realizar un Análisis Exploratorio de Datos (EDA en sus siglas en inglés). Así obtendremos unos datos limpios, libres de errores y homogéneos.
  • Fase 2: Exportación y modelo.  Según la pregunta a responder determinaremos el tipo de análisis a llevar a cabo: análisis descriptivo (¿qué ha pasado?), diagnóstico (¿por qué ha pasado?), predictivo (¿qué va a pasar) o prescriptivo (¿qué hago para que vuelva -o no- a pasar?).
  • Fase 3: Comunicar. Una vez analizados los datos habremos obtenido nuevo conocimiento, que deberemos comunicar a nuestro público objetivo de forma fácil de comprender. Para ello se pueden usar técnicas de data storytelling, visualizaciones, aplicaciones web o móvil, servicios o productos comerciales, según los objetivos iniciales.

Para poder llevar a cabo estas 3 fases, contamos con distintas herramientas a nuestro alcance. Puedes ver algunos ejemplos en el informe “Herramientas de procesado y visualización de datos”.

Desde datos.gob.es te animamos a que practiques con los datos de nuestro catálogo y pongas en marcha distintos análisis. Puedes compartir los resultados de tus análisis con nosotros a través del buzón de correo electrónico dinamizacion@datos.gob.es.

calendar icon
Documentación

1. Introducción

Las visualizaciones son una representación gráfica que nos permite comunicar de una manera sencilla la información ligada a los datos. Mediante elementos visuales, como gráficos, mapas o nubes de palabras, las visualizaciones, también nos ayudan a comprender tendencias, patrones o valores atípicos que pueden presentar los datos. 

Las visualizaciones se pueden generar a partir de datos de diferente naturaleza, como pueden ser las palabras que conforman una noticia, un libro o una canción. Para realizar visualizaciones a partir de este tipo de datos, es necesario que las maquinas, mediante programas de software, sean capaces de entender, interpretar y reconocer las palabras que configuran el lenguaje humano (escrito o hablado) en múltiples idiomas. El campo de estudio enfocado en el tratamiento de estos datos se denomina Procesamiento del Lenguaje Natural (PLN)Es un campo interdisciplinar que combina el poder de la inteligencia artificial, la lingüística computacional y la informática. Los sistemas basados en PLN han permitido grandes innovaciones como el buscador de Google, el asistente de voz de Amazon, los traductores automáticos, el análisis de sentimientos de diferentes redes sociales o incluso detección de spam en una cuenta de correo electrónico.

En este ejercicio práctico, vamos a implementar una visualización gráfica de un resumen de palabras clave representativas de varios textos extraídas mediante la aplicación de técnicas de PLN. En concreto, vamos a crear una nube de palabras que resuma cuál son los términos que más se repiten en varios posts del portal. 

Esta visualización se engloba dentro de la serie de ejercicios prácticos, en los cuales se utilizan datos abiertos disponibles en el portal datos.gob.es. En estos se abordan y describen de manera sencilla las etapas necesarias para obtener los datos, realizar transformaciones y análisis que resulten pertinentes para la creación de la visualización, extrayendo la máxima información. En cada uno de los ejercicios prácticos se usan sencillos desarrollos de código que estarán convenientemente documentados, así como herramientas de uso libre y gratuito. Todo el material generado estará disponible para su reutilización en el repositorio Laboratorio de datos en GitHub.

2. Objetivos

El objetivo principal de este post es aprender a realizar una visualización que incluya imágenes, generadas a partir de conjuntos de palabras representativas de diversos textos, conocidas popularmente como “nubes de palabras”. Para este ejercicio práctico hemos escogido 6 post publicados en la sección de blog del portal de datos.gob.es. A partir de estos textos y utilizando técnicas de PLN generaremos una nube de palabras para cada texto que nos permitirá detectar de manera sencilla y visual la frecuencia e importancia de cada palabra, facilitando la identificación de las palabras clave y la temática principal de cada uno de los posts

Esquema

A partir de un texto construimos una nube de palabras aplicando técnicas de Procesamiento de Lenguaje Natural (PLN)

3. Recursos

3.1. Herramientas

Para la realización del tratamiento previo de los datos (entorno de trabajo, programación y redacción del mismo), como la visualización propiamente dicha, se utiliza Python (versión 3.7) y Jupyter Notebook (versión 6.1), herramientas que encontraras integradas en, junto con muchas otras, en Anaconda, una de las plataformas más populares para instalar, actualizar y administrar software para trabajar en ciencia de datos. Para abordar las tareas relacionadas con el Procesamiento del Lenguaje Natural, utilizamos dos librerías, Scikit-Learn (sklearn) y wordcloud. Todas estas herramientas son Open Source y están disponibles de manera gratuita.

Scikit-Learn es una amplia librería muy popular, diseñada principalmente para llevar a cabo tareas de aprendizaje automático sobre datos en forma de texto. Entre otros, cuenta con algoritmos para realizar tareas de clasificación, regresión, clustering y reducción de dimensionalidades. Además, está diseñada para el aprendizaje profundo sobre datos textuales, siendo útil para el manejo de conjuntos de características textuales en forma de matrices, la realización de tareas como el cálculo de similitudes, la clasificación de texto y la agrupación de clústeres. En Python, para realizar este tipo de tareas, también es posible trabajar con otras librerías igualmente populares como NLTK o spacy, entre otras.

wordcloud es una librería especializada en la creación de nubes de palabras utilizando un algoritmo simple y que puede ser modificado fácilmente.

Para favorecer el entendimiento de los lectores no especializados en programación, el código en Python que se incluye a continuación, al que puedes acceder haciendo click en el botón “Código” de cada sección, no está diseñado para maximizar su eficiencia, sino para facilitar su comprensión, por lo que es posible que lectores más avanzados en este lenguaje consideren formas alternativas más eficientes para codificar algunas funcionalidades. El lector podrá reproducir este análisis si lo desea, ya que el código fuente está disponible en la cuenta de GitHub de datos.gob.es. La forma de proporcionar el código es a través de un Jupyter Notebook, que una vez cargado en el entorno de desarrollo podrá ejecutarse o modificarse de manera sencilla si se desea.

3.2. Conjuntos de datos

Para este análisis se han seleccionado 6 posts publicados recientemente en el portal de datos abiertos datos.gob.es, en su sección de blog. Estos posts están relacionado con diferentes temáticas relativas a los datos abiertos:

4. Tratamiento de datos

Antes de lanzarnos a construir una visualización efectiva, debemos realizar un tratamiento previo de los datos o preprocesamiento de los datos, prestando atención a la obtención de los mismos, asegurando que no contienen errores y se encuentran en un formato adecuado para su procesamiento. Un tratamiento previo de los datos es esencial para construir cualquier representación visual efectiva y consistente.

En PLN, el preprocesamiento de los datos consiste fundamentalmente en una serie de transformaciones que se realizan sobre los datos de entrada, en nuestro caso varios posts en formato TXT, con el objetivo de obtener datos uniformes y sin elementos que puedan afectar a la calidad de los resultados, con el fin de facilitar su posterior procesamiento para realizar tareas como, generar una nube de palabras, realizar minería de opiniones/sentimientos o generar resúmenes automatizados a partir de textos de entrada. De forma general, el flujograma que se sigue para realizar un preprocesamiento de texto incluye las siguientes etapas: 

  • Limpieza: eliminación de los caracteres y símbolos especiales que contribuyen a distorsionar los resultados, por ejemplo, los signos de puntuación.
  • Tokenizar: la tokenización es el proceso de separar un texto en unidades más pequeñas, tokens. Los tokens pueden ser oraciones, palabras o incluso caracteres.
  • Derivación y Lematización: este proceso consiste en transformar las palabras a su forma básica, es decir a su forma canónica o lema, eliminando plurales, tiempos verbales o géneros. Esta acción en ocasiones no es necesaria ya que no siempre se requiere para el procesamiento posterior saber la similitud semántica entre las diferentes palabras del texto.
  • Eliminación de stop words: las stop words o palabras vacías son aquellas palabras de uso común pero que no contribuyen de una manera significativa en el texto. Estas palabras deben eliminarse antes del procesamiento del texto ya que no aportan ninguna información única que pueda ser usada para la clasificación o agrupación del texto, por ejemplo, los artículos determinantes como ‘los’, ‘las’, ‘una’ ‘unos’, etc.
  • Vectorización: en este paso transformamos cada uno de los tokens obtenidos en el paso anterior a un vector de números reales que se genera en base a la frecuencia de la aparición de cada palabra en el texto.  La vectorización permite que las maquinas sean capaces de procesar texto y aplicar, entre otras, técnicas de aprendizaje automático.

Flujograma

4.1. Instalación y carga de librerías

Antes de empezar con el preprocesamiento de datos, debemos importar las librerías con las cuales vamos a trabajar. Python dispone de una gran cantidad de librerías que permiten implementar funcionalidades para muchas tareas, como visualización de datos, Machine Learning, Deep Learning o Procesamiento del Lenguaje Natural, entre muchas otras. Las librerías que utilizaremos para este análisis y visualización son:

  • os, que permite acceder a funcionalidades dependientes del sistema operativo, como manipular la estructura de directorios.
  • re, proporciona funciones para procesar expresiones regulares.
  • pandas, es una librería muy popular y esencial para procesar tablas de datos.
  • string, proporciona una serie de funciones muy útiles para el manejo de cadenas de caracteres.
  • matplotlib.pyplot, contiene una colección de funciones que nos permitirán generar las representaciones gráficas de las nubes de palabras.
  • sklearn.feature_extraction.text (librería Scikit-Learn), convierte una colección de documentos de texto en una matriz de vectores. De esta librería usaremos algunos comandos que comentaremos más adelante.
  • wordcloud, librería con la cual podremos generar la nube de palabras.

# Importaremos las librerías necesarias para realizar este análisis y la visualización. import  os  import  re   import  pandas as pd  import  string   import  matplotlib.pyplot as plt from  sklearn.feature_extraction.text import CountVectorizer from  sklearn.feature_extraction.text import TfidfTransformer from  wordcloud import WordCloud

4.2. Carga de datos

Una vez cargadas las librerías, preparamos los datos con los cuales vamos a trabajar. Antes de comenzar a cargar los datos, en el directorio de trabajo debemos tener: (a) una carpeta denominada “post” que contendrá todos los archivos en formato TXT con los cuales vamos a trabajar y que están disponibles en el repositorio de este proyecto del GitHub de datos.gob.es;  (b) un archivo denominado “stop_words_spanish.txt” que contiene el listado de las stop words en español, que también está disponible en dicho repositorio y (c) una carpeta llamada “imagenes” donde guardaremos las imágenes de las nubes de palabras en formato PNG, que crearemos a continuación.

# Generamos la carpeta \"imagenes\".nueva_carpeta =  \"imagenes/\" try:     os.mkdir(nueva_carpeta)except  OSError:     print (\"Ya existe una carpeta llamada %s\" % nueva_carpeta)else:     print (\"Se ha creado la carpeta: %s\" % nueva_carpeta)

Seguidamente, procederemos a cargar los datos. Los datos de entrada, como ya hemos comentado anteriormente, se encuentran en ficheros TXT y cada fichero contiene un post. Como queremos realizar el análisis y la visualización de varios posts al mismo tiempo, cargaremos en nuestro entorno de desarrollo todos los textos que nos interesen, para posteriormente insertarlos en una única tabla o dataframe.

# Generamos una lista donde incluiremos todos los archivos que debe leer, indicándole la carpeta donde se encuentran.filePath = []for file in os.listdir(\"./post/\"):     filePath.append(os.path.join(\"./post/\", file))# Generamos un dataframe en el cual incluiremos una fila por cada post.post_df = pd.DataFrame()for file in filePath:     with open (file, \"rb\") as readFile:           post_df = pd.DataFrame([readFile.read().decode(\"utf8\")], append(post_df)# Nombramos la columna que contiene los textos en el dataframe.post_df.columns = [\"texto\"]

4.3. Preprocesamiento de datos

Para el objetivo que nos hemos planteado, generar nubes de palabras para cada post, vamos a realizar las siguientes tareas de preprocesamiento.

a) Limpieza de datos

Una vez generada la tabla que contiene los textos con los cuales vamos a trabajar, debemos eliminar el ruido ajeno al texto que nos interesa: caracteres especiales, signos de puntuación y retornos de carro.

En primer lugar, ponemos en minúscula todos los caracteres para evitar cualquier error en los procesos que distinguen entre mayúsculas y minúsculas, mediante el uso del comando lower().  

Seguidamente eliminamos los signos de puntuación, como puntos, comas, exclamaciones, interrogaciones, entre muchos otros. Para la eliminación de estos recurriremos a la cadena preinicializada string.punctuacion de la librería string, que devuelve un conjunto de símbolos considerados signos de puntuación. Además, debemos eliminar las tabulaciones, saltos de carro y espacios extra, que no aportan información en este análisis, mediante el uso de expresiones regulares.  

Es fundamental aplicar todos estos pasos en una única función para que se procesen de forma secuencial, debido a que todos los procesos están altamente relacionados.

# Eliminamos los signos de puntuación, los saltos de carro/tabulaciones y espacios en blanco extra.# Para ello generamos una función en la cual indicamos todos los cambios que queremos aplicar al texto.def limpiar_texto(texto):      texto = texto.lower()     texto = re.sub(\"\\[.*?¿\\]\\%\", \" \", texto)     texto = re.sub(\"[%s]\" % re.escape(string.punctuation), \" \", texto)     texto re.sub(\"\\w*\\d\\w*\", \" \", texto)     return texto# Aplicamos los cambios al texto.limpiar_texto = lambda x: limpiar_texto(x)post_clean = pd.DataFrame(post_clean.texto.apply/limpiar_texto)

b) Tokenizar

Una vez que hemos eliminado el ruido en los textos con los cuales vamos a trabajar, “tokenizaremos” en palabras cada uno de los textos. Para ello utilizaremos la funció split(), usando como separador entre palabras, el espacio. Esto permitirá separar las palabras de manera independiente (tokens) para análisis futuros.

# Tokenizar los textos. Se crea una nueva columna en la tabla con los tokens con el texto \"tokenizado\".def tokenizar(text):      text = texto.split(sep = \" \")     return(text)post_df[\"texto_tokenizado\"] = post_df[\"texto\"].apply(lambda x: tokenizar(x))

c) Eliminación de \"stop words\"

Después de eliminar los signos de puntuación y otros elementos que pueden distorsionar la visualización objetivo, eliminaremos las “stop words” o palabras vacías. Para la realización de este paso usamos una lista de stop words del castellano dado que cada idioma posee su propia lista. Esta lista consta de un total de 608 palabras, en las que se incluyen artículos, preposiciones, verbos copulativos, adverbios, entre otros y está actualizada recientemente. Esta lista puede descargarse desde la cuenta de GitHub de datos.gob.es en formato TXT y debe estar ubicada en el directorio de trabajo.  

# Leemos el archivo que contiene las palabras vacías en castellano.with open \"stop_words_spanish.txt\", encoding = \"UTF8\") as f:     lines = f.read().splitlines()

En esta lista de palabras, incluiremos nuevas palabras que no aportan información relevante a nuestros textos o aparecen recurrentemente debido al contexto de los mismos. En este caso, existe una serie de palabras, que nos conviene eliminar ya que están presentes en todos los posts de manera repetitiva dado que todos tratan sobre el tema de datos abiertos y existe una alta probabilidad de que éstas sean las palabras más significativas. Algunas de estas palabras son, “datos”, “dato”, “abiertos”, “caso”, entre otras. Esto permitirá obtener una representación gráfica más representativa del contenido de cada post.

Por otro lado, una inspección visual de los resultados obtenidos permite detectar palabras o caracteres derivados de errores incluidos en los textos, que evidentemente no tienen significado y que no han sido eliminados en los pasos anteriores. Estos, deben ser retirados del análisis para que no distorsionen los resultados posteriores. Se trata de palabras como, “nen”, “nun” o “nla”.

# Actualizamos nuestra lista de stop words.stop_words.extend((\"caso\", \"forma\",\"unido\", \"abiertos\", \"post\", \"espera\",                   \"datos\", \"dato\", \"servicio\", \"nun\", \"día\", \"nen\", \"data\",                   \"conjuntos\", \"importantes\", \"unido\", \"unión\", \"nla\", \"r\", \"n\"))# Eliminamos las stop words de nuestra tabla.post_clean = post_clean [~(post_clean[\"texto_tokenizado\"].isin(stop_words))]

d) Vectorización

Las maquinas no son capaces de comprender palabras y oraciones, por lo que estas deben convertirse en alguna estructura numérica. El método consiste en generar vectores a partir de cada token. En este post utilizamos una técnica sencilla conocida como bolsa de palabras (BoW). Consiste en asignar un peso a cada token proporcional a la frecuencia de aparición de dicho token en el texto. Para ello, trabajamos sobre una matriz en la que cada fila representa un texto y cada columna un token. Para realizar la vectorización recurriremos a los comandos CountVectorizer() y TfidTransformer() de la lirería Scikit-Learn.

La función CountVectorizer() permite transformar un texto en un vector de frecuencias o recuentos de palabras. En este caso obtendremos 6 vectores con tantas dimensiones como tokens hay en cada texto, uno por cada post, que integraremos en una única matriz, donde las columnas serán los tokens o palabras y las filas serán los posts.

# Calculamos la matriz de frecuencia de palabras del texto.vectorizador = CountVectorizer()post_vec = vectorizador.fit_transform(post_clean.texto_tokenizado)

Una vez generada la matriz de frecuencia de palabras, es necesario convertirla en una forma vectorial normalizada con el objetivo de reducir el impacto de los tokens que ocurren con mucha frecuencia en el texto. Para ello utilizaremos la función TfidfTransformer().

# Convertimos una matriz de frecuencia de palabras en una forma vectorial regularizada.transformer = TfidfTransformer()post_trans = transformer.fit_transform(post_vec).toarray()

Si quieres saber más sobre la importancia de aplicar está técnica, encontrarás numerosos artículos en Internet que hablan sobre ello y lo relevante que es, entre otras cuestiones, para la optimización de SEO

5. Creación de la nube de palabras 

Una vez que hemos realizado un preprocesamiento del texto, como indicábamos al inicio del post, es posible realizar tareas propias de PLN. En este ejercicio crearemos una nube de palabras o “WordCloud” para cada uno de los textos analizados.  

Una nube de palabras, es una representación visual de las palabras con mayor número de ocurrencias en el texto. Permite detectar de manera sencilla la frecuencia e importancia de cada una de las palabras, facilitando la identificación de las palabras clave y descubriendo con un solo golpe de vista la temática principal tratada en el texto.

Para ello vamos a utilizar la librería “wordcloud” que incorpora las funciones necesarias para construir cada representación. En primer lugar, debemos indicar las características que presentará cada nube de palabras, como es el color de fondo (función background_color), el mapa de colores que tomaran las palabras (función colormap), el tamaño máximo de letra (función max_font_size) o fijar una semilla para que la nube de palabras generada siempre sea igual (función random_state) en futuras ejecuciones. Podemos aplicar estas y muchas otras funciones para personalizar cada nube de palabras. 

# Indicamos las características que presentará cada nube de palabras.wc = WordCloud(stopwords = stop_words, background_color = \"black\",               colormap = \"hsv\", max_font_size = 150, random_state = 123)

Una vez que hemos indicado las características que queremos que presente cada nube de palabras, procedemos a crearla y guardarla como imagen en formato PNG. Para generar la nube de palabras, usaremos un bucle en el cual le indicaremos diferentes funciones de la librería matplotlib (representada por el prefijo plt) necesarias para generar gráficamente la nube de palabras según la especificación definida en el paso anterior. Debemos indicarle que debe realizar una nube de palabras por cada fila de la tabla, es decir por cada texto, con la función plt.subplot(). Con el comando plt.imshow() indicamos que el resultado es una imagen en 2D. Si queremos que no se muestren los ejes debemos indicárselo con la función plt.axis(). Por último, con la función plt.savefig() guardaremos la visualización generada.  

# Generamos las nubes de palabras para cada uno de los posts.for index, i in enumerate(post.columns):     wc.generate(post.texto_tokenizado[i])     plt.subplot(3, 2, index+1     plt.imshow(wc, interpolation = \"bilinear\")     plt.axis(\"off\")     plt.savefig(\"imagenes/.png\")# Mostramos las nubes de palabras resultantes.plt.show()

La visualización obtenida es:

Visualización

Visualización de las nubes de palabras obtenidas a partir de los textos de diferentes posts de la sección de blog de datos.gob.es

5. Conclusiones

La visualización de datos es uno de los mecanismos más potentes para explotar y analizar el significado implícito de los datos, independientemente del tipo de dato y el grado de conocimiento tecnológico del usuario. Las visualizaciones nos permiten construir significado sobre los datos y la creación de narrativas basadas en la representación gráfica.

Las nubes de palabras son una herramienta que permite agilizar el análisis de datos textuales, puesto que a través de ellas podemos identificar e interpretar de manera rápida y sencilla las palabras con mayor relevancia en el texto analizado, lo que nos da una idea de la temática.

Si quieres aprender más sobre el Procesamiento del Lenguaje Natural, puedes consultar la guía \"Tecnologías emergentes y datos abiertos: Procesamiento del lenguaje natural\" y los posts \"Procesamiento del lenguaje natural\" y \"Lo último en procesamiento del lenguaje natural: resúmenes de obras clásicas en tan solo unos cuentos de palabras\".  

Esperemos que esta visualización paso a paso te haya enseñado algunas cosas sobre los entresijos del Procesamiento del Lenguaje Natural y la creación de nubes de palabras. Volveremos para mostraros nuevas reutilizaciones de datos. ¡Hasta pronto!

calendar icon
Documentación

1. Introducción

La visualización de datos es una tarea vinculada al análisis de datos que tiene como objetivo representar de manera gráfica información subyacente de los mismos. Las visualizaciones juegan un papel fundamental en la función de comunicación que poseen los datos, ya que permiten extraer conclusiones de manera visual y comprensible permitiendo, además, detectar patrones, tendencias, datos anómalos o proyectar predicciones, entre otras funciones. Esto hace que su aplicación sea transversal a cualquier proceso en el que intervengan datos. Las posibilidades de visualización son muy amplias, desde representaciones básicas, como puede ser un gráfico de líneas, barras o sectores, hasta visualizaciones complejas configuradas desde dashboards interactivos. 

Antes de lanzarnos a construir una visualización efectiva, debemos realizar un tratamiento previo de los datos, prestando atención a la obtención de los mismos y validando su contenido, asegurando que no contienen errores y se encuentran en un formato adecuado y consistente para su procesamiento. Un tratamiento previo de los datos es esencial para abordar cualquier tarea de análisis de datos que tenga como resultado visualizaciones efectivas.  

Se irán presentando periódicamente una serie de ejercicios prácticos de visualización de datos abiertos disponibles en el portal datos.gob.es u otros catálogos similares. En ellos se abordarán y describirán de manera sencilla las etapas necesarias para obtener los datos, realizar las transformaciones y análisis que resulten pertinentes para la creación de visualizaciones interactivas, de las que podamos extraer la máxima información resumida en unas conclusiones finales. En cada uno de los ejercicios prácticos se utilizarán sencillos desarrollos de código que estarán convenientemente documentados, así como herramientas de uso libre y gratuito. Todo el material generado estará disponible para su reutilización en el repositorio Laboratorio de datos en Github.

Dashboard

Visualización sobre la accidentalidad de tráfico ocurrida en la ciudad de Madrid, por distrito y tipo de vehículo

2. Objetivos

El objetivo principal de este post es aprender a realizar una visualización interactiva partiendo de datos abiertos disponibles en este portal. Para este ejercicio práctico hemos escogido un conjunto de datos que abarca una amplio periodo temporal y que contiene información relevante sobre el registro de accidentes de tráfico que ocurren en la ciudad de Madrid. A partir de estos datos observaremos cuál es el tipo de accidentes más comunes en Madrid y la incidencia que en ellos tiene algunas variables como la edad, el tipo de vehículo o la lesividad que produce el accidente.  

3. Recursos

3.1. Conjuntos de datos

Para este análisis se ha seleccionado un conjuntos de datos sobre los accidentes de tráfico ocurridos en la ciudad de Madrid publicados por el Ayuntamiento de Madrid y que se encuentra disponible en datos.gob.es. Este conjunto de datos contiene una serie temporal que abarca el periodo 2010 hasta 2021 con diferentes desagregaciones que facilitan el análisis de las características que presentan los accidentes de tráfico ocurridos, entre otras, las condiciones ambientales en las que se produjo cada siniestro o el tipo de accidente. La información de la estructura de cada archivo de datos está disponible en documentos que abarcan el periodo 2010-2018 y 2019 en adelante. Cabe destacar que existen inconsistencias en los datos antes y después del año 2019, ya que la estructura de datos varía. Esta es una situación bastante habitual a la que deben enfrentarse los analistas de datos a la hora de abordar las tareas de preprocesamiento de los datos con los que se trabajará posteriormente, derivada de la carencia de una estructura homogénea de los datos a lo largo del tiempo. Por ejemplo, alteración del número de variables, modificación del tipo de variables o cambios a diferentes unidades de medida. Esta es una razón de peso que justifica la necesidad de acompañar cada conjunto de datos abiertos de un completo documento que explique su estructura.

3.2. Herramientas

Para la realización del tratamiento previo de los datos (entorno de trabajo, programación y redacción del mismo) se ha utilizado R (versión 4.0.3) y RStudio con el complemento de RMarkdown.

R es un lenguaje de programación open source orientado a objetos e interpretado, creado inicialmente para la computación estadística y la creación de representaciones gráficas. En la actualidad, es una herramienta muy poderosa para todo tipo de procesamiento y manipulación de datos que está permanentemente actualizada. Además dispone de un entorno de programación, RStudio, también open source.

 

Para la creación de la visualización interactiva se ha utilizado la herramienta Kibana.

Kibana  es una herramienta open source que forma parte del paquete de productos Elastic Stack (Elasticsearch, Beats, Logstash y Kibana) que permite la creación de visualización y la exploración de datos indexados sobre el motor de analítica Elasticsearch.

Si quieres saber más sobre estas herramientas u otras que puedan ayudarte en el procesado de datos y la creación de visualizaciones interactivas, puedes consultar el informe \"Herramientas de procesado y visualización de datos\".

4. Tratamiento de datos

Para la realización de los análisis y visualizaciones posteriores, es necesario preparar los datos de una forma adecuada, para que los resultados obtenidos sean consistentes y efectivos. Debemos realizar un análisis exploratorio de los datos (EDA, por sus siglas en inglés), con el fin de conocer y comprender los datos con los cuales queremos trabajar. El objetivo principal de este pre-procesamiento de los datos es detectar posibles anomalías o errores que pudieran afectar a la calidad de los resultados posteriores e identificar patrones de información contenidos en los datos.

Para favorecer el entendimiento de los lectores no especializados en programación, el código en R que se incluye a continuación, al que puedes acceder haciendo click en el botón de \"Código\" de cada sección, no está diseñado para maximizar su eficiencia, sino para facilitar su comprensión, por lo que es posible que lectores más avanzados en este lenguaje consideren forma alternativas más eficientes para codificar algunas funcionalidades. El lector podrá reproducir este análisis si lo desea, ya que el código fuente está disponible en la cuenta de Github de datos.gob.es. La forma de proporcionar el código es a través de un documento de texto plano, que una vez cargado en el entorno de desarrollo podrá ejecutarse o modificarse de manera sencilla si se desea. 

4.1. Instalación y carga de librerías

Para el desarrollo de este análisis necesitamos instalar una serie de paquetes de R adicionales a la distribución base, incorporando al entorno de trabajo las funciones y objetos definidos por ellas. Hay muchos paquetes disponibles en R pero las más adecuadas para trabajar con este conjunto de datos son: tidyverse, lubridate y data.table. tidyverse es una colección de paquetes de R (contiene a su vez otros paquetes como dplyr, ggplot2, readr, etc) diseñados específicamente para trabajar en Data Science, que facilitar la carga y tratamiento de datos, y las representaciones gráficas, entre otras funcionalidades esenciales para el análisis de datos, pero que requiere un conocimiento progresivo para obtener el máximo partido de los paquetes que integra. Por otro lado, el paquete lubridate lo usaremos para el manejo de variables tipo fecha y por último el paquete data.table permite realizar una gestión más eficiente de conjuntos de datos grandes. Estos paquetes será preciso descargarlos e instalarlos en el entorno de desarrollo. 

 #Lista de librerías que queremos instalar y cargar en nuestro entorno de desarrollo librerias <- c(\"tidyverse\", \"lubridate\", \"data.table\")#Descargamos e instalamos las librerías en nuestros entorno de desarrollo package.check <- lapplay (librerias,      FUN = function(x) {         if (!require (x, character.only = TRUE)) {             install.packages(x, dependencies = TRUE)             library (x, character.only = TRUE                       }           }

4.2. Carga y limpieza de datos

a. Carga de datasets

Los datos que vamos a utilizar en la visualización se encuentran divididos por anualidades en ficheros CSV. Como queremos realizar un análisis de varios años debemos descargar y cargar en nuestro entorno de desarrollo todos los conjuntos de datos que nos interesen.

Para ello, generamos el directorio de trabajo \"datasets\", donde descargaremos todos los conjuntos de datos. Usamos dos listas, una con todas las URLs donde se encuentran localizados los datasets y otra con los nombres que asignamos a cada fichero guardado en nuestra maquina, con ello facilitamos posteriores referencias a estos ficheros. 

 #Generamos una carpeta en nuestro directorio de trabajo para guardar los datasets descargadosif (dir.exists(\".datasets\") ==  FALSE)#Nos colocamos dentro de la carpetasetwd(\".datasets\")#Listado de los datasets que nos interese descargardatasets <- c(\"https://datos.madrid.es/egob/catalogo/300228-10-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-11-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-12-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-13-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-14-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-15-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-16-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-17-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-18-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-19-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-21-accidentes-trafico-detalle.csv\",              \"https://datos.madrid.es/egob/catalogo/300228-22-accidentes-trafico-detalle.csv\")#Descargamos los datasets de interésdt <- list()for (i in 1: length (datasets)){       files <- c(\"Accidentalidad2010\",                  \"Accidentalidad2011\",                  \"Accidentalidad2012\",                  \"Accidentalidad2013\",                  \"Accidentalidad2014\",                  \"Accidentalidad2015\",                  \"Accidentalidad2016\",                  \"Accidentalidad2017\",                  \"Accidentalidad2018\",                  \"Accidentalidad2019\",                  \"Accidentalidad2020\",                  \"Accidentalidad2021\")        download.file(datasets[i], files[i])        filelist <- list.files(\".\")        print(i)        dt[i] <- lapply (filelist[i], read_delim, sep = \";\", escape_double = FALSE,                         locale = locale(encoding = \"WINDOWS-1252\", trim_ws = \"TRUE\")           }

b. Creación de la tabla de trabajo

Una vez que tenemos todos los conjuntos de datos cargados en nuestro entorno de desarrollo, creamos una única tabla de trabajo que integra todos los años de la serie temporal.

Accidentalidad <- rbindlist(dt, use.names = TRUE, fill = TRUE)

Una vez generada la tabla de trabajo, debemos solucionar uno de los problemas más comunes en todo preprocesamiento de datos: la inconsistencia en el nombre de las variables en los diferentes ficheros que componen la serie temporal. Esta anomalía produce variables con nombres diferentes, pero sabemos que representan la misma información. En este caso porque está explicado en el diccionario de datos descrito en la documentación de los archivos, si no fuese así, es necesario recurrir a la observación y exploración descriptiva de los archivos. En este caso, la variable \"RANGO EDAD\" que presenta datos desde 2010 hasta 2018 y la variable \"RANGO DE EDAD\" que presenta los mismos datos pero desde el año 2019 hasta 2021 son diferentes. Para solucionar esta problemática debemos unificar las variables que presentan esta anomalía en una única variable. 

 #Con la función unite() unimos ambas variables. Debemos indicarle el nombre de la tabla, el nombre que queremos asignarle a la variable y la posición de las variables que queremos unificar. Accidentalidad <- unite(Accidentalidad, LESIVIDAD, c(25, 44), remove = TRUE, na.rm = TRUE)Accidentalidad <- unite(Accidentalidad, NUMERO_VICTIMAS, c(20, 27), remove = TRUE, na.rm = TRUE)Accidentalidad <- unite(Accidentalidad, RANGO_EDAD, c(26, 35, 42), remove = TRUE, na.rm = TRUE)Accidentalidad <- unite(Accidentalidad, TIPO_VEHICULO, c(20, 27), remove = TRUE, na.rm = TRUE)

Una vez que tenemos la tabla con la serie temporal completa, generamos una nueva tabla contiendo únicamente las variables que nos interesan para realizar la visualización interactiva que queremos desarrollar. 

Accidentalidad <- Accidentalidad %>% select (c(\"FECHA\", \"DISTRITO\", \"LUGAR ACCIDENTE\",                                                \"TIPO_VEHICULO\", \"TIPO_PERSONA\",                                                \"TIPO ACCIDENTE\", \"SEXO\", \"LESIVIDAD\",                                                \"RANGO_EDAD\", \"NUMERO_VICTIMAS\")    

c. Transformación de variables

A continuación, examinamos el tipo de variables y valores para transformar los tipos que sea necesario para poder realizar futuras agregaciones, gráficos o diferentes análisis estadísticos. 

 #Re-ajustar la variable tipo fechaAccidentalidad$FECHA <- dmy (Accidentalidad$FECHA #Re-ajustar el resto de variables a tipo factor Accidentalidad$'TIPO ACCIDENTE' <- as.factor(Accidentalidad$'TIPO.ACCIDENTE')Accidentalidad$'Tipo Vehiculo' <- as.factor(Accidentalidad$'Tipo Vehiculo')Accidentalidad$'TIPO PERSONA' <- as.factor(Accidentalidad$'TIPO PERSONA')Accidentalidad$'Tramo Edad' <- as.factor(Accidentalidad$'Tramo Edad')Accidentalidad$SEXO <- as.factor(Accidentalidad$SEXO)Accidentalidad$LESIVIDAD <- as.factor(Accidentalidad$LESIVIDAD)Accidentalidad$DISTRITO <- as.factor (Accidentalidad$DISTRITO)

d. Generación de nuevas variables

Vamos a dividir la variable \"FECHA\" en una jerarquía de variables de tipo fecha, \"Año\", \"Mes\" y \"Día\". Esta acción es muy común en la analítica de datos, ya que en muchas ocasiones interesa analizar otros rangos de tiempo, por ejemplo, años, meses, semanas y cualquier otra unidad de tiempo, o necesitamos generar agregaciones a partir del día de la semana.

 #Generación de la variable AñoAccidentalidad$Año <- year(Accidentalidad$FECHA)Accidentalidad$Año <- as.factor(Accidentalidad$Año) #Generación de la variable MesAccidentalidad$Mes <- month(Accidentalidad$FECHA)Accidentalidad$Mes <- as.factor(Accidentalidad$Mes)levels (Accidentalidad$Mes) <- c(\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\",                                  \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\") #Generación de la variable DiaAccidentalidad$Dia <- month(Accidentalidad$FECHA)Accidentalidad$Dia <- as.factor(Accidentalidad$Dia)levels(Accidentalidad$Dia)<- c(\"Domingo\", \"Lunes\", \"Martes\", \"Miercoles\",                                \"Jueves\", \"Viernes\", \"Sabado\")

e. Detección y tratamiento de datos perdidos

La detección y tratamiento de datos perdidos (NAs) es esencial para poder procesar de manera adecuada las variables que contiene la tabla, ya que la ausencia de datos puede ocasionar problemas a la hora de realizar agregaciones, gráficos o análisis estadísticos. 

A continuación analizaremos la ausencia de datos (detección de NAs) en la tabla: 

#Suma de todos los NAs que presenta el datasetsum(is.na(Accidentalidad))#Porcentaje de NAs en cada una de las variablescolMeans(is.na(Accidentalidad))

Una vez detectados los NAs que presenta el dataset, debemos tratarlos de alguna forma. En este caso, como todas las variables de interés, son categóricas, vamos a completar los valores ausentes por un valor de \"No asignado\", para no perder tamaño muestral e información relevante. 

#Sustituimos los NAs de la tabla por el valor \"No asignado\"Accidentalidad [is.na(Accidentalidad)] <- \"No asignado\"

f. Asignaciones de niveles en las variables

Una vez que tenemos en la tabla las variables de interés, podemos realizar un examen más exhaustivo de los datos y categorías que presenta cada una de las variable. Si analizamos cada una de manera independiente, podemos observar que algunas de ellas presentan categorías repetidas, simplemente por uso de tildes, caracteres especiales o mayúsculas. Para que las futuras visualizaciones o análisis estadísticos se construyan de manera eficiente y sin errores, vamos a reasignar los niveles a las variables que lo requieran.

Por razones de espacio, en este post solo mostraremos un ejemplo con la variable \"LESIVIDAD\". Esta variable estaba tipificada hasta 2018 con una serie de categorías (IL, HL, HG, MT), mientras que a partir de 2019 se usaron otras categorías (valores del 0 al 14). Afortunadamente esta tarea resulta fácilmente abordable dado que está documentada en la información sobre la estructura que acompaña cada dataset, cuestión, como hemos comentado con anterioridad que no siempre ocurre, lo que dificulta enormemente este tipo de transformaciones de datos.

#Comprobamos las categorías que presenta la variable \"LESIVIDAD\"levels(Accidentalidad$LESIVIDAD)#Asignamos las nuevas categoríaslevels(Accidentalidad$LESIVIDAD)<- c(\"Sin asistencia sanitaria\", \"Herido leve\",                                         \"Herido leve\", \"Herido grave\", \"Fallecido\",                                         \"Herido leve\", \"Herido leve\", \"Herido leve\",                                        \"Ileso\", \"Herido grave\", \"Herido leve\",                                         \"Ileso\", \"Fallecido\", \"No asignado\")#Comprobamos de nuevo las catergorías que presenta la variablelevels(Accidentalidad$LESIVIDAD)

4.3. Resumen del dataset

Veamos que variables y estructura presenta el nuevo conjunto de datos tras las transformaciones realizadas: 

str(Accidentalidad)summary(Accidentalidad)

La salida de estos comandos la omitiremos para simplificar lectura. Las principales características que presenta el conjunto de datos son:

  • Está compuesto por 14 variables: 1 variable tipo fecha y 13 variables de tipo categórico.
  • El rango temporal abarca desde 01-01-2010 hasta el 31-06-2021 (la fecha final puede variar, ya que el dataset del año 2021 se esta actualizando periódicamente).
  • Por cuestiones de espacio en este post, no todas las variables disponibles se han tenido en cuenta para el análisis y la visualización.

4.4. Guardar el dataset generado

Una vez que tenemos el conjunto de datos con la estructura y variables que nos interesan para realizar la visualización de los datos, lo guardaremos como archivo de datos en formato CSV para posteriormente realizar otros análisis estadísticos o utilizarlo en otras herramientas de procesado o visualización de datos como la que abordamos a continuación. Es importante guardarlo con una codificación UTF-8 (Formato de Transformación Unicode) para que los caracteres especiales sean identificados de manera correcta por cualquier software.

write.csv(Accidentalidad,           file = Accidentalidad.csv\",           fileEncoding=\"UTF-8\")

5. Creación de la visualización sobre los accidentes de tráfico que ocurren en la ciudad de Madrid usando Kibana

Para la realización de esta visualización interactiva se ha usado la herramienta Kibana en su versión gratuita sobre nuestro entorno local. Antes de poder realizar la visualización es necesario tener instalado el software y para ello hemos seguido los pasos del tutorial de descarga e instalación proporcionado por la compañía Elastic. 

Una vez instalado el software de Kibana, procedemos a desarrollar la visualización interactiva. A continuación se incluyen dos vídeo tutoriales, en los cuales se muestra el proceso de realización de la visualización interactiva y la interacción con la misma.  

En este primer vídeo tutorial, se muestra el proceso de desarrollo de la visualización realizando los pasos que se indican a continuación: 

  1. Carga de datos en Elasticsearch, generación de un índice en Kibana que nos permita interactuar con los datos prácticamente en tiempo real e interacción con las variables que presenta el conjunto de datos.
  2. Generación de las siguientes representaciones gráficas:
    • Gráfico de líneas para representar la serie temporal sobre los accidentes de tráfico ocurridos en la ciudad de Madrid.
    • Gráfico de barras horizontales mostrando el tipo de accidente más común.
    • Mapa temático, mostraremos el número de accidentes que ocurren en cada una de los distritos de la ciudad de Madrid. Para la creación de este visual es necesario la descarga del \"conjunto de datos que contiene los distritos georreferenciados en formato GeoJSON\".
  3. Construcción del dashboard integrando los visuales generados en el paso anterior.

En este segundo vídeo tutorial mostraremos la interacción con la visualización que acabamos de crear: 

 

6. Conclusiones

Observando la visualización de los datos sobre los accidentes de tráfico ocurridos en la ciudad de Madrid desde 2010 hasta junio de 2021, se pueden obtener, entre otras, las siguientes conclusiones:

  • El número de accidentes que ocurren en la ciudad de Madrid es estable a lo largo de los años, a excepción del año 2019 donde se observa un fuerte incremento y durante el segundo trimestre de 2020 donde se observa una significativa disminución, que coincide con el período del primer estado de alarma a causa de la pandemia del COVID-19.
  • Todos los años se observa una disminución del número de accidentes durante el mes de agosto.
  • Los hombres suelen tener un número significativamente mayor de accidentes que las mujeres.
  • El tipo de accidente más común es la colisión doble, seguido del atropello a un animal y la colisión múltiple.
  • Alrededor del 50% de los accidentes no ocasionan daños a las personas implicadas.
  • Los distritos con mayor concentración de accidentes son: el distrito de Salamanca, el distrito de Chamartín y el distrito Centro

La visualización de datos es una de los mecanismos más potentes para explotar y analizar de manera autónoma el significado implícito de los datos, independientemente del grado del conocimiento tecnológico del usuario. Las visualizaciones nos permiten construir significado sobre los datos y la creación de narrativas basadas en la representación gráfica.

Si quieres aprender cómo realizar una predicción sobre la siniestralidad futura de accidentes de tráfico utilizando técnicas de Inteligencia Artificial a partir de estos datos, consulta el post sobre \"Tecnologías emergentes y datos abiertos: Analítica Predictiva\".

Esperamos que os haya gustado este post y volveremos para mostraros nuevas reutilizaciones de datos. ¡Hasta pronto!

 

 

calendar icon
Noticia

R es uno de los lenguajes de programación más populares en el mundo de la ciencia de datos.

Es un lenguaje interpretado que además dispone de un entorno de programación, R-Studio y un conjunto de herramientas muy flexibles y versátiles para la computación estadística y creación de representaciones gráficas.

Una de sus ventajas es que las funciones pueden ampliarse fácilmente, mediante la instalación de librerías -denominados paquetes en el entorno de R- o la definición de funciones personalizadas. Además, está permanentemente actualizado, ya que su amplia comunidad de usuarios desarrolla constantemente nuevos paquetes, funciones y actualizaciones disponibles gratuitamente.

Por este motivo, R es uno de los lenguajes más demandados y existe un gran número de recursos para aprender más sobre ello. A continuación, te mostramos una selección basada en las recomendaciones de los expertos que colaboran con datos.gob.es y las comunidades de usuarios R-Hispano y R-Ladies, que reúnen a gran cantidad de usuarios de este lenguaje en nuestro país.

Cursos online

En la red podemos encontrar numerosos cursos online que introducen R a aquellos usuarios noveles.

Curso de R básico

  • Impartido por: Universidad de Cádiz
  • Duración: No disponible.
  • Idioma: Español
  • Gratuito.

Enfocado a estudiantes que están realizando un trabajo fin de grado o master, el curso busca proporcionar los elementos básicos para empezar a trabajar con el lenguaje de programación R en el ámbito de la estadística. Incluye conocimientos sobre estructura de datos (vectores, matrices, data frames…), gráficos, funciones y elementos de programación, entre otros.

Introducción a R

  • Impartido por: Datacamp
  • Duración: 4 horas.
  • Idioma: Inglés.
  • Gratuito

El curso comienza con conceptos básicos, empezando por cómo utilizar la consola como una calculadora y cómo asignar variables. A continuación, se aborda la creación de vectores en R, cómo trabajar con matrices, cómo comparar factores y el uso de data frames o listas.

Introducción a R

  • Impartido por: Red de Universidades Anáhuac
  • Duración: 4 semanas (5-8 horas por semana).
  • Idioma: Español.
  • Modalidad gratuita y de pago.

A través de un enfoque práctico, con este curso aprenderás a crear un ambiente de trabajo para R con R Studio, clasificar y manipular datos, así como realizar gráficas. También aporta nociones básicas de programación en R, abarcando condicionales, ciclos y funciones.

R Programming Fundamentals

  • Impartido por: Stanford School of Engineering
  • Duración: 6 semanas (2-3 horas por semana).
  • Idioma: Inglés
  • Gratuito, aunque el certificado tiene un coste de 79$.

Este curso cubre una introducción a R, desde la instalación hasta las funciones estadísticas básicas. Los estudiantes aprenden a trabajar con conjuntos de datos dinámicos y externos, así como a escribir funciones. En el curso podrás escuchar a uno de los co-creadores del lenguaje R, Robert Gentleman.

Programación R

  • Impartido por: Johns Hopkins University
  • Duración: 57 horas
  • Idioma: Inglés, con subtítulos en español.
  • De pago.

Este curso forma parte de los programas de Ciencia de Datos y Ciencia de los datos: bases utilizando R. Se puede cursar por separado o como parte de dichos programas. Con él aprenderás a comprender los conceptos fundamentales del lenguaje de programación, a utilizar las funciones de loop de R y las herramientas de depuración o a recoger información detallada con R profiler, entre otras cuestiones.

Data Visualization & Dashboarding with R

  • Impartido por: Johns Hopkins University
  • Duración: 4 meses (5 horas por semana)
  • Idioma: Inglés.
  • De pago.

La Universidad John Hopkins también ofrece este curso donde los alumnos generarán diferentes tipos de visualizaciones para explorar los datos, desde figuras sencillas como gráficos de barras y de dispersión hasta cuadros de mando interactivos. Los estudiantes integrarán estas figuras en productos de investigación reproducibles y los compartirán online.

Introducción al software estadístico R

  • Impartido por: Asociación Española para la Calidad (AEC)
  • Duración: Del 5 de octubre al 3 de diciembre de 2021 (50 horas)
  • Idioma: Español
  • De pago.

Se trata de una formación inicial práctica en el uso del software R para el tratamiento de datos y su análisis estadístico a través de las técnicas más sencillas y habituales: análisis exploratorio y relación entre variables. Entre otras cuestiones, los estudiantes adquirirán la capacidad de extraer información valiosa de los datos a través del análisis exploratorio, la regresión y el análisis de la varianza.

Introducción a la programación en R

  • Impartido por: Abraham Requena
  • Duración: 6 horas
  • Idioma: Español
  • De pago (por suscripción)

Diseñado para iniciarse en el mundo de R y aprender a programar con este lenguaje. Podrás aprender los diferentes tipos de datos y objetos que hay en R, a trabajar con ficheros y a utilizar condicionales, así como a crear funciones y gestionar errores y excepciones.

Programación y análisis de datos con R

  • Impartido por: Universidad de Salamanca
  • Duración: Del 25 de octubre de 2021 - 22 de abril de 2022 (80 horas lectivas)
  • Idioma: Español
  • De pago

Empieza desde un nivel básico, con información sobre los primeros comandos y la instalación de paquetes, para continuar con las estructuras de datos (variables, vectores, factores, etc.), funciones, estructuras de control, funciones gráficas y representaciones interactivas, ente otros temas. Incluye un trabajo de fin de curso.

Statistics and R

  • Impartido por: Harvard University
  • Duración: 4 semanas (2-4 horas por semana).
  • Idioma: Inglés
  • De pago

Una introducción a los conceptos estadísticos básicos y a los conocimientos de programación en R necesarios para el análisis de datos en biociencia. A través de ejemplos de programación en R se establece la conexión entre los conceptos y la aplicación.

Para aquellos que quieran aprender más sobre álgebra matricial, la Universidad de Harvard también ofrece de forma online el curso Introduction to Linear Models and Matrix Algebra, donde se utiliza el lenguaje de programación R para llevar a cabo los análisis.

Curso de R gratuito

  • Impartido por: Afi Escuela
  • Duración: 7,5 horas
  • Idioma: Español
  • Gratuito

Este curso fue impartido por Rocío Parrilla, responsable de Data Science en Atresmedia, en formato presencial virtual. La sesión se grabó y está disponible a través de Youtube. Se estructura en tres clases donde se explican los elementos básicos de la programación en R, se hace una introducción al análisis de datos y se aborda la visualización con este lenguaje (visualización estática, visualización dinámica, mapas con R y materiales).

Programación R para principiantes

  • Impartido por: Keepcoding
  • Duración: 12 horas de contenido en video
  • Idioma: Español
  • Gratuito

Consta de 4 capítulos, cada uno de ellos integrado por varios vídeos de corta duración. El primero “Introducción”, aborda la instalación. El segundo, llamado “primeros pasos en R” explica ejecuciones básicas, así como vectores, matrices o data frames, entre otros. El tercero aborda el “Flujo Programa R” y el último los gráficos.

Curso online autónomo Introducción a R

  • Impartido por: Universidad de Murcia
  • Duración: 4 semanas (4-7 horas por semana)
  • Idioma: Español
  • Gratuito

Se trata de un curso práctico dirigido a jóvenes investigadores que necesitan realizar el análisis de los datos de su trabajo y buscan una metodología de que optimice su esfuerzo.

El curso forma parte de un conjunto de cursos relacionados con R que ofrece la Universidad de Murcia, sobre Métodos de análisis de datos multivariantes, Elaboración de documentos e informes técnico–científicos o Métodos de contraste de hipótesis y diseño de experimentos, entre otros.

Libros online relacionados con R

Si en vez de un curso, prefiere un manual o documentación que te pueda ayudar a mejorar tus conocimientos de una manera más amplia, también existen opciones, como las que te detallamos a continuación.

R para profesionales de Datos. Una Introducción

  • Autor: Carlos Gil Bellosta
  • Gratuito

El libro cubre 3 aspectos básicos muy demandados por los profesionales de los datos: la creación de visualizaciones de datos de alta calidad, la creación de dashboards para visualizar y analizar datos, y la creación de informes automáticos. Su objetivo es que el lector puede comenzar a aplicar métodos estadísticos (y de la llamada ciencia de datos) por su cuenta.

Aprendiendo R sin morir en el intento

  • Autor: Javier Álvarez Liébana
  • Gratuito

El objetivo de este tutorial es introducir en la programación y análisis estadístico en R a personas sin necesidad de conocimientos previos de programación. Su objetivo es entender los conceptos básicos de R y dotar al usuario de trucos sencillos y de autonomía básica para poder trabajar con datos.

Aprendizaje Estadístico

  • Autor: Rubén F. Casal
  • Gratuito

Se trata de un documento con los apuntes de la asignatura de Aprendizaje Estadístico del Máster en Técnicas Estadísticas. Ha sido escrito en R-Markdown empleando el paquete bookdown y está disponible en Github. El libro no trata directamente de R, si no que aborda desde una introducción al aprendizaje estadístico, hasta las redes neuronales, pasando por los arboles de decisión o los modelos lineales, entre otros.

Simulación Estadística

  • Autor: Rubén F. Casal y Ricardo Cao
  • Gratuito

Al igual que en el caso anterior, este libro es el manual de una asignatura, en este caso de Simulación Estadística del Máster en Técnicas Estadísticas. También ha sido escrito en R-Markdown empleando el paquete bookdown y está disponible en el repositorio Github. Tras una introducción a la simulación, el libro aborda la generación de números pseudoaleatorios en R, el análisis de resultados de simulación o la simulación de variables continuas y discretas, entre otros.

Estadística con R

  • Autor: Joaquín Amat Rodrigo
  • Gratuito

No es un libro directamente, sino una web donde podrás encontrar diversos recursos y trabajos que te pueden servir de ejemplo a la hora de practicar con R. Su autor es Joaquín Amat Rodrigo también responsable de Machine Learning con R.

la página oficial de R-Studio también disponen de recursos para aprender diferentes paquetes o funciones de R, utilizando diversas cheatsheet.

Masters

Además de cursos, cada vez es más habitual encontrar en universidades masters relacionados con esta materia, como por ejemplo:

Master en Estadística Aplicada con R / Máster en Machine Learning con R

  • Impartido por: Máxima Formación
  • Duración: 10 meses
  • Idioma: Español

La Escuela Máxima Formación ofrece dos masters que comienzan en octubre de 2021 relacionados con R. El Máster en Estadística Aplicada para la Ciencia de Datos con R Software (13ª edición) está dirigido a profesionales que quieran desarrollar desarrolla competencias prácticas avanzadas para solucionar los problemas reales relacionados con el análisis, la manipulación y la representación gráfica de los datos. El Máster en Machine Learning con R Software (2ª edición) está enfocado en el trabajo con datos en tiempo real para crear modelos de análisis y algoritmos con aprendizaje supervisado, no supervisado y aprendizaje profundo.

Además, cada vez más centros de estudio ofrecen masters o programas relacionados con la ciencia de datos que recogen en su temario conocimientos sobre R, tanto generalistas como enfocados en sectores concretos. Algunos ejemplos son:

Esperamos que alguno de estos cursos responda a tus necesidades y puedas convertirte en un experto en R. Si conoces algún otro curso que quieras recomendar, déjanos un comentario o escríbenos a dinamizacion@datos.gob.es.

calendar icon
Documentación

1. Introducción

La visualización de datos es una tarea vinculada al análisis de datos que tiene como objetivo representar de manera gráfica información subyacente de los mismos. Las visualizaciones juegan un papel fundamental en la función de comunicación que poseen los datos, ya que permiten extraer conclusiones de manera visual y comprensible permitiendo, además, detectar patrones, tendencias, datos anómalos o proyectar predicciones, entre otras funciones. Esto hace que su aplicación sea transversal a cualquier proceso en el que intervengan datos. Las posibilidades de visualización son muy amplias, desde representaciones básicas, como puede ser un gráfico de líneas, barras o sectores, hasta visualizaciones complejas configuradas desde dashboards interactivos. 

Antes de lanzarnos a construir una visualización efectiva, debemos realizar un tratamiento previo de los datos, prestando atención a la obtención de los mismos y validando su contenido, asegurando que no contienen errores y se encuentran en un formato adecuado y consistente para su procesamiento. Un tratamiento previo de los datos es esencial para abordar cualquier tarea de análisis de datos que tenga como resultado visualizaciones efectivas.  

Se irán presentando periódicamente una serie de ejercicios prácticos de visualización de datos abiertos disponibles en el portal datos.gob.es u otros catálogos similares. En ellos se abordarán y describirán de manera sencilla las etapas necesarias para obtener los datos, realizar las transformaciones y análisis que resulten pertinentes para la creación de visualizaciones interactivas, de las que podamos extraer la máxima información resumida en unas conclusiones finales. En cada uno de los ejercicios prácticos se utilizarán sencillos desarrollos de código que estarán convenientemente documentados, así como herramientas de uso libre y gratuito. Todo el material generado estará disponible para su reutilización en el repositorio Laboratorio de datos en Github.

Visualización

Visualización del personal docente de Castilla y León clasificados por Provincia, Localidad y Especialidad docente

2. Objetivos

El objetivo principal de este post es aprender a tratar un conjunto de datos desde su descarga hasta la creación de uno o varios gráficos interactivos. Para ello se han utilizado conjuntos de datos que contienen información relevante sobre los docentes y alumnos matriculados en los centros públicos de Castilla y León durante el año académico 2019-2020. A partir de estos datos se realizan análisis de varios indicadores que relacionan docentes, especialidades y alumnado matriculado en los centros de cada provincia o localidad de la comunidad autónoma.  

3. Recursos

3.1. Conjuntos de datos

Para este estudio se han seleccionado conjuntos de datos de la temática Educación publicados por la Junta de Castilla y León, disponibles en el portal de datos abiertos datos.gob.es. Concretamente:

3.2. Herramientas

Para la realización de este análisis (entorno de trabajo, programación y redacción del mismo) se ha utilizado el lenguaje de programación Python (versión 3.7) JupyterLab (versión 2.2), herramientas que encontrarás integradas en Anacondauna de las plataformas más populares para instalar, actualizar o administrar software para trabajar con Data Science. Todas estas herramientas son abiertas y están disponibles de forma gratuita.

 JupyterLab es una interfaz de usuario basada en web que proporciona un entorno de desarrollo interactivo donde el usuario puede trabajar con los denominados cuadernos Jupyter sobre los que podrás integrar y compartir fácilmente texto, código fuente y datos. 

Para la creación de la visualización interactiva se ha usado la herramienta de Kibana (versión 7.10).

Kibana es una aplicación de código abierto que forma parte del paquete de productos  Elastic Stack (Elasticsearch,   Logstash,   Beats Kibana) que proporciona capacidades de visualización y exploración de datos indexados sobre el motor de analítica Elasticsearch.

Si quieres conocer más sobre estas herramientas u otras que pueden ayudarte en el tratamiento y la visualización de datos, puedes ver el informe \"Herramientas de procesado y visualización de datos\", actualizado recientemente.

4. Tratamiento de datos

Como primer paso del proceso es necesario realizar un análisis exploratorio de los datos (EDA) con el fin de interpretar adecuadamente los datos de partida, detectar anomalías, datos ausentes o errores que pudieran afectar a la calidad de los procesos posteriores y resultados. Un tratamiento previo de los datos es esencial para garantizar que los análisis o visualizaciones creados posteriormente a partir de ellos son consistentes y confiables.

Debido al carácter divulgativo de este post y para favorecer el entendimiento de los lectores no especializados, el código no pretende ser el más eficiente, sino facilitar su comprensión por lo que posiblemente se te ocurrirán muchas formas de optimizar el código propuesto para lograr fines similares. ¡Te animamos a que lo hagas! Podrás reproducir este análisis, ya que el código fuente está disponible en nuestra cuenta de Github. La forma de proporcionar el código es a través de un documento realizado sobre JupyterLab que una vez cargado en el entorno de desarrollo podrás ejecutar o modificar de manera sencilla. 

4.1. Instalación y carga de librerías

Lo primero que debemos hacer es importar las librerías para el pre-procesamiento de los datos. Hay muchas librerías disponibles en Python pero una de las más populares y adecuada para trabajar con estos conjuntos de datos es Pandas.  La librería Pandas es una librería muy popular para manipular y analizar conjuntos de datos. 

 import  pandas as pd  

4.2. Carga de datasets

En primer lugar descargamos los conjuntos de datos del catálogo de datos abiertos datos.gob.es y los cargamos en nuestro entorno de desarrollo como tablas para explorarlos y realizar algunas tareas básicas de limpieza y procesado de datos. Para la carga de los datos recurriremos a la función read_csv(), donde le indicaremos la url de descarga del dataset, el delimitador (\";\" en este caso) y, para que interprete correctamente los caracteres especiales como las letras con tildes o \"ñ\" presentes en las cadenas de texto del conjunto de datos, le añadimos el parámetro \"encoding\" que ajustamos al valor \"latin-1\". 

 #Cargamos el dataset de las plantillas jurídicas de los centros públicos de Castilla y León de todos los cuerpos de profesorado, a excepción de los maestros url =  \"https://datosabiertos.jcyl.es/web/jcyl/risp/es/educacion/plantillas-centros-educativos/1284922684978.csv\"docentes = pd.read_csv(url, delimiter=\";\", header=0, encoding=\"latin-1\")docentes.head(3)#Cargamos el dataset de los alumnos matriculados en los centros educativos públicos de Castilla y León  alumnos = pd.read_csv(\"matriculaciones.csv\", delimiter=\",\", names=[\"Municipio\", \"Matriculaciones\"], encoding=\"latin-1\") alumnos.head(3)

La columna \"Municipio\" de la tabla \"alumnos\" está compuesta por el código del municipio y el nombre del mismo. Debemos dividir esta columna en dos, para que su tratamiento sea más eficiente. 

columnas_Municipios = alumnos[\"Municipio\"].str.split(\" \", n=1, expand =  TRUE)alumnos[\"Codigo_Municipio\"] = columnas_Municipios[0]alumnos[\"Nombre_Munipicio\"] = columnas_Munipicio[1]alumnos.head(3)

4.3. Creación de una nueva tabla

Una vez que tenemos ambas tablas con las variables de interés, creamos una nueva tabla resultado de su unión. La variables de unión serán: \"Localidad\" en la tabla de \"docentes\" y \"Nombre_Municipio\" en la de \"alumnos\".

docentes_alumnos = pd.merge(docentes, alumnos, left_on = \"Localidad\", right_on = \"Nombre_Municipio\")docentes_alumnos.head(3)

4.4. Exploración del conjunto de datos

Una vez que disponemos de la tabla que nos interesa, debemos dedicar un tiempo a explorar los datos e interpretar cada variable. En estos casos es de enorme utilidad disponer del diccionario de datos que siempre debe acompañar a cada dataset descargado para conocer todos sus detalles, pero en esta ocasión no disponemos de esta esencial herramienta. Observando la tabla, además de interpretar las variables que lo integran (tipos de datos, unidades, rangos de valores), podemos detectar posibles errores como variables mal tipificadas o la presencia de valores perdidos (NAs) que pueden restar capacidad de análisis.

docentes_alumnos.info()

En la salida de esta sección de código, podemos observar las principales características que presenta la tabla:   

  • Contiene un total de 4.512 registros  
  • Está compuesto de 13 variables, 5 variables numéricas (de tipo entero) y 8 variables de tipo categórico (tipo \"object\")
  • No hay ausencia de valores. 

Una vez que conocemos la estructura y contenido de la tabla, debemos rectificar errores, como es el caso de la transformación de algunas de las variables que no están tipificadas de manera adecuada, por ejemplo, la variable que alberga el código del centro (\"Código.centro\"). 

docentes_alumnos.Codigo_centro = data.Codigo_centro.astype(\"object\")docentes_alumnos.Codigo_cuerpo = data.Codigo_cuerpo.astype(\"object\")docentes_alumnos.Codigo_especialidad = data.Codigo_especialidad.astype(\"object\")

Una vez que tenemos la tabla libre de errores, obtenemos una descripción de las variables numéricas, \"Plantilla\" y \"Matriculaciones\", que nos ayudará a conocer detalles importantes. En la salida del código que presentamos a continuación observamos la media, la desviación estándar, el número máximo y mínimo, entre otros descriptores estadísticos.

docentes_alumnos.describe()

4.5. Guardar el dataset

Una vez que tenemos la tabla libre de errores y con las variables que nos interesa graficar, lo guardaremos en una carpeta de nuestra elección para usarla posteriormente en otras herramientas de análisis o visualización. Lo guardaremos en formato CSV codificada como UTF-8 (Formato de Transformación Unicode) para que los caracteres especiales sean identificados de manera correcta por cualquier herramienta que usemos posteriormente.

df = pd.DataFrame(docentes_alumnos)filname =  \"docentes_alumnos.csv\"df.to_csv(filename, index = FALSE, encoding = \"utf-8\")

5. Creación de la visualización sobre los docentes de los centro educativos públicos de Castilla y León usando la herramienta Kibana 

Para la realización de esta visualización hemos usado la herramienta Kibana en nuestro entorno local. Para realizarla es necesario tener instalado y en funcionamiento Elasticsearch y Kibana. La compañía Elastic nos pone a disposición toda la información sobre la descarga e instalación en este tutorial.

A continuación se adjuntan dos vídeo tutoriales, donde se muestra el proceso de realización de la visualización y la interacción con el dashboad generado.

En este primer vídeo, podrás ver la creación del cuadro de mando (dashboard) mediante la generación de diferentes representaciones gráficas, siguiendo los siguientes pasos: 

  1. Cargamos la tabla de datos previamente procesados en Elasticsearch y generamos un índice que nos permita interactuar con los datos desde Kibana. Este índice permite la búsqueda y gestión de datos, prácticamente en tiempo real.
  2. Generación de las siguientes representaciones gráficas:
    • Gráfico de sectores donde mostrar la plantilla docente por provincia, localidad y especialidad.
    • Métricas del número de docentes por provincia.
    • Gráfico de barras, donde mostraremos el número de matriculaciones por provincia.
    • Filtro por provincia, localidad y especialidad docente.
  3. Construcción del dashboard.

En este segundo vídeo, podrás observa la interacción con el cuadro de mando (dashboard) generado anteriormente. 

6. Conclusiones

Observando la visualización de los datos sobre el número de docentes de los centros educativos públicos de Castilla y León, en el curso académico 2019-2020, se pueden obtener, entre otras, las siguientes conclusiones: 

  • La provincia de Valladolid es la que posee el mayor número de docentes e igualmente, el mayor número de alumnos matriculados. Mientras que Soria es la provincia con menor número de docentes y menor número de alumnos matriculados.
  • Como era de esperar, las localidades que presentan mayor número de docentes son las capitales de provincia.
  • En todas las provincias, la especialidad con mayor número de alumnos es Inglés, seguida de Lengua Castellana y Literatura y Matemáticas.
  • Llama la atención, que la provincia de Zamora, aunque posee un número bajo de alumnos matriculados, está en quinta posición en el número de docentes

Esta sencilla visualización nos ha ayudado a sintetizar una gran cantidad de información y a obtener una serie de conclusiones a golpe de vista, y si fuera necesario tomar decisiones en función de los resultados obtenidos. Esperamos que os haya resultado útil este nuevo post y volveremos para mostraros nuevas reutilizaciones de datos abiertos. ¡Hasta pronto!

calendar icon
Documentación

1. Introducción

La visualización de datos es una tarea vinculada al análisis de datos que tiene como objetivo representar de manera gráfica información subyacente de los mismos. Las visualizaciones juegan un papel fundamental en la función de comunicación que poseen los datos, ya que permiten extraer conclusiones de manera visual y comprensible permitiendo, además, detectar patrones, tendencias, datos anómalos o proyectar predicciones, entre otras funciones. Esto hace que su aplicación sea transversal a cualquier proceso en el que intervengan datos. Las posibilidades de visualización son muy amplias, desde representaciones básicas, como puede ser un gráfico de líneas, barras o sectores, hasta visualizaciones complejas configuradas desde dashboards interactivos. 

Antes de lanzarnos a construir una visualización efectiva, debemos realizar un tratamiento previo de los datos, prestando atención a la obtención de los mismos y validando su contenido, asegurando que no contienen errores y se encuentran en un formato adecuado y consistente para su procesamiento. Un tratamiento previo de los datos es esencial para abordar cualquier tarea de análisis de datos que tenga como resultado visualizaciones efectivas.  

Se irán presentando periódicamente una serie de ejercicios prácticos de visualización de datos abiertos disponibles en el portal datos.gob.es u otros catálogos similares. En ellos se abordarán y describirán de manera sencilla las etapas necesarias para obtener los datos, realizar las transformaciones y análisis que resulten pertinentes para la creación de visualizaciones interactivas, de las que podamos extraer la máxima información resumida en unas conclusiones finales. En cada uno de los ejercicios prácticos se utilizarán sencillos desarrollos de código que estarán convenientemente documentados, así como herramientas de uso libre y gratuito. Todo el material generado estará disponible para su reutilización en el repositorio Laboratorio de datos en Github.

Visualización

Captura del vídeo que muestra la interacción con el dashboard de la caracterización de la demanda de empleo y la contratación registrada en España disponible al final de este artículo

2. Objetivos

El objetivo principal de este post es realizar una visualización interactiva partiendo de datos abiertos. Para ello se han utilizado conjuntos de datos que contienen información relevante sobre la evolución de la demanda de empleo en España a lo largo de los últimos años. A partir de estos datos se determina el perfil que representa la demanda de empleo en nuestro país, estudiando específicamente cómo afecta la brecha de género al colectivo y la incidencia de variables como la edad, la prestación por desempleo o la región.  

3. Recursos

3.1. Conjuntos de datos

Para este análisis se han seleccionado conjuntos de datos publicados por el Servicio Público de Empleo Estatal (SEPE), coordinado por el Ministerio de Trabajo y Economía Social, que recogen series temporales de datos con diferentes desagregaciones que facilitan el análisis de las características que presentan los demandantes de empleo. Estos datasets se encuentran disponibles en datos.gob.es con las siguientes características: 

3.2. Herramientas

Para la realización de este análisis (entorno de trabajo, programación y redacción del mismo) se ha utilizado R (versión 4.0.3) y RStudio con el complemento de RMarkdown.

RStudio es un entorno de desarrollo open source integrado para el lenguaje de programación R, dedicado al análisis estadístico y la creación de gráficos.

RMarkdown permite la realización de informes integrando texto, código y resultados dinámicos en un único documento.

Para la creación de los gráficos interactivos se ha utilizado la herramienta Kibana.

Kibana es una aplicación de código abierto que forma parte del paquete de productos  Elastic Stack (Elasticsearch, Beats, Logstasg y Kibana) que proporciona capacidades de visualización y exploración de datos indexados sobre el motor de analítica Elasticsearch. Las principales ventajas de esta herramienta son: 

  • Presenta la información de manera visual a través de dashboards interactivos y personalizables mediante intervalos temporales, filtros facetados por rango, cobertura geoespacial, entre otros.
  • Dispone de un catálogo de herramientas de desarrollo (Dev Tools) para interactuar con los datos almacenados en Elasticsearch.
  • Cuenta con una versión gratuita para utilizar en tu propio ordenador y una versión enterprise que se desarrolla en un cloud propio de Elastic u otras infraestructuras en cloud como Amazon Web Service (AWS). 

En la propia web de Elastic encontramos manuales de usuario para la descarga e instalación de la herramienta, o cómo crear gráficos o dashboards, entre otros. Además ofrece vídeos cortos en su canal de youtube y organiza webinars donde explican diversos aspectos relacionados con Elastic Stack. 

Si quieres saber más sobre estas herramientas u otras que pueden ayudarte en el procesado de datos, puedes ver el informe \"Herramientas de procesado y visualización de datos\", actualizado recientemente.

4. Tratamiento de datos

Para la realización una visualización, es necesario preparar los datos de la forma adecuada realizando una serie de tareas que incluyen el preprocesado y el análisis exploratorio de los datos (EDA, por sus siglas en inglés), con el fin de conocer la realidad de los datos a los que nos enfrentamos. El objetivo es identificar características de los datos y detectar las posibles anomalías o errores que pudieran afectar a la calidad de los resultados. Un tratamiento previo de los datos es esencial para que los análisis o las visualizaciones que se realicen posteriormente sean consistentes y efectivas. 

Para favorecer el entendimiento de los lectores no especialistas en programación, el código en R que se incluye a continuación, al que puedes acceder haciendo clik en \"Código\", no está diseñado para su eficiencia sino para su fácil comprensión, por lo que es posible que lectores más avanzados en este lenguaje de programación consideren una forma de codificar algunas funcionalidades de forma alternativa. El lector podrá reproducir este análisis si lo desea, ya que el código fuente está disponible en cuenta en Github de datos.gob.es. La forma de proporcionar el código es a través de un documento de RMarkdown. Una vez cargado en el entorno de desarrollo podrá ejecutarse o modificarse de manera sencilla si se desea.

4.1. Instalación y carga de librerías

El paquete base de R, siempre disponible desde que abrimos la consola en RStudio, incorpora un amplio conjunto de funcionalidades para cargar datos de fuentes externas, llevar a cabo análisis estadísticos y obtener representaciones gráficas. No obstante, hay multitud de tareas para las que necesitamos recurrir a paquetes adicionales incorporando al entorno de trabajo las funciones y objetos definidos en ellas. Algunos de ellos ya están instalados en el sistema, pero otros será preciso descargarlos e instalarlos. 

#Instalación de paquetes \r\n #El paquete dplyr presenta una colección de funciones para realizar de manera sencilla operaciones de manipulación de datos \r\n if  (!requireNamespace(\"dplyr\", quietly = TRUE)) {install.packages(\"dplyr\")}\r\n #El paquete lubridate para el manejo de variables tipo fecha \r\n if  (!requireNamespace(\"lubridate\", quietly = TRUE)) {install.packages(\"lubridate\")}\r\n#Carga de paquetes en el entorno de desarrollo \r\nlibrary (dplyr)\r\nlibrary (lubridate)\r\n

4.2. Carga y limpieza de datos

a. Carga de datasets

Los datos que vamos a utilizar en la visualización se encuentran divididos por anualidades en ficheros .CSV y .XLS. Debemos cargar en nuestro entorno de desarrollo todos los ficheros que nos interesan. El siguiente código muestra como ejemplo la carga de un único fichero .CSV en una tabla de datos para que la lectura de este post sea más comprensible.

Para agilizar el proceso de carga en el entorno de desarrollo, es necesario descargar en el directorio de trabajo los conjuntos de datos necesarios para esta visualización, que se encuentran disponibles en la cuenta de Github de datos.gob.es.

#Carga del datasets de demandantes de empleo por municipio de 2020. \r\n Demandantes_empleo_2020 <- \r\n  read.csv(\"Conjuntos de datos/Demandantes de empleo por Municipio/Dtes_empleo_por_municipios_2020_csv.csv\",\r\n          sep=\";\", skip = 1, header = T)\r\n

Una vez que tenemos todos los conjuntos de datos cargados como tablas en el entorno de desarrollo, debemos unificarlos para así tener un único dataset que integre todos los años de la serie temporal, por cada una de las características relacionadas con los demandantes de empleo que se quiere analizar: número de demandantes de empleo, gasto por desempleo y nuevos contratos registrados por el SEPE.

#Dataset de demandantes de empleo\r\nDatos_desempleo <- rbind(Demandantes_empleo_2006, Demandantes_empleo_2007, Demandantes_empleo_2008, Demandantes_empleo_2009, \r\n                            Demandantes_empleo_2010, Demandantes_empleo_2011,Demandantes_empleo_2012, Demandantes_empleo_2013,\r\n                            Demandantes_empleo_2014, Demandantes_empleo_2015, Demandantes_empleo_2016, Demandantes_empleo_2017, \r\n                            Demandantes_empleo_2018, Demandantes_empleo_2019, Demandantes_empleo_2020) \r\n#Dataset de gasto en prestaciones por desempleo\r\ngasto_desempleo <- rbind(gasto_2010, gasto_2011, gasto_2012, gasto_2013, gasto_2014, gasto_2015, gasto_2016, gasto_2017, gasto_2018, gasto_2019, gasto_2020)\r\n#Dataset de nuevos contratos a demandantes de empleo\r\nContratos <- rbind(Contratos_2006, Contratos_2007, Contratos_2008, Contratos_2009,Contratos_2010, Contratos_2011, Contratos_2012, Contratos_2013, \r\n                      Contratos_2014, Contratos_2015, Contratos_2016, Contratos_2017, Contratos_2018, Contratos_2019, Contratos_2020)

b. Selección de variables

Una vez que tenemos las tablas con las tres series temporales (número de demandantes de empleo, gasto por desempleo y nuevos contratos registrados), crearemos una nueva tabla que incluirá las variables que interesan de cada una de ellas. 

En primer lugar, agregaremos por provincia las tablas de demandantes de empleo (“datos_desempleo”) y contratos nuevos contratos registrados (“contratos”) para facilitar la visualización y que coincidan con la desagregación por provincia de la tabla de gasto en prestaciones por desempleo (“gasto_desempleo”). En este paso, seleccionamos únicamente las variables que interesen de los tres conjuntos de datos. 

#Realizamos un group by al dataset de \"datos_desempleo\", agruparemos las variables numéricas que nos interesen, en función de varias variables categóricas\r\nDtes_empleo_provincia <- Datos_desempleo %>% \r\n  group_by(Código.mes, Comunidad.Autónoma, Provincia) %>%\r\n  summarise(total.Dtes.Empleo = (sum(total.Dtes.Empleo)), Dtes.hombre.25 = (sum(Dtes.Empleo.hombre.edad...25)), \r\n            Dtes.hombre.25.45 = (sum(Dtes.Empleo.hombre.edad.25..45)), Dtes.hombre.45 = (sum(Dtes.Empleo.hombre.edad...45)),\r\n            Dtes.mujer.25 = (sum(Dtes.Empleo.mujer.edad...25)), Dtes.mujer.25.45 = (sum(Dtes.Empleo.mujer.edad.25..45)),\r\n            Dtes.mujer.45 = (sum(Dtes.Empleo.mujer.edad...45)))\r\n#Realizamos un group by al dataset de \"contratos\", agruparemos las variables numericas que nos interesen en función de las varibles categóricas.\r\nContratos_provincia <- Contratos %>% \r\n  group_by(Código.mes, Comunidad.Autónoma, Provincia) %>%\r\n  summarise(Total.Contratos = (sum(Total.Contratos)),\r\n            Contratos.iniciales.indefinidos.hombres = (sum(Contratos.iniciales.indefinidos.hombres)), \r\n            Contratos.iniciales.temporales.hombres = (sum(Contratos.iniciales.temporales.hombres)), \r\n            Contratos.iniciales.indefinidos.mujeres = (sum(Contratos.iniciales.indefinidos.mujeres)), \r\n            Contratos.iniciales.temporales.mujeres = (sum(Contratos.iniciales.temporales.mujeres)))\r\n#Seleccionamos las variables que nos interesen del dataset de \"gasto_desempleo\"\r\ngasto_desempleo_nuevo <- gasto_desempleo %>% select(Código.mes, Comunidad.Autónoma, Provincia, Gasto.Total.Prestación, Gasto.Prestación.Contributiva)

En segundo lugar, procedemos a unir las tres tablas en una que será con la que trabajemos a partir de este punto.

Caract_Dtes_empleo <- Reduce(merge, list(Dtes_empleo_provincia, gasto_desempleo_nuevo, Contratos_provincia))

 

c. Transformación de variables

Una vez tengamos la tabla con las variables de interés para el análisis y la visualización, debemos transformar algunas de ellas a otros tipos más adecuados para futuras agregaciones.

#Transformación de una variable fecha\r\nCaract_Dtes_empleo$Código.mes <- as.factor(Caract_Dtes_empleo$Código.mes)\r\nCaract_Dtes_empleo$Código.mes <- parse_date_time(Caract_Dtes_empleo$Código.mes(c(\"200601\", \"ym\")), truncated = 3)\r\n#Transformamos a variable numérica\r\nCaract_Dtes_empleo$Gasto.Total.Prestación <- as.numeric(Caract_Dtes_empleo$Gasto.Total.Prestación)\r\nCaract_Dtes_empleo$Gasto.Prestación.Contributiva <- as.numeric(Caract_Dtes_empleo$Gasto.Prestación.Contributiva)\r\n#Transformación a variable factor\r\nCaract_Dtes_empleo$Provincia <- as.factor(Caract_Dtes_empleo$Provincia)\r\nCaract_Dtes_empleo$Comunidad.Autónoma <- as.factor(Caract_Dtes_empleo$Comunidad.Autónoma)

d. Análisis exploratorio

Veamos qué variables y estructura presenta el nuevo conjunto de datos.

str(Caract_Dtes_empleo)\r\nsummary(Caract_Dtes_empleo)

La salida de esta porción de código se omite para facilitar la lectura. Las características principales que presenta el conjunto de datos son:

  • El rango temporal abarca desde enero de 2010 hasta diciembre de 2020.
  • El número de columnas (variables) es de 17.
  • Presenta dos variables categóricas (“Provincia” y “Comunidad.Autónoma”), una variable tipo fecha (“Código.mes”) y el resto son variables numéricas.

e. Detección y tratamiento de datos perdidos

Seguidamente analizaremos si el dataset presenta valores perdidos (NAs). El tratamiento o la eliminación de los NAs es esencial, ya que si no es así no será posible procesar adecuadamente las variables numéricas.

any(is.na(Caract_Dtes_empleo)) \r\n#Como el resultado es \"TRUE\", eliminamos los datos perdidos del dataset, ya que no sabemos cual es la razón por la cual no se encuentran esos datos\r\nCaract_Dtes_empleo <- na.omit(Caract_Dtes_empleo)\r\nany(is.na(Caract_Dtes_empleo))

4.3. Creación de nuevas variables

Para realizar la visualización, vamos a crear una nueva variable a partir de dos variables que se encuentran en la tabla de datos. Esta acción es muy común en el análisis de datos ya que en ocasiones interesa trabajar con datos calculados (por ejemplo, la suma o la media de diferentes variables) en lugar de los datos de origen. En este caso vamos a calcular el gasto medio en prestaciones por desempleo para cada demandante de empleo. Para ello utilizaremos las variables de gasto total por prestación (“Gasto.Total.Prestación”) y el total de demandantes de empleo (“total.Dtes.Empleo”).

Caract_Dtes_empleo$gasto_desempleado <-\r\n  (1000 * (Caract_Dtes_empleo$Gasto.Total.Prestación/\r\n     Caract_Dtes_empleo$total.Dtes.Empleo))

4.4. Guardar el dataset

Una vez que tenemos la tabla con las variables que nos interesan para los análisis y las visualizaciones, la guardaremos como archivo de datos en formato CSV para posteriormente realizar otros análisis estadísticos o utilizarlo en otras herramientas de procesado o visualización de datos. Es importante utilizar la codificación UTF-8 (Formato de Transformación Unicode) para que los caracteres especiales sean identificados de manera correcta por cualquier herramienta.

write.csv(Caract_Dtes_empleo,\r\n          file=\"Caract_Dtes_empleo_UTF8.csv\",\r\n          fileEncoding= \"UTF-8\")

5. Creación de la visualización sobre la caracterización de la demanda de empleo en España usando Kibana

El desarrollo de esta visualización interactiva se ha realizado usando Kibana en nuestro entorno local. Tanto para la descarga del software, como para la instalación del mismo, hemos recurrido al tutorial realizado por la propia compañía, Elastic

A continuación se adjunta un vídeo tutorial donde se muestra todo el proceso de realización de la visualización. En el vídeo podrás ver la creación de un cuadro de mando (dashboard) con diferentes indicadores interactivos mediante la generación de representaciones gráficas de diferentes tipos. Los pasos para obtener el dashboard son los siguientes: 

  1. Cargamos los datos en Elasticsearch y generamos un índice que nos permita interactuar con los datos desde Kibana. Este índice permite la búsqueda y gestión de datos en los archivos cargados, prácticamente en tiempo real.
  2. Generación de las siguientes representaciones gráficas:
    • Gráfico de líneas para representar la serie temporal sobre los demandantes de empleo en España desde 2006 hasta 2020.
    • Gráfico de sectores de los demandantes de empleo desagregados por Provincia y Comunidad Autónoma.
    • Mapa temático, mostrando el número de contratos nuevos registrados en cada Provincia del territorio. Para la creación de este visual es necesaria la descarga de un dataset de la georeferenciación de las Provincias publicado en el portal de datos abiertos Open Data Soft.
  3. Construcción del dashboard.

Seguidamente mostraremos un vídeo tutorial interactuando con la visualización que acabamos de crear: 

 

6. Conclusiones

Observando la visualización de los datos sobre el perfil de los demandantes de empleo en España en el periodo 2010 hasta 2020, se pueden obtener, entre otras, las siguientes conclusiones:

  • Existen dos incrementos significativos en el número de demandantes de empleo. El primero aproximadamente en 2010, que coincide con la crisis económica. El segundo, mucho más pronunciado en 2020, que coincide con la crisis derivada de la pandemia.
  • Se observa que existe una brecha de género en el colectivo de demandantes de empleo: el número de mujeres demandantes de empleo es mayor a lo largo de toda la serie temporal, principalmente en los grupos de edad de mayores de 25.
  • A nivel regional, Andalucía, seguida de Cataluña y Comunidad Valenciana, son las Comunidades Autónomas con mayor número de demandantes de empleo. En contraste, Andalucía, es la Comunidad Autónoma con menor gasto por desempleo, mientras que Cataluña, es la que presenta mayor gasto por desempleo.  
  • Los contratos de tipo temporal son los prioritarios y las provincias que generan mayor número de contratos son Madrid y Barcelona, que coinciden con las provincias con mayor número de habitantes, mientras que en el lado opuesto, las provincias que menos número de contratos realizan son Soria, Ávila, Teruel o Cuenca, que coincide con las zonas más despobladas de España. 

Esta visualización nos ha ayudado a sintetizar gran cantidad de información y darle sentido pudiendo obtener unas conclusiones y si fuera necesario tomar decisiones en función de los resultados. Esperemos que os haya gustado este nuevo post y volveremos para mostraros nuevas reutilizaciones de datos abiertos. ¡Hasta pronto!

calendar icon
Blog

La democratización de la tecnología en todos sus ámbitos es una tendencia imparable. Con la generalización de los smartphones y el acceso a Internet, cada vez más personas pueden acceder a productos y servicios de alta tecnología sin tener que recurrir a conocimientos avanzados o especialistas. El mundo de los datos no es ajeno a esta transformación y en este post te contamos por qué.

Introducción

Hoy en día, ya no hace falta ser un experto en edición y post-producción de video para tener nuestro propio canal en YouTube y generar contenidos de muy alta calidad. De la misma manera que no hace falta ser un super especialista para tener un hogar inteligente y conectado. Esto es debido a que los creadores de tecnología cada vez ponen más atención en proporcionar herramientas sencillas y con una cuidada experiencia de uso en el consumidor medio. Con los datos ocurre algo similar. Dada la importancia de los datos en la sociedad actual, tanto para uso particular cómo para uso profesional, en los últimos años hemos visto cómo se democratizan las herramientas para hacer análisis de datos sencillo, sin necesidad de tener conocimientos avanzados de programación.

En este sentido, las hojas de cálculo siempre han vivido entre nosotros y nos hemos acostumbrado tanto a su uso que las usamos casi para cualquier cosa, desde una lista de la compra hasta un presupuesto familiar. Las hojas de cálculo son tan populares que hasta se plantean hacer campeonatos cómo si de un deporte se tratara. Sin embargo, pese a su gran versatilidad, no son las herramientas más visuales desde el punto de vista de comunicación de la información. Además, las hojas de cálculo, no son adecuadas para un tipo de dato que cada vez tiene más peso en la actualidad: los datos en tiempo real.

El mundo nativamente digital, genera cada vez más datos en tiempo real. Algunos informes sugieren que, para 2025, una cuarta parte de los datos mundiales, serán datos en tiempo real. Es decir, serán datos con un ciclo de vida mucho más corto, durante el cual se generarán, analizarán en tiempo real y desaparecerán, puesto que no tendrá sentido almacenarlos para un uso posterior. Uno de los mayores vectores de contribución a los datos en tiempo real será el crecimiento de las tecnologías Internet of Things (IoT).

De la misma forma que ocurrió con las hojas de cálculo o las herramientas de inteligencia de negocio (Business Intelligence) de autoservicio, los desarrolladores de tecnologías para datos ponen ahora el foco en democratizar las herramientas de datos diseñadas para datos en tiempo real. Pongamos un ejemplo concreto de herramienta de este tipo.

Herramientas de programación de bajo código

Las herramientas de programación de bajo código (low-code) son aquellas que nos permiten construir programas sin necesidad de tener conocimientos de programación específicos. Normalmente, las herramientas low-code emplean un sistema de programación gráfico, mediante bloques o cajas, en las que el usuario puede ir construyendo un programa, eligiendo y arrastrando las cajas que necesita para construir su programa. En contra de lo que podría parecer, las herramientas de programación low-code no son nuevas y llevan muchos años entre nosotros en ámbitos especializados cómo la ingeniería o el diseño de procesos. En este post, vamos a centrarnos en una concreta, especialmente pensada para datos y en particular, datos en tiempo real.

Node-RED

Node-RED es una herramienta open-source bajo el amparo de la OpenJS foundation que forma parte de los proyectos de la Linux Foundation. Node-RED se define a sí misma como una herramienta de bajo código especialmente diseñada para aplicaciones basadas en eventos. Las aplicaciones basadas en eventos son programas informáticos cuyas funcionalidades básicas reciben y generan datos en forma de eventos. Por ejemplo, una aplicación que genere una notificación en un servicio de mensajería instantánea a partir de una alarma provocada por un sensor, es una aplicación basada en eventos. Tanto el dato de entrada -la alarma del sensor- cómo el dato de salida -la notificación por mensajería- son eventos o datos en tiempo real.

Este tipo de programación fue inventada por Paul Morrison en la década de los 70 del siglo pasado. Su funcionamiento se basa en disponer de una serie de cajas o nodos, cada una de las cuales tiene una funcionalidad específica (recibir un dato de un sensor o generar una notificación). Los nodos se van conectando entre sí (gráficamente, sin tener que programar nada) hasta construir lo que se conoce cómo un flow, que es el equivalente a un programa o a una parte concreta de un programa. Una vez construido el flow, la aplicación se encarga de mantener el flujo constante de datos desde su entrada hasta su salida. Veamos un ejemplo concreto para entenderlo mejor.

Análisis de datos de ruido en tiempo real en la ciudad de Valencia

La mejor forma de demostrar la potencia de Node-RED es haciendo un prototipo sencillo (un programa en menos de 5 minutos) que nos permite acceder y visualizar los datos de los medidores de ruido instalados en un barrio concreto de la ciudad de Valencia. Para ello, lo primero que vamos a hacer es localizar un conjunto de datos abiertos del catálogo de datos.gob.es. En este caso hemos escogido este conjunto, que proporciona los datos mediante una API y, cuya particularidad, es que se actualiza en tiempo real con los datos obtenidos directamente de la red de contaminación sonora instalada en Valencia. Escogemos ahora la distribución que nos proporciona los datos en formato XML y ejecutamos la llamada.

El resultado que nos devuelve el navegador tiene este aspecto (está truncado -se ha cortado lo que devuelve la API- debido a la extensa longitud de la respuesta):

<response>

<resources name="response">

<resource>

<str name="LAeq">065.6</str>

<str name="name">Sensor de ruido del barrio de ruzafa. Cadiz 3</str>

<str name="dateObserved">2021-06-05T08:18:07Z</str>

<date name="modified">2021-06-05T08:19:08.579Z</date>

<str name="uri">http://apigobiernoabiertortod.valencia.es/rest/datasets/estado_sonometros_cb/t248655.xml</str>

</resource>

<resource>

<str name="LAeq">058.9</str>

<str name="name">Sensor de ruido del barrio de ruzafa. Sueca Esq. Denia</str>

<str name="dateObserved">2021-06-05T08:18:04Z</str>

<date name="modified">2021-06-05T08:19:08.579Z</date>

<str name="uri">http://apigobiernoabiertortod.valencia.es/rest/datasets/estado_sonometros_cb/t248652.xml</str>

</resource>

Donde el parámetro LAeq es la medida del nivel de ruido[1]

Para obtener este mismo resultado devuelto por la API en un programa en tiempo real con Node-RED, tan solo tenemos que iniciar Node-RED en nuestro navegador (para instalar Node-RED en tu ordenador puedes seguir las instrucciones aquí)

representación de los 6 nodos que forman el flow o programa que solicita los datos del sensor instalado en "Sensor de ruido del barrio de Ruzafa. Cádiz 3"

Con tan solo 6 nodos (incluidos por defecto en la instalación básica de Node-RED) podemos construir este flow o programa que solicita los datos del sensor instalado en "Sensor de ruido del barrio de Ruzafa. Cádiz 3" y devolvernos el valor de ruido que se actualiza cada minuto de forma automática. Puedes ver un video demostrativo aquí.

Node-Red tiene muchas más posibilidades, es posible combinar varios flows para realizar programas mucho más complejos o construir dashboards muy visuales cómo este para aplicaciones finales.

En definitiva, en este artículo te hemos mostrado cómo no necesitas saber programar ni utilizar complejos programas de software para hacer tus propias aplicaciones accediendo a datos abiertos en tiempo real. Puedes obtener mucha más información sobre cómo empezar a usar Node-RED aquí. También puedes probar otras herramientas similares a Node-RED cómo Apache Nify o ThingsBoard. Estamos seguros de que las posibilidades que se te ocurren son infinitas. ¡Anímate a crear!

[1] Nivel sonoro continuo equivalente. Se define en la ISO 1996-2:2017 como el valor del nivel de presión en dBA en ponderación A de un sonido estable que en un intervalo de tiempo T posee la misma presión sonora cuadrática media que el sonido que se mide y cuyo nivel varía con el tiempo. En este caso el período establecido para este sensor es de 1 minuto.


Contenido elaborado por Alejandro Alija,experto en Transformación Digital e Innovación.

Los contenidos y los puntos de vista reflejados en esta publicación son responsabilidad exclusiva de su autor.

calendar icon
Noticia

El verano ya está a la vuelta de la esquina y con él las merecidas vacaciones. Sin duda, esta época del año nos brinda tiempo para descansar, reencontrarnos con la familia y pasar ratos agradables con nuestros amigos.

Sin embargo, también resulta una magnífica oportunidad para aprovechar y mejorar nuestro conocimiento sobre datos y tecnología a través de los cursos que diferentes universidades ponen a nuestra disposición durante estas fechas. Ya seas estudiante o profesional en activo, este tipo de cursos pueden contribuir a aumentar tu formación, y ayudarte a adquirir ventajas competitivas dentro del mercado laboral.

A continuación, te mostramos varios ejemplos de cursos de verano de universidades españolas sobre estas temáticas. También hemos incluido alguna formación online, disponible todo el año, y que puede ser un excelente producto para aprender también en la época estival.

Cursos relacionados con los datos abiertos

Iniciamos nuestra recopilación con el curso de Big & Open Data. Análisis y programación con R y Python impartido por la Universidad Complutense de Madrid. Se celebrará de manera presencial en la Fundación General UCM del 5 al 23 de julio, de lunes a viernes en horario de 9 a 14 horas. Este curso está dirigido a estudiantes universitarios, docentes, investigadores y profesionales que deseen ampliar y perfeccionar sus conocimientos sobre esta materia.

Análisis y visualización de datos

Si te interesa aprender el lenguaje R, la Universidad de Santiago de Compostela organiza dos cursos relacionados con esta materia, en el marco de su Universidade de Verán. El primero de ellos es ‘Introducción en sistemas de información geográfica y cartográfica con el Entorno R’, que se celebrará del 6 al 9 de julio en la Facultad de Geografía e Historia de Santiago de Compostela. Puedes consultar toda la información y el plan de estudios a través de este enlace.

El segundo es ‘Visualización y análisis de datos con R’, que tendrá lugar del 13 al 23 de julio en la Facultad de Matemáticas de la USC. En este caso, la universidad ofrece la posibilidad al alumnado de asistir en dos turnos (mañana y tarde). Como puedes comprobar en su programa, la estadística se erige como uno de los aspectos clave de esta formación.

Si tu campo son las ciencias sociales y quieres aprender a manejar los datos correctamente, el curso de la Universidad de Internacional de Andalucía (UNIA) Técnicas de análisis de datos en Humanidades y Ciencias Sociales buscas aproximarse al uso de las nuevas técnicas estadísticas y espaciales en la investigación en estos campos. Se impartirá del 23 al 26 de agosto en modalidad presencial.

Big Data

El Big Data se coloca, cada día más, como uno de los elementos que más contribuyen al aceleramiento de la transformación digital. Si te interesa este campo, puedes optar por el curso Big Data Geolocalizado: Herramientas para la captura, análisis y visualización’ que impartirá la Universidad Complutense de Madrid del 5 al 23 de julio en horario de 9 a 14 horas, de manera presencial en la Fundación General UCM.

Otra opción es el curso de Big Data: fundamentos tecnológicos y aplicaciones prácticas’ organizado por la Universidad de Alicante que se celebrará del 19 al 23 de julio de manera online.

Inteligencia artificial

El Gobierno ha puesto en marcha recientemente el curso online ‘Elementos de IA’ en español con el objetivo de impulsar y perfeccionar la formación de la ciudadanía en inteligencia artificial. La Secretaría de Estado de Digitalización e Inteligencia Artificial será quien ponga en marcha este proyecto junto a la colaboración de la UNED, que se encargará de proporcionar el soporte técnico y académico de esta formación. Elementos de IA es un proyecto educativo masivo y abierto (MOOC) que tiene como objetivo acercar a los ciudadanos conocimientos y habilidades sobre Inteligencia Artificial y sus distintas aplicaciones. Puedes descubrir toda la información sobre este curso aquí. Y si quieres comenzar ya la formación, puedes inscribirte a través de este enlace. El curso es gratuito.

Otra formación interesante relacionada con este ámbito es el curso de ‘Introducción práctica a la inteligencia artificial y al deep learning que organiza la Universidad Internacional de Andalucía (UNIA). Se impartirá de manera presencial en la sede Antonio Machado de Baeza entre los días 17 y 20 de agosto de 2021. Entre sus objetivos, destaca el ofrecer a los alumnos una visión general de los modelos de procesamiento de datos basados en técnicas de inteligencia artificial y aprendizaje profundo, entre otros.

 

Estos son solo algunos ejemplos de cursos que actualmente tienen matrícula abierta, aunque hay muchos más ya que la oferta es amplia y variada. Además, hay que recordar que el inicio del verano aún no se ha producido y que en las próximas semanas podrían aparecer nuevos cursos relacionados con los datos. Si conoces alguno más que sea de interés, no dudes en dejarnos un comentario aquí debajo o escribirnos a contacto@datos.gob.es

calendar icon
Documentación

Para poder extraer todo el valor de los datos, es necesario clasificarlos, filtrarlos y cruzarlos mediante procesos de analítica que nos ayuden a sacar conclusiones, convirtiendo los datos en información y conocimiento. Tradicionalmente la analítica de datos se divide en 3 categorías:

  • Analítica descriptiva, que nos ayuda a entender la situación actual, qué ha pasado para llegar hasta ella y por qué se ha producido.

  • Analítica predictiva, cuyo objetivo es anticipar hechos relevantes. Es decir, nos cuenta qué va a pasar para que un ser humano pueda tomar una decisión.

  • Analítica prescriptiva, donde se proporciona información sobre las decisiones más acertadas en base a una serie de escenarios futuros.  Es decir, nos indica qué hacer.

El tercer informe de la serie Awareness, Inspire, Action se centra en el segundo estadio, el de la Analítica predictiva. Para ello sigue la misma metodología que los dos informes anteriores, dedicados a la Inteligencia Artificial y el Procesamiento del Lenguaje Natural.

La analítica predictiva nos permite responder preguntas de negocio como ¿sufriremos una rotura de stock? ¿Bajará la cotización de una determinada acción? O ¿Nos visitarán más turistas el próximo puente? En base a esta información las empresas pueden definir su estrategia de negocio, y los organismos públicos elaborar políticas que respondan a las necesidades de los ciudadanos.

Tras una breve introducción que contextualiza la materia a tratar y explica la metodología, el informe, elaborado por Alejandro Alija, se desarrolla de la siguiente manera:

  • Awareness. En la sección Awareness se explican los conceptos clave, destacando los tres atributos de la analítica predictiva: el énfasis en la predicción, la relevancia para el negocio de los conocimientos resultantes y su tendencia a la democratización para extender su uso más allá de los usuarios especialistas y científicos de datos. En este apartado también se mencionan los modelos matemáticos de los que hace uso y se detallan algunos de sus hitos más importantes a lo largo de la historia, como el protocolo de Kyoto o su utilidad para detectar la fuga de clientes. 

  • Inspire. La sección Inspire analiza algunos de los casos de uso de la analítica predictiva con más relevancia en la actualidad en tres sectores muy diferentes. Empieza con el sector industrial, donde se explica cómo funciona el mantenimiento predictivo y la detección de anomalías. Continua con ejemplos relativos a la predicción de precios y demanda, en la cadena de distribución de un supermercado y en el sector energía. Y finaliza con el sector salud y el diagnóstico aumentado de imagen médica.

  • Action: En la sección Action se desarrolla de forma práctica un caso de uso concreto, utilizando para ello datos y herramientas tecnológicas reales. En este caso el conjunto de datos seleccionado es accidentes de tráfico en la ciudad de Madrid, publicado por el Ayuntamiento de Madrid. A través de la metodología recogida en la siguiente figura, se explica de manera sencilla cómo utilizar técnicas de análisis de series temporales para modelar y predecir el número de accidentes en los meses futuros.

El informe finaliza con la sección Última parada, donde se recopilan cursos, libros y artículos de interés para aquellos usuarios que quieran seguir avanzando en la materia.

En este vídeo, su autor te cuanta más sobre el informe y la analítica predictiva.

A continuación, puedes descargarte el informe completo en pdf y word (versión reutilizable), así como acceder al código utilizado en el ejemplo de Action en este enlace.

calendar icon