Diagrama de Barras con Python by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Compartelo
La gráfica de barras es una representación que utilizamos para mostrar datos categóricos de una forma resumida y con una distribución de frecuencia, frecuencia relativa o de frecuencia porcentual, donde un eje de la gráfica se muestran las etiquetas de las clases o categorías; mientras que en el otro eje de la gŕafica se coloca la escala de recurrencia (Anderson et al., 2016; Newbold et al., 2008).
Este tipo de gráfica las podemos emplear para llamar la atención sobre la frecuencia de una categoría, ya que nos ayuda a identificar las principales causas de los problemas o áreas de interés. Si el diagrama de barras se acomoda en orden descendente de altura, mostrando en la primera posición la causa que ocurre con mayor frecuencia, obtenemos el diagrama de Pareto, el cual nos ayuda a identificar estos problemas para corregirlos de una forma rápida, buscando el costo mínimo de la corrección (Anderson et al., 2016; Newbold et al., 2008).
Para elaborar el diagrama de barra con Matplotlib y Plotly utilizando Python, estaremos utilizando los datos del reporte de Excel sobre la pesca marina del 2020 de Canadá, que pueden ser descargado desde el siguiente enlace: https://open.canada.ca/data/en/dataset/288b6dc4-16dc-43cc-80a4-2a45b1f93383. El reporte de Excel y el código elaborado se encontrará disponible en el repositorio de GitHub: https://github.com/sdesignca/blog-ps-diagrama-barra-python
Donde supondremos que el lector está familiarzado con la sintaxis de Python y con el uso de Jupter Notebook; así mismo, como los conocimientos básicos de carga de datos a partir de archivos de Excel en Python utilizando Pandas. Si se desea conocer más sobre el método para cargar datos de archivos de Excel con Python, pueden leer sobre el tema en el siguiente enlace: http://www.solutiondesign.tech/cargando-datos-de-un-excel-en-python-con-pandas/
Gráfica de Barras con Python
Antes de iniciar con la elaboración de las gráficas importaremos la librería de Pandas con el alias pd, de la siguiente forma:
import pandas as pd
Luego de importar la librería de Pandas, cargaremos los registros del archivo de Excel “marine-finfish-data-2020.xlsx” y asignaremos el DataFrame a la variable datos. Se ha de mencionar que este archivo de Excel es un reporte con formato predefinido, por lo cual deberemos realizar la manipulación de la información para cargar los datos que deseamos, por medio de la función read_excel, donde estaremos omitiendo la lectura específica de filas y columnas, para cargar unicamente los datos del Peróxido de Hidrógeno (Hydrogen peroxide) de la provincia de New Brunswick, Canadá.
Imagen 1: Reporte de Excel con información de la pesca marina del 2020 de las provincias de Canadá.
En la función read_excel, necesitamos especificar las filas que deseamos omitir en la carga de datos por medio del parámetro skiprows. Como este es un reporte que al descargar desde el sitio obtendremos el mismo formato, utilizaremos el siguiente fragmento de código para agregar a una lista o arreglo los números de filas que omitiremos para cargar únicamente la información de New Brunswick:
# omitimos el título del reporte y la información de donde se obtuvieron los datos
SKIPROWS = [0,1]
# omitimos la información luego del encabezado hasta New Brunswick
for row in range(3,68):
SKIPROWS.append(row)
# omitimos la información luego de los datos luego New Brunswick hasta el final
for row in range(96,109):
SKIPROWS.append(row)
Teniendo las filas que desamos omitir en la variable SKIPROWS, utilizaremos el método read_excel para cargar la información de New Brunswick, en el cual cargaremos únicamente las columnas B (Facility Name) y H (Hydrogen peroxide). Si existe alguna duda sobre la carga de información desde un archivo de Excel, pueden leer el árticulo “Cargando Datos de un Excel en Python con Pandas” en nuestro blog.
datos = pd.read_excel( "marine-finfish-data-2020.xlsx"
,sheet_name="Marine Finfish 2020 Data"
,skiprows= SKIPROWS
,usecols="B,H")
Al ver la información cargados en la variable datos con la función head(), podemos observar que para la provincia de New Brunswick no hay valores para unas instalaciones.
datos.head()
Imagen 2: Primeros cinco registros del DataFrame contenido en la variable datos.
Por lo que eliminaremos los registros nulos (NaN) de la información del DataFrame, con la función dropna, en la que enviaremos el valor True en el parámetro inplace, el cual nos servirá para indicar que la eliminación de los datos nulos se aplique al dataframe de la variable, conservando únicamente las instalaciones con registros.
datos.dropna(inplace=True)
Para poder elaborar la gŕafica de Pareto, vamos a ordenar nuestra información por los datos de la columna Hydrogen peroxide utilizando el parámetro by de la función sort_value, donde indicaremos que se ordene de forma descendente, pasando en el parámetro ascending el valor False y por último indicaremos que los cambios sean aplicados a nuestra variable datos por medio del parámetro inplace con el valor True.
datos.sort_values( by='Hydrogen peroxide'
,ascending=False
,inplace=True)
Aplicando este ordenamiento, tenemos listos nuestros datos para ser graficados, por esta razón a lo largo de nuestra explicación, ya no se volverán a manipular los datos contenidos en el DataFrame de nuestra variable datos, por lo cual dicha variable será utilizada para realizar la gráfica con Matplotlib y Plotly.
Gráfica con Pandas y Matplotlib
Matplotlib es una librería utilizada en Python para realizar gráficas estáticas y animadas, a partir de datos contenidos en listas, vectores y en la extensión matemática NumPy (Potter, 2006).
Para poder realizar la gráfica de barras con Matplotlib y Pandas, necesitamos tener instalado el paquete, si no lo hemos instalado, podemos hacerlo por medio del comando pip o pip3. En mi caso usé pip3, por medio del siguiente comando desde la terminal o linea de comandos para su instalación:
pip3 install matplotlib
Teniendo instalada la librería de Matplotlib, importamos el paquete en nuestro archivo de Jupyter Notebook con el alias plt:
import matplotlib.pyplot as plt
Haciendo uso de la variable datos, utilizaremos el siguiente código para realizar la gráfica de barras, el cual deberemos ejecutar de forma conjunta en Jupyter Notebook, o de lo contrario la manipulación posterior a la creación de la gráfica será mostrada por separado en nuestro Jupyter Notebook:
ax = datos.plot(x="Facility Name", y="Hydrogen peroxide", kind="bar", grid=False)
ax.set_title('Presencia de Peróxido de Hidrógeno en New Brunswick, Canadá.')
ax.set_xlabel("Instalaciones")
ax.set_ylabel("Peróxido de Hidrógeno")
plt.show()
Revisando el funcionamiento del código, podemos ver en la primera linea que le asignamos a la variable ax la gráfica de Matplolib, en la que el parametro “x” corresponde al eje X de la gráfica, donde estaremos utilizando como dato la columna que contiene el nombre de la instalación (“Facility Name”). El parámetro “y” es utilizado para indicar los datos del eje Y, donde estaremos utilizando la información de la columna que contiene los valores del peróxido de hidrógeno (“Hydrogen peroxide”), en el parámetro kind, indicaremos que será una gráfica de barras, por lo que enviamos la cadena o string “bar” y nuestra gráfica será generada sin un grid, por lo que enviamos en el parámetro grid el valor False.
ax = datos.plot(x="Facility Name", y="Hydrogen peroxide", kind="bar", grid=False)
Ahora manipulamos el objeto de nuestra gráfica utilizando la variable ax, donde le colocaremos un título descriptivo a nuestra grafica.
ax.set_title('Presencia de Peróxido de Hidrógeno en New Brunswick, Canadá.')
Con la siguiente función podemos agregar a nuestra gráfica un identificador para el eje X.
ax.set_xlabel("Instalaciones")
Con la siguiente función podemos agregar a nuestra gráfica un identificador para el eje Y.
ax.set_ylabel("Peróxido de Hidrógeno")
Y con la siguiente instrucción mostramos la gráfica. Es importante mencionar que en Jupyter Notebook no es necesario agregar esta instrucción, ya que el interprete mostrará la gráfica generada.
plt.show()
Por lo que obtendremos como resultado la gráfica de la imagen 3.
Imagen 3: Diagrama de pareto de la presencia de Peróxido de Hidrógeno en New Brunswick, Canadá.
Gráfica con Plotly
Podemos utilizar Plotly para poder crear aplicaciones web de gráficas interactivas para crear dashboards dinámicos, pudiendo aprovechar esta librería en conjunto con Dash.
Para poder realizar la gráfica de barras con Plotly, necesitamos tener instalado el paquete, si no lo hemos instalado, podemos hacerlo por medio del comando pip o pip3. En mi caso haré uso de pip3, ejecutando el siguiente comando para su instalación:
pip3 install plotly
Luego debemos de importar la librería de plotly con el alias px.
import plotly.express as px
Teniendo importada la librería, utilizaremos el método bar() de plotly para realizar la gŕafica, donde el primer parámetro del método corresponde a la variable que contiene el DataFrame con los datos que deseamos gráficar; en nuestro caso es datos. Luego por medio del parametro x, indicaremos los datos eje X de nuestra gráfica, la cual corresponde al nombre de la columna que contiene el nombre de las instalaciones (Facility Name). El parámetro y nos sirve para indicar que datos del DataFrame que corresponderán al eje Y, el cual es la cantidad de peróxido de hidrógeno (Hydrogen peroxide) .
El parámetro title nos sive para colocar un nombre descriptivo a nuestra gráfica, y el parámetro labels nos sirve para cambiarle el nombre a los ejes de nuestra gráfica. Estos deben ser enviados como un diccionario de Python, por si se desea utilizar una variable para defirnir los nombres de forma separada.
fig = px.bar( datos
,x="Facility Name"
,y="Hydrogen peroxide"
,title="Presencia de Peróxido de Hidrógeno"
,labels={
"Facility Name": "Instalaciones",
"Hydrogen peroxide": "Peróxido de Hidrógeno"
}
)
Por último, mostramos nuestra gráfica con el siguiente comando:
fig.show()
Es importante mencionar que en Jupyter Notebook, nuestra gráfica se mostrará sin necesidad de utilizar este último comando.
Referencias
Anderson, D., Sweeney, D., Williams, T., Camm, J. y Cochran, J. (2016). Estadística para negocios y economía. 12va edición. Ciudad de México, México. CENGAGE Learning.
Newbold, P., Carlson, W. y Thorne, B. (2008). Estadística para administración y economía. Madrid, España: PEARSON. 10, 14 – 15 pp.
Diagrama de Barras con Python by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.