🐍📓 Mi agenda Python: #3 Matplotlib

in #steemstem6 years ago (edited)
Banner del artículo

🐍📓 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.

Gráfico de pronóstico del clima
⬆️ 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()



Script anterior en Sublime Text

⬆️ Imagen 2: Script anterior en Sublime Text Autor: @Eniolw Licencia: CC BY 2.0


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.

Salida del script anterior
⬆️ Imagen 3: Salida del script anterior. Imagen generada con matplotlibAutor: @Eniolw Licencia: CC BY 2.0


Esta 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.

Gráfico polar generado con matplotlib
⬆️ Imagen 4: Gráfico polar generado con matplotlibAutor: @Eniolw Licencia: CC BY 2.0

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.



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).
imagen de pie
Sort:  





This post has been voted on by the SteemSTEM curation team and voting trail in collaboration with @utopian-io and @curie.


If you appreciate the work we are doing then consider voting all three projects for witness by selecting stem.witness, utopian-io and curie!


For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!

Great, @SteemSTEM. Thanks!

Saludos estimado @eniolw, muy importante la mención que haces al uso de la visualización de datos dentro de la investigación científica, en el artículo realizas un gráfico en dos dimensiones, ¿Como se haría para realizar gráficos en 3D utilizando el lenguaje de programación python?, en el post mencionas que la librería utilizada brinda un rendimiento similar a MatLab para lo gráficos, es bien conocido el gran uso que el MatLab tiene dentro de la investigaciones en ciencias básicas ¿Consideras que dicha librería de python podría reemplazarlo?.

Hola, @ydavgonzalez.

"¿Como se haría para realizar gráficos en 3D utilizando el lenguaje de programación python?"

El mismo paquete Matplotlib soporta también la generación de gráficos en 3D, como señalé en el artículo. Lo que pasa es que originalmente hacía solamente gráficos en 2D, pero conforme ha evolucionando se le ha agregado soporte para 3D también. Se puede usar el módulo mplot3d para eso. También hay otras bibliotecas allá afuera.

"¿Consideras que dicha librería de python podría reemplazarlo [MATLAB]?"

Con una combinación de herramientas, en realidad, ya que Python es un lenguaje de propósito general, mientras que MATLAB es un software especializado que integra varias cosas. No todas las funciones de MATLAB tienen equivalencia en Python, como tampoco las bibliotecas de Python tienen todas equivalencias en MATLAB. En Python se puede combinar SciPy, NumPy, Pandas, Matplotlib, IPython, Jupyter, Anaconda y otros para contruir un entorno de computación científica. Te recomiendo este ensayo previo mío. Desempolvaré y profundizaré varias cosas de allí eventualmente.

Congratulations @eniolw! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 1000 as payout for your posts. Your next target is to reach a total payout of 2000

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness and get one more award and increased upvotes!

Saludos estimado amigo @eniolw, un tema interesante para quienes habitúan presentar análisis mediante gráficos, de acuerdo a lo que comentas Matplotlib como herramienta de procesamiento de datos solo permite visualizar gráficos simples en 3D, aspecto no tan práctico para realizar representaciones gráficas en biología en cualquier nivel de organización (cadena de ADN, células, tejidos entre otros). En relación a esto último, ¿Dentro del lenguaje de programación Python habrán aplicaciones u programas informáticos pensados para procesar gráficos en modelo tridimensional más especializados?, sería interesante que nos compartas algunos post sobre aplicaciones Bioinformáticas basadas en Python, para representar y cuantificar datos de corte biológico.

Saludos cordiales, sigamos creciendo.

Hola, profesor @lupafilotaxia.

¿Dentro del lenguaje de programación Python habrán aplicaciones u programas informáticos pensados para procesar gráficos en modelo tridimensional más especializados?, sería interesante que nos compartas algunos post sobre aplicaciones Bioinformáticas basadas en Python, para representar y cuantificar datos de corte biológico

Desde luego hay. Aquí está un vistazo a un directorio de módulos y paquetes de Python realacionados con biología. Hay al menos 605 resultados. Aunque realmente no los he usado aún. Sería un interesante proyecto futuro. Gracias por la visita y la idea.

Algún post terminaras dándonos un índice de todas estas librerías, porque realmente es útil un índice de librerías y junto con los post de su uso es una herramienta de consulta completa. Realmente hay más libros de las que uno puede recordar en ocasiones, uno siempre recuerda que existe algo donde un proceso o ficción us está programado pero aveces es difícil recurstos todos

Posted using Partiko Android

Hola, @UbaldoNet. Sí, eventualmente crearé un post de índice, jeje. En esta serie abordo herramientas con las cuales he tenido experiencia, otras que estoy aprendiendo y otras por aprender. La idea es entregar algo personalizado. Las documentaciones oficiales son realmente más extensivas, aunque no tienen un toque personal o incluso teórico y accesible para todos. Gracias por la idea. Saludos.

Saludos @eniolw. Interesante el post que nos presentas, que seria de la investigación científica sin la representación grafica de datos, como bien dices, a veces los gráficos hablan por sí solos, es la mejor manera de comunicar los resultados. Me parece una gran ventaja para su aplicación que sea un software libre, porque MATLAB es muy difundido, creo que es nuestra primera opción considerada cuando requerimos algunas prestaciones como esta, pero su costo es muy restrictivo. Gracias por compartir amigo.

Sí, MATLAB es muy popular, aunque a veces nos olvidamos que debería pagarse la licencia y es costosa. Saludos y gracias por leer!

Amigo @eniolw, excelente publicación. Me llama mucho la atención la representación de datos en tres dimensiones, puesto que en el campo de diseño de suelos compactados, he realizado este tipo de gráficos con el programa Origin Pro, lo que nos permite una mejor comprensión de los resultados provenientes de un experimento factorial. Resultaría de mucho interés elaborar este tipo de gráficos con la herramienta que explicas. Saludos y muchos éxitos!!!

Hola, @EliasChess333. No conozco el programa, pero por lo que cuentas debe ser muy satisfactorio. Sería interesante intentar un ejercicio así con Python. Saludos!

Saludos @eniolw. Como bien dices, la utilidad de los gráficos para el mejor entendimiento de datos e información es bien conocida en cualquier ámbito, más aún en las disciplinas de investigación, por ello dicen que una imagen puede "hablar por sí misma" En cuanto al uso de Matplotlib, suena bastante interesante, habrá que indagar sobre ello.

...por ello dicen que una imagen puede "hablar por sí misma"

Sí, tiene buen potencial comunicativo. Saludos estimada y gracias por la visita!