Forum

Avisos
Vaciar todo

Visualización de datos simple con Python y Matplotlib  

  RSS

img-perfil
(@taa-admin)
Admin
Registrado: hace 3 años
Respuestas: 34
18/03/2021 5:10 pm  

Python cuenta con una gran cantidad de librerías las cuales son útiles para trabajar con datos, ya sea para organizarlos, operar con ellos, o visualizarlos. 

 

Para trabajar con datos en forma de tablas tenemos Pandas, para trabajar matemáticamente con datos numéricamente siempre es recomendable Numpy y para visualizar datos tenemos Matplotlib.

 

Ok ¿Pero que es una librería?

Un proverbio muy común en la programación es “no inventes la rueda”, básicamente refiriéndose a que no es recomendable perder el tiempo intentando inventar por nuestra cuenta una solución que ya fue implementada incontables veces por otras personas y probablemente de formas más eficientes. Muchos veteranos suelen alargar la popular frase diciendo algo similar a “no reinventes la rueda, a menos que quieras aprender más sobre ruedas”, representando una postura más balanceada en el tema. Básicamente significa que la gran mayoría de las veces no es necesario el tener que resolver 100% por nuestra cuenta todos los retos de nuestro proyecto sin ayudarnos con aquello que ya existe, pero puede ser recomendable si queremos aprender más sobre un tema en específico.

 

Foto por César Pena

Ahora sí, ¿Qué son las librerías?. Las librerías en palabras sencillas son un conjunto de funciones las cuales pueden ser fácilmente añadidas a nuestro proyecto y utilizadas con tan solo llamarlas. Son extremadamente útiles y es casi imposible hacer un proyecto (o al menos uno que no tome una eternidad) sin utilizar alguna librería. Las librerías entonces representan la versión corta del famoso proverbio, ya que claramente no somos los primeros en pensar que sería útil el utilizar código para representar datos, entonces ¿Para qué sufrir en lugar de sacar provecho a las herramientas que ya existen?

¿Qué es matplotlib?

Matplotlib es una librería de python creada por Jhon Hunter la cual está especialmente diseñada para visualizar datos. Tomando inspiración de MATLAB matplotlib trabaja con tres elementos principales: axis (“ejes”), figure (“figura”) y plot (“gráfico” o “cuadro”). Matplotlib tiene varios módulos especializados en distintas áreas como animación o proyección, nosotros trabajaremos con el módulo pyplot, el cual se especializa en el dibujado de gráficos relativamente simples y es aún más parecido a MATLAB que el resto de la librería.

 

A tener en cuenta

Para ejecutar el código de muestra puedes utilizar Google Colab, si nunca lo utilizaste antes puedes leer este artículo donde te explicamos cómo funciona. 

 

Consejo 1: siempre puedes buscar algún ejemplo en internet y luego modificar el código para adaptarlo a tus necesidades. Todo el mundo lo hace, ya que tomaría una gran cantidad de tiempo el verdaderamente dominar todas las herramientas que nos ofrece matplotlib.

 

Consejo 2: Siempre es recomendable leer la documentación de una librería o herramienta, ya que suelen tener explicaciones a fondo de cómo operan las funciones, además de tutoriales y ejemplos. Matplotlib cumple con esto teniendo una sección de ejemplos y otra de tutoriales.

 

Consejo 3: Incluso el mejor programador busca respuestas en internet, es imposible programar un proyecto sin tener que consultar dudas online. Además de eso, ni el mejor tutorial/artículo te enseñará todo lo necesario sobre un tema, por lo que buscar más sobre el tema en internet siempre será necesario.

 

Consejo 4: este artículo contiene muchos enlaces a otros artículos y tutoriales como sugerencias para aprender más, todos ellos están en inglés. Pero si tienes dificultad con el idioma siempre puedes traducir la página, este enlace te muestra cómo hacerlo en Google Chrome y este otro te muestra cómo hacerlo utilizando Firefox.

 

Consejo 5: Si quieres aprender de una forma guiada y completa te recomendamos este curso gratuito de Freecodecamp.org


Recordatorio: en matplotlib hay múltiples maneras de obtener el mismo resultado, los ejemplos de este artículo son los que consideramos más sencillos. Intencionalmente evitamos trabajar individualmente con ejes porque eso requiere más líneas de código y trabajo, pero es recomendable y necesario trabajar con ejes para poder hacer visualizaciones más avanzadas. De todas formas no te preocupes, ya que las visualizaciones simples suelen bastar la mayoría de las veces, ya que generalmente trabajamos con datasets simples y ordenados, no con un acelerador de partículas.

