
🐍📓 Mi agenda Python: #3 Matplotlib
Por Enio...
Nos vemos de nuevo, apreciados lectores y steemianos de #STEM-Espanol, #SteemSTEM, #Curie, #Utopian-io y demás comunidades de Steemit.
Seguimos con nuestra serie Mi agenda Python dedicada a abordar distintas herramientas de programación relacionadas con el lenguaje de programación Python, tales como snippets, scripts, bibliotecas (‘librerías’), frameworks, programas de aplicación, entre otros; una serie que ya hemos presentado anteriormente y en la que abordamos contenidos de manera accesible tanto para el público especialista como el no-especialista. Sin más preámbulos, revisemos la herramienta de esta ocasión.
---Nombre del Recurso
Matplotlib
Aclarando conceptos...
La visualización de datos es algo con lo todos nos hemos topado alguna vez —me atrevo a asegurar— bien sea como consumidores o como productores de los gráficos. Sin ir más lejos vemos, por ejemplo, que los reportes semanales de @stem-espanol frecuentemente incluyen algunos gráficos de barra o de torta, los cuales nos permiten asimilar más fácilmente los indicadores cuantitativos que dan cuenta de la actividad llevada a cabo semanalmente en la comunidad.
Otro ejemplo natural para aquellos envueltos en el mundo de trading son las distintas gráficas que ofrecen sitios especializados, las cuales nos ilustran varios valores relacionados con las criptodivisas, tales como la evolución de la capitalización. Pero los ejemplos son muchísimos y seguramente encontraremos varios de ellos en nuestro ámbito de profesión y en otros tan comunes como la representación gráfica del clima que vemos en las noticias.