El internet está lleno de tutoriales e información de todo tipo, tanta que en algunos momentos se puede hacer difícil de elegir. Por eso luego de cada ejemplo recomendamos algunos tutoriales y ejemplos, así puedes ahorrarte la indecisión. Aparte de todo eso, también recomendamos este tutorial una vez hayas terminado de leer este artículo.

Aprendiendo mediante ejemplos

 

Empezando con la gráfica más fácil

El primer paso para todos estos ejemplos es importar lo necesario. Como ya vimos la librería es enorme, tiene una gran cantidad de módulos y aproximadamente 70.000 líneas de código. Pero nosotros estamos tan sólo interesados en el módulo pyplot. Por eso nuestra primera línea de código será la siguiente:

import matplotlib.pyplot as plt

 

import sirve para importar cualquier librería, pero si escribiéramos tan solo

import matplotlib

Estaríamos importando toda la librería incluyendo los módulos que no nos interesan. Agregar el “.pyplot” nos asegura que solo se va a importar el módulo que queremos. Ahora tenemos todas las funciones del módulo pyplot. Pero para usar cada una de ellas necesitaríamos escribir

matplotlib.pyplot.NOMBRE_DE_LA_FUNCION()
 

Lo cual claramente no sería muy cómodo de hacer múltiples veces. Por eso es tan útil agregar as plt al final de la línea. El comando as nos deja asignarle un “alias” al módulo que importamos. Por lo que ahora para cada función basta con escribir:

 
plt.NOMBRE_DE_LA_FUNCION()
 

La primera función que vamos a utilizar es la función plot, esta función sirve para graficar líneas continuas y es de las más sencillas de utilizar. La función plot sigue la siguiente sintaxis

 
plt.plot(ARGUMENTOS) # Los argumentos se separan por comas
 

Por lo que vamos a definir dos arrays, cada uno conteniendo un conjunto diferente de números. Estos arrays los pasaremos como argumento a la función plot y eso nos devolverá un gráfica con una línea la cual une todos los puntos, tomando los elementos del conjunto como las coordenadas x e y de los distintos puntos.

 
# Importamos pyplot como plt
import matplotlib.pyplot as plt
# creamos dos arrays con distintos conjuntos de datos

conjunto1 = [0, 2, 4, 8, 16, 32, 64] # estos numeros son enteros, por lo que serían elementos int

conjunto2 = [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0] # estos numeros tienen decimales, por lo que serian float



# usamos la función plot para generar una linea de acuerdo a los puntos

plt.plot(conjunto1, conjunto2)



# la función show no es necesaria si estamos usando por ejemplo Google Colab,
# pero si puede ser necesaria al usar otros entornos, por lo cual siempre es recomendable escribirla.


# Esta función se asegura de que se muestre nuestra figura

plt.show()

 

Si ejecutas el código anterior deberías obtener la siguiente figura. 

Previamente mencionamos que matplotlib trabajaba principalmente con tres elementos en sus gráficos. Estos eran axis (“ejes”), figure (“figura”) y plot (“gráfico” o “cuadro”). En nuestra anterior figura podemos identificar los 3.

 

Excelente, ahora veamos qué otras cosas podemos hacer con esta sencilla gráfica.

Esta imagen del sitio oficial de matplotlib nos muestra la anatomía de una figura, vemos que hay una gran cantidad de elementos los cuales podemos personalizar según nuestras necesidades.

Primero que nada vamos a usar nuevamente la función plot para agregar una recta a la figura.

# usamos la función plot para generar una linea de acuerdo a los puntos

plt.plot(conjunto1, conjunto2)

plt.plot([0,64], [0,3])
# Agregamos un segundo ploteo, va a formar una recta entre los puntos (0,0) y (64,3)

Esto debería resultar en la siguiente figura, donde las dos líneas coinciden en su primeros y últimos puntos.

 

Ahora vamos a asignarle un nombre a los ejes, un título a la figura y vamos a hacer que sea cuadriculada.

 

plt.title('Gráfica de muestra') # Agrego un titulo

plt.ylabel('Nombre del eje Y') # asigno un nombre al eje y

plt.xlabel('Nombre del eje X') # asigno un nombre al eje y

plt.grid(True# Esto se encarga de que sea cuadriculada la figura

La figura hasta el momento debería verse así.

Pero todavía podemos seguir personalizando esta figura, vamos a cambiar el color de las líneas, el estilo de las mismas, agregar una leyenda. Para esto será necesario agregar algunas cosas a nuestras funciones de plot. Vamos a agregar el argumento label a cada una de las funciones plot, también vamos a agregar el argumento color para cambiar el color de cada línea y además el argumento linestyle para cambiar el estilo de la línea.

plt.plot(conjunto1,conjunto2,label='Caso 1',linestyle='dotted',color='green') 
# dotted nos da una linea punteada




plt.plot([0,64],[0,3],label='Caso 2',linestyle='dashed',color='red')
# dashed nos da una linea hecha de lineas mas pequeñas


plt.legend()
# la funcion legend se encarga de mostrar la leyenda en la figura,
#esto lo hace leyendo los atributos label de cada plot

También vamos a definir el tamaño de la figura en general así como el tamaño de la fuente en los ejes. Para eso usaremos la función figure con el argumento figsize.

plt.figure(figsize=(5,5)) #Definimos un tamaño para la gráfica

Y agregamos el atributo fontsize a xlabel y ylabel

plt.ylabel('Nombre del eje Y', fontsize=12) # asigno un nombre al eje y

plt.xlabel('Nombre del eje X', fontsize=12) # asigno un nombre al eje y

 

Nuestro código final debería ser el siguiente:




# Importamos pyplot como plt

import matplotlib.pyplot as plt


# creamos dos arrays con distintos conjuntos de datos

conjunto1 = [0, 2, 4, 8, 16, 32, 64] # estos numeros son enteros, por lo que serían elementos int

conjunto2 = [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0] # estos numeros tienen decimales, por lo que serian float

plt.figure(figsize=(5,5)) #Definimos un tamaño para la gráfica


# usamos la función plot para generar una linea de acuerdo a los puntos

plt.plot(conjunto1, conjunto2, label='Caso 1', linestyle='dotted', color='green') # dotted nos da una linea punteada

plt.plot([0,64], [0,3], label='Caso 2', linestyle='dashed', color='red') # dashed nos da una linea hecha de lineas mas pequeñas

plt.legend() # la funcion legend se encarga de mostrar la leyenda en la figura, esto lo hace leyendo los atributos label de cada plot

plt.title('Gráfica de muestra') # Agrego un titulo

plt.ylabel('Nombre del eje Y', fontsize=12) # asigno un nombre al eje y

plt.xlabel('Nombre del eje X', fontsize=12) # asigno un nombre al eje X

plt.grid(True# Esto se encarga de que sea cuadriculada la figura

# la función show no es necesaria si estamos usando por ejemplo Google Colab, pero si puede ser necesaria al usar otros entornos, por lo cual siempre es recomendable escribirla.

# Esta función se asegura de que se muestre nuestra figura

plt.show()


Y la figura debería verse así.

Es importante recordar que con matplotlib hay muchas maneras de obtener el mismo resultado, la idea de este artículo es presentar la forma que nos parece más sencilla para un principiante. Por ejemplo, estas dos líneas de código consiguen el mismo resultado:

 

plt.plot(conjunto1, conjunto2, linestyle='dashed', color='green')

plt.plot(conjunto1, conjunto2, 'g--') # g indica que el color es green, mientras ‘--’ indica que la línea estilo dashed

Pero para un principiante probablemente la primera sea más fácil de entender. Lo importante es entender los principios básicos para luego poder construir encima de esa base. 

Para ver más sobre gráficas de líneas te recomendamos este tutorial o este otro, además de los ejemplos de matplotlib.org.

 

Ejemplo de gráfico de dispersión simple

La función scatter nos permite graficar nubes de puntos.

# Importamos pyplot como plt
import matplotlib.pyplot as plt
import numpy as np # Importamos numpy para poder generar numeros aleatorios

#Vamos a generar 100 puntos
N = 100

# Generamos 100 coordenadas de X
x = np.random.rand(N)

# Generamos 100 coordenadas de y
y = np.random.rand(N)

# Repetimos lo mismo con otras variables
x1 = np.random.rand(N)
y1 = np.random.rand(N)

# Graficamos x e y como nube de puntos
plt.scatter(x,y, color='orange', alpha=0.5, label = 'puntos naranjas')

# alpha = 0.5 hace que los puntos sean 50% transparentes


plt.scatter(x1,y1, color='blue', alpha=0.5, label = 'puntos azules')
plt.legend()
plt.show() #siempre recomendable la funcion show

Resultado

 

Para ver más sobre gráficas de dispersión te recomendamos este tutorial o este otro, además de los ejemplos de matplotlib.org

 

Ejemplo de Histograma

Un histograma nos permite ver la frecuencia de repetición de un elemento en un conjunto. Son vitales para la visualización y análisis de datos.

 

# Importamos pyplot como plt

import matplotlib.pyplot as plt

import numpy as np # Importamos numpy para operar con numeros


#Vamos a generar 100 numeros aleatorios

N = 100


# Guardamos en x los numeros

x = np.random.rand(N)*10

plt.figure(figsize=(10,5)) #le damos un buen tamano a la figura

x_ticks = np.arange(0, 10, 1) #  la funcion arange de numpy devuelve una lista de numeros

# arange funciona asi arange(numero_inicial, numero_final, numero_pasos), por lo que (0,10,1) devuelve 0,1,2,3,4,5,6,7,8,9,10

# Ingresar (0,10,2) devolveria 0,2,4,6,8,10, mientras que (0,15,5) devolveria 0,5,10,15


plt.xticks(x_ticks) # defino que numeros quiero en mi eje x

plt.hist(x) # Uso la funcion de histograma para ver cual es el numero que mas se repite en el array X, es decir, su frecuencia


plt.xlabel('Numero')

plt.ylabel('Frecuencia')

plt.title('Ejemplo de histograma')

plt.show()

 

Para ver más sobre histogramas te recomendamos este tutorial o este otro, además de los ejemplos de matplotlib.org.

 

Ejemplo de gráfico de barras

 

Los gráficos de barras son otro de los más populares y utilizados en la visualización de datos.

 

import matplotlib.pyplot as plt

meses = ['Marzo', 'Abril', 'Mayo', 'Junio', 'Julio']

ganancias = [15,16,32,25,19]

plt.bar(meses,ganancias)

plt.title('Ganancias en el 2020')

plt.xlabel('Mes del 2020')

plt.ylabel('Ganancias (en miles de pesos)')

plt.show()

Si necesitas gráficos de barras más avanzados te sugerimos este tutorial, para otros aún más avanzados todavía sugerimos este tutorial y siempre puedes utilizar alguno de estos ejemplos (los primeros tres son ejemplos de gráficos de barras).

 

Gráfico circular o de pastel

El diagrama circular o de pastel es otro que no puede faltar, para eso vamos a recurrir a la función pie (en ingles pie = pastel)




import matplotlib.pyplot as plt # Importamos matplotlib

y =[45, 15, 25, 15] # Defino las cantidades a representar en el diagrama

mylabels = ["Sambayón", "Banana split", "Chocolate", "Dulce de leche"] # Defino que etiqueta va con cada color o seccion

plt.figure(figsize=(10,10)) # Definimos un buen tamaño

plt.title('Venta de helados por porcentaje')

plt.pie(y, labels = mylabels) # uso la funcion pie para generar el diagrama circular o de pastel (en ingles pie = pastel)

plt.show() # Siempre recomendable agregar la funcion show al final

 

Este sería el resultado, una gráfica de pastel muy sencilla.

Un ejemplo un poco mas avanzado es el siguiente

 

import matplotlib.pyplot as plt # Importamos matplotlib

y =[45, 15, 25, 15] # Defino las cantidades a representar en el diagrama

mylabels = ["Apples", "Bananas", "Cherries", "Dates"] # Definimos un array de colores

mycolors = ["red", "blue", "black", "#4CAF50"]

myexplode = [0.1, 0, 0, 0] # Explode nos permite hacer que una seccion del pastel se separe del resto

# myexplode es un array con 4 valores ya que tenemos solo 4 secciones en el pastel

# El primer elemento es mayor a cero mientras que todos los demas son cero, por eso solo el primer elemento se separa del paste.

plt.figure(figsize=(10,10)) # Definimos un buen tamaño

plt.title('Venta de helados por porcentaje')

plt.pie(y, labels = mylabels, startangle = 120, explode = myexplode, colors = mycolors, shadow = True

# startangle nos permite rotal el pastel, mientras que shadow nos permite agregar una sombra

# colors nos permite definir nuestros propios colores, mientra que explode ya fue explicado

plt.show() 

 

Siendo este el resultado

Para ver más te recomendamos este tutorial sencillo, también este tutorial un poco más avanzado y como siempre los ejemplos del sitio de matplotlib.

 

 

 


Citar