⬆️ Imagen 1: Imagen del servicio nacional del clima de los Estados Unidos. Esto también cuenta como visualización de datos Licencia: dominio público Fuente
La visualización es una importante técnica de la cual se valen los analistas de datos durante todas las etapas del análisis de datos y mediante la cual van "excavando" detalles ocultos que no se apreciarían de otro modo. Esto es así debido a que gran parte de los datos que se recaban para su análisis son datos estructurados, esto es, que poseen una estructura interna que puede ser expresada mediante funciones matemáticas que pueden tener expresión gráfica. De esta manera, el ejemplo del gráfico lineal es quizá el más célebres de todos y tiene infinidades de usos.
La visualización o representación gráfica es importante por varias cosas. Permite conocer mejor los datos, pues las anomalías y otras particularidades se hacen evidentes, lo que a su vez permitiría profundizar en la revisión. Esta visualización podría desembocar en el simple descarte de las incoherencias o en el surgimiento de nuevas consideraciones en la investigación, nuevas preguntas. La representación gráfica también permite observar los datos de manera segmentada, lo que ayuda a forjarse diferentes puntos de vista, algo que es difícil de conseguir observando solamente tablas o los datos puros.
Asimismo, la aplicación de esta técnica tiene un potencial comunicativo, pues transmite la información de manera clara y simple. De allí que a veces sea suficiente con creer lo que el gráfico tiene que decir e incluso a veces creerle solamente a él y no a los datos. Pues sí, los gráficos permiten realizar verificaciones de los modelos y predicciones para saber que realmente los datos están comportándose como se espera.
Como vemos, son varias las razones que hay para auxiliarse en la visualización de datos.
Ahora bien, aunque sabemos que el análisis de datos es un procedimiento integrado en los procesos de investigación, no es exclusivo de ello. No lo es a menos que tengamos un entendimiento suficientemente amplio del proceso investigativo como para que podamos subsumirlo dentro de todas las actividades en las cuales se recurre al análisis de datos.
Eso implica, por tanto, que la visualización de datos va más allá, tornándose en algo de rutina y que extiende las capacidades de científicos, investigadores, ingenieros, matemáticos, etc. y que se usa en diversidad de entornos como planificación, investigación, academia, banca, finanzas, negocios, periodismo, etc. para lo cual se cuenta con múltiples herramientas de software para tales fines. Precisamente, para enfocar más las herramientas de visualización de imágenes, consideremos la siguiente categorización:
Profesiones varias, mundo de negocio y personal no técnico: este es posiblemente el más popular entorno donde se recurre al análisis de datos y su consecuente visualización. Naturalmente, encontraremos aquí las variadas profesiones, empleos y oficios que pueden estar tanto en la academia como en el mundo del marketing, la gestión organizativa, etc. en cada una de las cuales se procesa la data para apoyar la toma de decisiones. Los softwares que imperan aquí son las hojas de cálculo como Excel (o Calc -no podía dejar de decirlo, pues es software libre-) que también pueden generar gráficos. Pero hay muchos más, como Power Bi y Tableau que son más especializados, de hecho.
La programación y desarrollo de software: dado que la visualización de datos es algo bastante frecuente allá afuera, en el mundo del desarrollo de software se tiene que dar respuesta a los distintos servicios que surjan con o alrededor de ello. Para eso se dispone de una infinidad de bibliotecas y frameworks en variedad de lenguajes de programación, algunos de los cuales seguramente comentaremos en esta serie (si son de Python). Así, los programadores invocan estas bibliotecas y mediante sus funciones configuran el tipo de gráfico deseado, sus parámetros y éste se renderiza. Dado que la tecnología web es la más difundida, las bibliotecas de Javascript son de lo más populares para esta tarea; bibliotecas tales como charts.js, Google Charts, Data Driven Documents (D3.js), etc.
La ciencia de datos: finalmente, el área de la que podemos hablar extensivamente en otros artículos. Se trata de una disciplina muy demandada actualmente considerando que el gran auge de la sociedad de la información y la ingente cantidad de datos circulando que han dado origen a Big Data. Los científicos de datos generalmente trabajan con herramientas integradoras o completas, las cuales incluyen funciones de visualización de datos. En particular, los lenguajes R y Python resultan ser los más elegantes y populares para este cometido, a través de muchas bibliotecas y frameworks.
Precisamente, esto nos sirve para presentar la herramienta protagonista de esta entrega.
---Descripción
Matplotlib es una biblioteca para la renderización en 2D que genera una gran variedad de gráficos basados en datos estructurados. De tal manera que proporciona una forma rápida visualizar data procesada a través de Python y de generar figuras con la calidad debida para ser usadas en publicaciones, pudiendo exportar tales figuras a muchos formatos. Matplotlib funge de extensión para NumPy, que es la biblioteca de matemática numérica de Python. De hecho, en su nombre apreciamos que aparece "mat", de mathematics (matemáticas); "plot" (gráfico), y "lib", de library (biblioteca).
Decimos que es una biblioteca en el sentido de que se trata de una serie de constantes, funciones y clases que han sido diseñadas con antelación a nuestros proyectos y que simplemente "se importan", es decir, se incoporan a nuestro proyecto de software bajo desarrollo o sino se usan directamente a través de otros programas. Esto significa que los programadores, científicos de datos y científicos de la computación simplemente tienen que conocer la documentación de Matplotlib para poder aplicarla, más no tienen que escribir todos los componentes técnicos que generen los gráficos en el entorno Python; la biblioteca hace de interfaz a todos los mecanismos que generan los gráficos y se manipula a base de parámetros que su usuario programador especificará.
Está disponible en el lenguaje de programación Python, el cual es uno de los predilectos por parte de científicos e ingenieros que se apoyan en la computación. La biblioteca es posiblemente la más popular de Python, aunque no es la única, y es la base de otras bibliotecas y proyectos como Seaborn, LaTeXiPy, HoloViews, Supersight y muchos otros que eventualmente revisaremos.
Matplotlib ha sido primero desarrollada por John Hunter aunque actualmente es activamente mantenida por una amplia comunidad.
---Algunas características
- Puede generar una gran variedad de gráficos, tales como líneas, histogramas, gráficos de barras, gráficas de error, espectros de potencia, diagramas de dispersión, gráficas de rutas, elipses, gráficos circulares, mesas, gráficos polares y un largo etcétera.
- También puede generar gráficos simples en 3D, tales como superficies, estructura metálica, gráfica de dispersión, barras, etc.
- Es una herramienta que puede ser usada en la línea de comandos, scripts, en el intérprete interactivo IPython, la libreta de Jupyter, los servidores de aplicaciones web y en las herramientas GUI.
- Su filosofía es tratar de hacer fáciles las cosas fáciles y de hacer posibles las cosas difíciles.
- Brinda un rendimiento equivalente a MATLAB y, mediante su módulo
pyplot
, una experiencia de uso similar a aquel, sobre todo en la medida como se combina con herramientas afines como Jupyter, Anaconda, etc. - Es distribuido bajo licencia Matplotlib que está basada en la licencia PSF, la cual a su vez es estilo BSD, por lo que Matplotlib es un software libre permisivo. Esto es una ventaja sobre MATLAB, puesto que este último amerita un costoso pago de licencia que supera los 2 mil dólares americanos en algunos casos.
- Funciona con Python 2.7 y Python 3.6.
Sitio web o repositorio
https://github.com/matplotlib/matplotlib ---Ejemplo de uso
Lo primero que tenemos que hacer es descargar e instalar la biblioteca, para lo cual deberíamos valernos de la información de la documentación oficial. La biblioteca cuenta con muchas dependencias, pero afortunadamente el sistema de gestión de paquetes se encargará de instalarlas previamente. En caso de un sistema operativo tipo Debian como Ubuntu Linux, se puede instalar con sudo apt-get install python3-matplotlib
desde la línea de comandos.
Una vez instalada satisfactoriamente podemos utilizarla para distintos proyectos. El script que se muestra a continuación es un ejemplo de ello:
# @Eniolw
# Dominio público
# Importando matplotlib para la visualización y numpy
# para el procesamiento numérico de los datos:
import matplotlib.pyplot as plt
import numpy as np
# Población de hombres y mujeres de Venezuela desde 1960 hasta 2017:
data_hombres = [15905033,15709154,15511223,15311501,15109908,14906157,14699759,14490421,14278102,14063080,13845818,13626956,13406968,13186013,12964096,12741378,12518029,12294123,12069840,11845154,11619788,11393320,11165454,10936406,10706378,10475105,10242224,10007670,9771324,9533825,9296897,9062768,8833125,8608740,8389434,8174703,7963659,7755648,7550392,7348239,7149852,6956182,6767747,6584901,6406972,6232194,6058178,5883196,5706822,5529581,5351876,5174499,4998188,4822709,4648321,4476888,4310866,4151917]
data_mujeres = [16072032,15859025,15643911,15426877,15207940,14986923,14763532,14537612,14309221,14078621,13846147,13612212,13377193,13141212,12904427,12667322,12430447,12194217,11958849,11724300,11490390,11256782,11023213,10789946,10557065,10323970,10089855,9854286,9617018,9378701,9140897,8905784,8674934,8449045,8227912,8011191,7798140,7588268,7381347,7177692,6977935,6782960,6593240,6409124,6229997,6054245,5879627,5704565,5528669,5352414,5176178,5000641,4826504,4653543,4482028,4313701,4150819,3994930]
# Arreglo de años para la gráfica:
data_anios = [2017,2016,2015,2014,2013,2012,2011,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000,1999,1998,1997,1996,1995,1994,1993,1992,1991,1990,1989,1988,1987,1986,1985,1984,1983,1982,1981,1980,1979,1978,1977,1976,1975,1974,1973,1972,1971,1970,1969,1968,1967,1966,1965,1964,1963,1962,1961,1960]
# Convirtiendo los arreglos en arreglos de numpy:
hombres = np.array(data_hombres)
mujeres = np.array(data_mujeres)
anios = np.array(data_anios)
# Configurando el gráfico:
plt.title('Población de hombres y mujeres de Venezuela entre 1960 y 2017')
plt.legend(['Hombres', 'Mujeres'], bbox_to_anchor=(0.5, 1))
plt.xlabel('Año')
plt.ylabel('Población')
plt.plot(anios, hombres / 10**6)
plt.plot(anios, mujeres / 10**6)
plt.show()
Este programa grafica el crecimiento de la población de hombres y mujeres venezolanos comprendida entre 1960 y 2017. Primero se importan las librerías que permitirán procesar y visualizar la data (líneas 6 y 7). Luego se incorpora en el script la data de la población, la cual fue extraída de expansion.com y se expresa como un arreglo de Python (líneas 10-23). Esto se convierte en arreglos de NumPy, puesto que son estructuras de datos más óptimas para este tipo de operaciones (líneas 31-34) y luego se configura el gráfico especificando su título, etiquetas, leyenda y los valores para los ejes de cada línea (líneas 37-42). El gráfico generado se muestra en una ventana de Tkinter desde donde se puede exportar a PNG para guardarla localmente. Dicha figura se enlaza a continuación.

⬆️ Imagen 3: Salida del script anterior. Imagen generada con
matplotlib
Autor: @Eniolw Licencia: CC BY 2.0Esta gráfica admite pocas interpretaciones; un ejemplo sencillo. Verticalmente está la población expresada en unidades de millón y horizontalmente, los años. Vemos que el crecimiento de ambos grupos ha sido muy similar y poseen una población muy cerrada, aunque no es sino hasta recientemente que la población de mujeres venezolanas superó a la de hombres. El crecimiento ha sido sostenido y no se aprecian anomalías.
Por su puesto, esto es un ejemplo de demostración básico, aunque curioso. Se pueden crear gráficos más complejos con Matplotlib. Por ejemplo, la siguiente imagen corresponde a un script donde se coloca una curva polar flotando dentro de una caja rectangular en aras de apreciar un mejor sentido de las curvas polares.
---En resumen
Hemos observado a lo largo de este artículo que el análisis de datos se apoya eminentemente en la visualización debido a las ventajas prácticas que aporta, como también vimos que es una actividad que se realiza en distintos ámbitos, no solamente el de investigación. Vimos que, dependiendo del contexto, existen herramientas de software apropiadas que van desde las hojas de cálculo, los paquetes estadísticos especializados hasta las bibliotecas de programación. Estas últimas pueden ser empleadas por científicos de datos, desarrolladores y todas aquellas personas con competencias suficientes en programación.
Matplotlib es una de esas bibliotecas, según vimos, y es nativa para el lenguaje de programación Python, constituyendo, de hecho, una de las más populares en la materia. Ofrece varias prestaciones para pequeños y grandes proyectos en lo que se requiera la generación de gráficas a partir de datos estructurados, contando con la capacidad para ofrecer funciones equivalentes a la de entornos especializados y comerciales como MATLAB.
Hemos visto algunos ejemplos de aplicación de Matplotlib con la intención de presentar la herramienta, su uso y utilidad. No es difícil imaginar que a esto recurren los programadores cuando desarrollan los muchísimos sitios web que despliguen gráficos para la interpretación de datos; algo muy común en estos días. De antemanos podemos predecir que la aplicación de Matplotlib para problemas interesantes y de mayor complejidad es terreno abonado para futuros artículos.
De momento, si tienes alguna duda o aporte, no dudes en hacerlo saber. Nos vemos.
ALGUNAS FUENTES DE CONSULTA
Si estás interesado en más temas sobre Ciencia, Tecnología, Ingeniería y Matemáticas (STEM, siglas en inglés), consulta las etiquetas #STEM-Espanol y #SteemSTEM, donde puedes encontrar más contenido de calidad y también hacer tus aportes. Puedes unirte al servidor de Discord de STEM-Espanol para participar aún más en nuestra comunidad y consultar los reportes semanales publicados por @STEM-Espanol.

Créditos: @IAmPhysical

Créditos: @Eniolw
NOTAS ACLARATORIAS
- La imagen de pie es de @CarlosERP-2000 y @IAmPhysical y es de dominio público.
- A menos que haya sido indicado lo contrario, las imágenes de esta publicación han sido elaboradas por el autor, lo que incluye la imagen de banner, creada con base en imágenes de dominio público y en un logo de Python adaptado por Rocket000 y otros (fuente).
