Diagrama Circular con Python
Estaremos explicando como crear un diagrama circular o de pie paso a paso con Python y su recomendación para su uso en los análisis.
Innovation fo smart Business
Temás relacionados con Inteligencia de Negocio y Big Data, desde su diseño hasta la implementación
Estaremos explicando como crear un diagrama circular o de pie paso a paso con Python y su recomendación para su uso en los análisis.
Diagrama de Caja con Python by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
La estadística descriptiva nos ayuda a visualizar de forma rápida las características de la distribución en un grupo de datos (dataset), por medio de los valores de importancia de una forma simplificada, logrando tener un mejor entendimiento de la información colectada (Potter, 2016).
Por esta razón el diagrama de caja es una de las visualizaciones de datos utilizadas en la estadística descriptiva, permitiendo realizar análisis sin extraer conclusiones, por medio del resumen de los cinco valores que representa este tipo de diagrama (Faraldo y Pateiro, 2012; Anderson et al., 2016).
Anderson et al. (2016) hacen mención de que estos cinco valores son:
Para entender un diagrama de caja y su elaboración con Matplotlib y Plotly utilizando Python, estaremos utilizando como datos de prueba la edad de las zarigüeyas extraído de Kaggle desde el siguiente link: https://www.kaggle.com/abrambeyer/openintro-possum, también el archivo de datos CSV se encuentra disponible en el repositorio de GitHub: https://github.com/sdesignca/blog-ps-diagrama-caja-python
Antes de elaborar el diagrama de caja con Matplotlib y Plotly, definiremos de forma breve los conceptos básicos y los cálculos de los valores utilizados para esbozar un diagrama de caja, de una forma práctica. Por lo que estaremos utilizando los siguientes datos que corresponden a la edad de las zarigüeyas hembra:
Antes de iniciar a realizar los cálculos de los cinco valores, debemos ordenar los datos de forma ascendente, por lo que los datos nos quedan de la siguiente forma:
Ahora con los datos ordenados, podemos identificar que el valor mínimo de nuestro set de datos es 1 y el valor máximo es el 9. Por lo que calcularemos ahora la mediana (Q2). La cual es la posición central de nuestro conjunto de datos (dataset).
Si la cantidad de datos es par, la mediana corresponde al promedio de los dos valores centrales, por lo que primero se debe calcular la posición del valor central de la siguiente forma:
Donde n es el número de datos con los que contamos.
Luego de tener la posición, y al tener una cantidad de datos par, se debe calcular la mediana de la siguiente forma:
Pero si llegáramos a tener un conjunto de datos impar, al realizar el cálculo de la posición deberemos redondear el resultado al entero próximo. En nuestro caso contamos con 43 datos, siendo n impar, por que deberemos redondear el resultado que obtendremos, para identificar la posición central de nuestro conjunto de datos:
Ahora que tenemos la ubicación, debemos identificar el valor que se encuentra en la posición 22, en este caso el valor corresponde al valor 4:
Por lo tanto:
Teniendo la media identificada, debemos calcular el primer y tercer cuartil. Los cuartiles son percentiles específicos, siendo recomendable dividir los datos en cuatro partes iguales. La información que nos proporcionan, es la observación de la distribución de los datos menores o iguales al valor del percentil especifico. Donde es utilizado para el primer cuartil (Q1) del 25% y para el tercer cuartil (Q3) del 75%, en los diagramas de caja.
Para poder ejemplificar dicha distribución, mostraremos la división de los datos. Dichos valores los obtendremos con el calculo del cuartil Q1 y Q2:
Ahora procedemos a calcular el cuartil Q1, con la siguiente formula par el calculo del percentil:
Donde n es el número de datos con los que contamos.
Dado que nuestra n es de 43, y el percentil p que deseamos calcular es del 25%, por lo tanto:
Dado que i no es un entero, y se tuvo que aproximar, el cuartil Q1 corresponde al valor de la posición 11 de nuestros datos, por lo tanto.
Ahora debemos calcular el cuartil Q3 que corresponde a un percentil p del 75%.
En esta ocasión la i no es un entero y se redondeó al entero superior, por lo que percentil Q3 corresponde al valor de la posición 33, por lo tanto.
Ahora nos queda calcular el rango intercuartílico o intercuartil (RIC), el cual es la diferencia entre el tercer cuartil (Q3) y el primer cuartil (Q1).
Además del cálculo del RIC, debemos calcular los limites de nuestro diagrama de caja, por lo que utilizamos la siguiente ecuación para el cálculo del límite inferior:
Para calcular el límite superior utilizamos la siguiente ecuación:
Por lo que procedemos a iniciar con el calculo de nuestro rango intercuartílico:
Obteniendo nuestro RIC = 2, procedemos a calcular el límite inferior y superior:
Con los datos calculados, podemos obtener la siguiente gráfica de caja.
Es importante mencionar que los datos que se encuentren fuera de los límites calculados, serán observaciones atípicas en nuestros datos.
Para poder iniciar la explicación, supondremos que el lector está familiarizado con la sintaxis de Python y con Jupyter Notebook, además de tener conocimiento sobre la carga de archivos CSV en Python con Pandas, donde los archivos de datos que estaremos utilizando; así como, el archivo de Jupyter con el código, puede ser descargados desde el siguiente repositorio en GitHub: https://github.com/sdesignca/blog-ps-diagrama-caja-python
Por lo que estaremos graficando las edades de las zarigüeyas por sexo (macho y hembra), cargando los datos de la columna “sex” (sexo) y “age” (edad) del archivo “possum.csv”. Iniciando por la importación de la librería Pandas con la siguiente instrucción:
import pandas as pd
Luego de importar la librería, asignaremos a nuestra variable “datos” el DataFrame con las columnas deseadas (“sex” y “age”) de nuestro archivo “possum.csv”, el cual se encuentra en el mismo directorio que nuestro archivo de Jupyter Notebook. Si en dado caso nuestro archivo se encuentra en otra ubicación, debemos colocar la ruta (path) de nuestro archivo de datos junto con el nombre del archivo CSV.
datos = pd.read_csv( "possum.csv"
,delimiter=','
,usecols=['sex','age']
)
A lo largo de nuestra explicación, no se manipularán los datos contenidos en el DataFrame, por lo cual esta misma variable será utilizada para realizar la gráfica; tanto con Matplolib, como con Plotly.
Matplotlib es una librería utilizada para realizar gráficas estáticas, animadas y visualizaciones interactivas a partir de datos contenidos en listas, vectores y en su extensión matemática, la cual es NumPy (Potter, 2006).
La librería de Pandas trabaja en conjunto con NumPy y Matplotlib, por esta razón es posible utilizar una función propia del objeto creado con Pandas, agilizando el proceso de creación de gráficas, en la que si deseamos realizar cambios en la gráfica, debemos manipular el objeto de Matplotlib.
Para poder realizar la gráfica de caja con Matplotlib, necesitamos tener instalado el paquete, si no lo hemos instalado, podemos hacerlo por medio del comando pip o pip3. En nuestro caso haremos uso de pip3, ejecutando el siguiente comando desde la linea de comandos o terminal, para su instalación:
pip3 install matplotlib
Teniendo instalada la librería de Matplotlib, importamos el paquete en nuestro archivo de Jupyter Notebook de la siguiente forma, colocándole como alias plt:
import matplotlib.pyplot as plt
Haciendo uso de la variable datos, luego de cargar la información del archivo CSV. Utilizaremos el siguiente código para realizar la gráfica de caja, el cual deberemos ejecutar de forma conjunta en Jupyter Notebook, donde luego explicaremos linea por linea su funcionamiento.
ax = datos.boxplot(by='sex',grid=False,rot=45)
ax.set_title('Edad de Zarigüeyas por Sexo');
plt.suptitle('')
ax.set_xlabel("Sexo");
ax.set_ylabel("Edad (años)");
plt.xticks([1,2], ['Hembra', 'Macho'])
plt.show()
Si ejecutamos de forma individual cada instrucción en Jupyter Notebook, primero nos mostrará el diagrama de caja con sus parámetros por defecto (imagen 1), luego nos mostrara por separado el cambio a los ejes que realizamos (imagen 2).
Imagen 1: Gráfica de Matplolib sin modificaciones.
Imagen 2: Gráfica de Matplotlib solo con ejes modificados.
Al ejecutar todo el fragmento de código en conjunto, obtenemos la gráfica con las modificaciones que realizamos:
Si revisamos el código con su funcionamiento, en la siguiente linea, utilizamos el método de boxplot de nuestro DataFrame. Donde nuestra segmentación del sexo de las zarigüeyas se encuentra en la columna sexo (sex); donde f es para las hembras y m es para los machos; por esta razón debemos agrupar los datos por los valores de esta columna. Esto lo hacemos con el parámetro by, donde nos agrupará la información del resto de columnas (en nuestro caso solo tenemos la columna age). El parámetro grid con el valor False, nos quita el grid del fondo de la gráfica, si quisiéramos que el grid apareciera podemos colocar True o eliminarlo, ya que el valor por defecto es True. El parámetro rot, se refiere a la rotación de la etiqueta de los valores (en nuestro caso f y m).
ax = datos.boxplot(by='sex',grid=False,rot=45)
Con la siguiente instrucción le asignamos el título de nuestra gráfica.
ax.set_title('Edad de Zarigüeyas por Sexo');
Con la siguiente instrucción colocamos el subtitulo de nuestra gráfica como vacía. Si no colocamos el subtitulo como vacío, nos aparecerá el valor generado por defecto, que en nuestro caso es la agrupación por sexo de las zarigüeyas.
plt.suptitle('')
Ahora colocamos el identificador de nuestro eje x con el valor “Sexo”:
ax.set_xlabel("Sexo");
Con la siguiente instrucción colocamos el identificador de nuestro eje Y con el valor “Edad (años)”:
ax.set_ylabel("Edad (años)");
Es importante tomar en consideración el siguiente punto, ya que vamos a cambiar con la siguiente instrucción la etiqueta de identificación a nuestras gráficas, por lo que debemos de saber a que valores corresponde el identificador. En nuestro caso, el valor 1 corresponde a la gráfica con los datos de las edades de las zarigüeyas hembra, y el valor 2 corresponde a los datos de las edades de las zarigüeyas macho, por lo que ponemos en el primer parámetro (ticks) los identificadores de los datos, y en el segundo parámetro (labels) le asignamos el nombre que tendrán los identificadores de los componentes de la gráfica.
plt.xticks([1,2], ['Hembra', 'Macho'])
Luego de las transformaciones realizadas a nuestra gráfica, la mostramos con la siguiente instrucción:
plt.show()
Plotly es un framework open-source de Python, utilizado para poder crear aplicaciones web de gráficas interactivas, donde no es necesario el ser un experto en HTML, CSS y Javascript para crear dashboards de gráficas.
Para poder realizar la gráfica de caja con Plotly, necesitamos tener instalado el paquete, si no lo hemos instalado, podemos hacerlo por medio del comando pip o pip3. En nuestro caso haremos 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 box de plotly para realizar la gráfica de caja, donde el primer parámetro del método corresponde a la variable que contiene el DataFrame con los datos que deseamos graficar; en nuestro caso dicha variable es datos. El siguiente parámetro que utilizaremos sera x, el cual nos sirve para indicar que datos se encontraran en el eje X de nuestra gráfica, que en nuestro caso es “sex”. El parámetro y nos sirve para indicar que datos del DataFrame estarán en el eje Y.
Con el parámetro points podemos indicar que información deseamos mostrar en nuestra gráfica, con la opción “outliers” (que es el parámetro por defecto) indicamos que nos muestre datos atípicos, con la opción “none” indicamos que no nos muestre los valores atípicos, ni la dispersión de los datos en la gráfica de caja. Y por último, la opción “all” nos muestra la dispersión de datos al lado del diagrama de caja y los valores atípicos.
El parámetro title nos sirve para indicar el nombre que tendrá nuestro diagrama, y el parámetro labels nos sirve para definirle el nombre en forma de diccionario a nuestros ejes.
fig = px.box( datos
,x="sex"
,y="age"
,points="outliers"
,title="Edad de Zarigüeyas por Sexo"
,labels={
"sex": "Sexo"
,"age": "Edad (años)"
}
)
Por último, mostramos nuestra gráfica con el siguiente comando:
fig.show()
Es importante mencionar que en Jupyter Notebook, nuestra gráfica se mostrara sin necesidad de utilizar este último comando.
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. 104, 108 – 110, 131 – 132 pp.
Faraldo, P. y Pateiro, B: (2012). Tema 1. Estadística Descriptiva. Extraído de: http://eio.usc.es/eipc1/BASE/BASEMASTER/FORMULARIOS-PHP-DPTO/MATERIALES/Mat_G2021103104_EstadisticaTema1.pdf
Kathari, S. (2020). Plotly Dash: A beginner’s guide to building an analytics dashboard. Extraído de: https://medium.com/analytics-vidhya/plotly-dash-a-beginners-guide-to-building-an-analytics-dashboard-cedf297e01f1
Potter, K. (2006). Methods for Presenting Statistical Information: The Box Plot. Extraído de: http://www.sci.utah.edu/~kpotter/publications/potter-2006-MPSI.pdf
Diagrama de Caja con Python by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Diagrama de Barras con Python by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
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).
Las variables categóricas nos ayudan a mostrar respuestas a grupos o categorías, las cuales pueden ser respuestas como: sí/no, totalmente en desacuerdo hasta totalmente de acuerdo; entre otras respuestas (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/
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.
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á.
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.
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.
Cargando Datos de un CSV en Python con Pandas by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Como vimos en la entrada anterior (Cargando Datos de un CSV en Python con Pandas), pandas es un paquete para Python que nos facilita la manipulación de los datos; sin embargo, dichos datos son cargados en memoria, por lo que la velocidad de respuesta en su uso, dependerá de la cantidad de datos y los recursos del equipo que estemos utilizando
La función read_excel es la función de pandas para cargar datos de un archivo de Excel, donde posee diversos parámetros para manipular los datos al momento de cargarlos en la memoria, donde nos enfocaremos en los principales parámetros que pueden llegar a sernos de utilidad en la práctica (McKinney, 2018; Harrison y Petrou, 2020).
Según la documentación de Pandas, al igual que Harrison y Petrou (2020), internamente esta librería hace uso de los paquetes xlrd y openpyxl para leer archivos XLS y XLSX, si en dado caso no lo llegáramos a tener instalado, deberá realizarse de forma manual con pip o conda. Dentro de esta función de lectura de archivos, también podemos especificar con el parámetro engine, que paquete utilizar al momento de cargar los datos, teniendo disponibles las siguientes opciones:
xlrd
openpyxl
odf
pyxlsb
Antes de dar inicio a la explicación del funcionamiento de esta función, es importante recalcar que una hoja de cálculo, no es necesariamente un set de datos y no es requerido que las personas registre la información en un formato determinado, por lo que en algunos casos los tipos de datos no concuerdan con lo que ha registrado la persona o el software que creo la información.
Para poder iniciar la explicación, supondremos que el lector está familiarizado con la sintaxis de Python y con Jupyter Notebook, donde los archivos de datos que estaremos utilizando; así como, el archivo de Jupyter, puede ser accedidos y descargados desde el siguiente repositorio en GitHub: https://github.com/sdesignca/blog-cargando-excel-pandas
Para iniciar, importamos la librería de pandas en nuestro archivo de Jupyter Notebook, donde le colocaremos el alías, o sobre nombre pd.
import pandas as pd
Luego ubicaremos el path o la ruta donde se encuentra nuestro primer archivo de ejemplo “datos.xlsx”, en mi caso el archivo “datos.csv” se encuentra en la misma ubicación que el archivo de Jupyter, por lo que solo necesitamos colocar el nombre del archivo con su extensión como un parámetro de tipo String o cadena a la función read_excel. Está información se cargará y se asignará a la variable datos.
datos = pd.read_excel("datos.xlsx")
Mostraremos el contenido de la variable datos con la función head() del paquete de pandas:
datos.head()
Como puede observarse, la información es asignada a la variable:
Sin embargo, como se mencionó anteriormente, una hoja de cálculo no es necesariamente un set de datos, donde podemos tener la necesidad de poder realizar una exploración de información y un análisis a partir de archivos que pueden ser generados por un software o persona, en la cual siempre mantiene su estructura. Para ejemplificar esto utilizaremos el archivo “WasteBySector.xlsx”, el cual es un reporte generado por “The Organisation for Economic Co-operation and Development (OECD)” sobre la generación de desperdicio por país, accesible desde el siguiente enlace: https://stats.oecd.org o disponible en nuestro repositorio en GitHub: https://github.com/sdesignca/blog-cargando-excel-pandas
Al abrir el reporte de Excel podemos observar que posee la siguiente estructura:
En este caso, vemos que el archivo tiene una estructura distinta al del primer ejemplo, donde la información que necesitamos extraer son los países y la cantidad de desperdicio generado por países en los diferentes años, en la cual utilizaremos varios parámetros de la función read_excel. Para ello pasaremos como String o cadena el nombre del archivo con su extensión, el cual es “WasteBySector.xlsx”.
En algunos casos la hoja de calculo puede tener varias hojas, por lo que con el parámetro sheet_name podemos seleccionar la hoja de la cual deseamos cargar la información, donde podemos pasar el número de la hoja, el nombre de la hoja o una lista de las hojas de las cuales deseamos cargar la información, en nuestra hoja de ejemplo solo existe una por lo que no es necesario colocar el nombre, pero con el fin de ejemplificarlo pasaremos como parámetro el nombre que tiene nuestra hoja: “OECD.Stat export”.
Al analizar la estructura del Excel, hay secciones que no son de nuestro interés para un análisis. Si empezamos a analizar la parte superior del Excel debemos omitir las primeras cuatro filas, es importante ver que la primera fila esta oculta en nuestro archivo, sin embargo esto no significa que no sea tomada en cuanta por la función al momento de cargar información. Para poder omitir las filas usamos el parámetro skiprows, con el valor 4.
Ahora si vemos la parte inferior de los datos de nuestro Excel, también contiene información que no necesitamos para nuestro análisis, por lo cual utilizaremos el parámetro skipfooter, donde enviaremos el valor 4, ya que debemos de omitir las ultimas cuatro filas al momento de cargar nuestra información.
Por lo que tendríamos a este momento la siguiente instrucción:
datos = pd.read_excel("WasteBySector.xlsx",
sheet_name='OECD.Stat export',
skiprows=4,
skipfooter=4,
usecols="A,C:K")
Ahora con la función head(30) mostraremos los datos que se han cargado a nuestra variable datos, es importante mencionar que el valor 30 nos mostrará los primeros 30 registros que contenga nuestra variable, donde hemos utilizado este valor para mostrar que no han sido cargados los datos de las primeras cuatro filas y las ultimas cuatro filas.
datos.head(30)
Podemos observar en el resultado que obtendremos, aún hay información que debemos ajustar, como cambiar el nombre de la columna “Year” (año) por “Country” (País), eliminar la primera fila de los datos y la segunda columna (“Unnamed: 1”).
Primero usaremos el parámetro usecols dentro de la función reas_excel para cargar unicamente las columnas don los datos que son de nuestro interés, donde podemos pasar una cadena o String con el rango de las columnas o una lista de las columnas que deseamos cargar. En nuestro caso utilizaremos la opción de String, donde indicaremos que cargue unicamente la información letra de la columna A y la información de la columna C hasta la K.
datos = pd.read_excel("WasteBySector.xlsx",
sheet_name='OECD.Stat export',
skiprows=4,
skipfooter=4,
usecols="A,C:K")
Si mostramos los datos asignado a nuestra variable con el comando head()
datos.head()
Se observa que la columna “Unamed: 1” ya no fue tomada en cuenta al cargar la información:
Luego cambiaremos el nombre de la columna “Year” (año) a “Country” (país) con la siguiente instrucción. Donde el parámetro inplace con el valor True, indica que deseamos que sea cambiado de forma permanente en la información contenida en nuestra variable datos, de lo contrario este cambio no será permanente para la siguiente instrucción que realicemos con nuestro set de datos :
datos.rename(columns={'Year':'Country'},inplace=True)
Al mostrar nuevamente la información en nuestra variable, veremos que se ha renombrado el nombre de la columna.
A este punto no se ha discutido sobre las estructura de DataFrame y Serie de Pandas; sin embargo, debemos hacer la mención de que ambas estructuras manejan de forma interna una secuencia de indexado de los registros. Es importante mencionarlo, ya que utilizaremos este indexado para la siguiente instrucción que utilizaremos.
Ahora proseguimos con la eliminación de la primera fila:
Para hacer esto, utilizamos la función drop, donde utilizaremos el parámetro labels con el valor 0, para indicar que son los registros de la primera fila, aquí también puede ser enviada una lista de índices o columnas. Luego indicamos que eliminaremos la filas pasando el valor “index” en el parámetro axis, si quisiéramos eliminar la columna, deberíamos enviar el parámetro “columns” y por último enviaremos en el parámetro inplace con el valor True, para que el cambio se preserve en la información de nuestra variable datos:
datos.drop(labels=0,axis="index",inplace=True)
Si mostramos los datos con la función head(), veremos que se ha eliminado del DataFrame la primera fila:
Ahora reindexaremos los datos del DataFrame asignado a nuestra variable datos utilizando la función reset_index. En esta función utilizaremos el parámetro drop con el valor True, si no utilizamos esta propiedad de la función, al momento de realizar el reindexado, la secuencia de indices anteriores no sera eliminado y será creado como una nueva columna dentro de nuestro DataFrame, por lo que esta propiedad elimina por completo la secuencia de índices que vamos a remplazar. Y por último agregaremos el parámetro inplace con el valor True para que se preserven los cambios en la estructura de nuestra variable datos:
datos.reset_index(drop=True,inplace=True)
Utilizaremos la función info() para poder obtener la información de la memoria utilizada, la cantidad de columnas y el detalle sobre las columnas de nuestro DataFrame, en la cual se mostrará el índice, el nombre, la cantidad de datos no nulos y el tipo de dato de las columnas.
Podemos observar en el resultado que de las nueve columnas con datos decimales (flotantes o floats), solo uno fue reconocido como tipo float64; donde el resto de columnas, incluyendo la del nombre de los países es del tipo object (objeto). Por lo que ahora nos corresponde realizar la transformación del tipo de dato de las columnas de datos numéricos, la cual es posible con la función to_numeric, donde el primer argumento corresponde a los datos que deseamos convertir y el segundo parámetro que utilizaremos es errors con el valor “coerce”, el cual indicará si hay un error al hacer la conversión, sea colocado un valor NaN (nulo).
for columna in datos.columns[1:]:
datos[columna] = pd.to_numeric(datos[columna],
errors='coerce'
)
Hay que hacer mención que la propiedad columns nos permite acceder al listado de las columnas del DataFrame, en este caso para convertir los datos a decimales o floats, omitimos la primera columna, por lo que indicamos que sean tomadas desde la segunda columna (con el valor de índice 1), hasta la ultima columna existente, quedando la restricción de la siguiente forma [ 1: ]
Al obtener nuevamente la información del DataFrame con la función info(), observaremos que las columnas de datos numéricos ya es de tipo float, y nos da un dato más real de los datos que no son nulos en cada una de las columnas.
Luego de todo este proceso de transformación, nuestro set de datos queda de la siguiente forma:
Harrison, M., y Petrou, T. (2020). Pandas 1.x: coockbook. 2da. Edicion. Birmingham, U.K: Packt Publishing. 86 – 93 pp.
McKinney, W. (2018). Python for Data Analysis. 2 da edicion. California, E.E.U.U.: . 186 – 187 pp.
Cargando Datos de un CSV en Python con Pandas by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Cargando Datos de un CSV en Python con Pandas by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Es un paquete que se ha tornado esencial para el análisis de información en Python, ganando popularidad desde el 2010. Dicho paquete fue elaborado por Wes Mckinney en el 2008, donde su nombre se deriva de “panel data”, término utilizado para el conjunto de datos estructurados y multidimencionales (Harrison y Petrou, 2020; Stepanek, 2020).
Este paquete facilita la manipulación, preparación y la limpieza de datos estructurados, como archivos CSV, hojas de cálculo (como Excel) o bases de datos estructuradas. Esta librería cuenta con dos tipos de estructuras; la estructura de Serie, conformada por una secuencia de valores similares al tipo de NumPy. Y la otra estructura disponible en este paquete es el DataFrame, el cual representa una tabla de datos que contiene una colección de columnas que pueden ser de diferentes tipos (numérico, alfanumérico, booleano, etc.), teniendo está estructura índices de columnas y filas, en la que la información puede ser almacenada en bloques de una o más dimensiones, haciendo más fácil su selección, combinación y transformación de información (Harrison y Petrou, 2020; Walker, 2020, McKinney, 2018).
La función para poder cargar a memoria los datos de un archivo CSV con pandas se llama read_csv, la cual cuenta con diversos parámetros para poder manipular la lectura del archivo y obtener los datos. Viendo los principales parámetros de manipulación que nos pueden llegar a servir en la práctica.
Esta función de Pandas es una de las más completas, en términos de opciones para normalizar los datos, pudiendo incluso manejar dos motores de análisis; uno de estos es el motor de C, el cual es más eficaz que el motor de Python, ya que cuenta con mayor precisión en valores flotantes, que puede ser especificado utilizando el parámetro float_precision dentro de la función read_csv. Sin embargo, se debe indicar mediante el parámetro engine con una ‘c’ dentro de dicha función, de lo contrario utilizará por defecto el motor de Python.
Para poder iniciar la ejemplificación del uso de esta función, supondremos que el lector está familiarizado con la sintaxis de Python y con Jupyter Notebook, donde el archivo de datos que estaremos utilizando; así como, el archivo de Jupyter, puede ser accedido y descargado desde el siguiente repositorio en GitHub: https://github.com/sdesignca/blog-cargando-csv-pandas
Para iniciar, importamos la librería de pandas en nuestro archivo, donde le colocaremos el alías pd.
import pandas as pd
Luego ubicaremos el path o la ruta donde se encuentra ubicado nuestro archivo “Datos.csv”. En nuestro caso el archivo se encuentra en la misma ubicación donde está nuestro archivo de Jupyter, por lo que solo necesitamos colocar el nombre del archivo con su extensión como un parámetro de tipo String o cadena, a la función read_csv y la información cargada la asignara a la variable datos.
datos = pd.read_csv("Datos.csv")
En unos casos, podemos llegar a tener otro tipo de delimitador en nuestros archivos CSV, por ejemplo un punto y coma (;), por lo que podemos utilizar el parámetro delimiter y especificar cual será el carácter que está delimitando la información entre si. En el archivo CSV de ejemplo el delimitador es una coma (,), este es el parámetro por defecto que toma la función read_csv, sin embargo para ejemplificar su uso dentro de la función incluiremos la coma (,) con el parámetro delimiter.
datos = pd.read_csv("Datos.csv",delimiter=',')
Al ejecutar esta instrucción y asignarla a la variable datos. Mostraremos su contenido utilizando la función head() de Python:
datos.head()
Al ser ejecutado, mostrará la información cargada en la variable desde el archivo; sin embargo, los caracteres especiales no son desplegados:
Para poder corregir esto, vamos a pasar el parámetro encoding en la función read_csv, con el valor latin1 (si se desean conocer que otras opciones están disponibles se puede visitar el link https://docs.python.org/3/library/codecs.html#standard-encodings), quedando la instrucción:
datos = pd.read_csv("Datos.csv",delimiter=',',encoding='latin1')
Al mostrar nuevamente los valores con la función head(), obtendremos la información cargada en el DataFrame con la codificación latina, mostrando así los caracteres especiales contenidos:
En este punto, ya tenemos nuestra información cargada en nuestra variable datos, con los caracteres especiales disponibles; sin embargo, tenemos una columna que contiene fechas y podríamos pensar que estos valores son de tipo fecha (o datetime), por lo que revisaremos el tipo de dato de cada una de las columnas con la siguiente propiedad del DataFrame de Pandas:
datos.dtypes
Obteniendo el siguiente resultado:
Como se puede observar, la columna “Fecha de Ingreso” es de tipo object, para poder cambiar esto, podemos convertir el tipo de la columna, luego de cargar la información; sin embargo, en este documento, estamos mostrando el uso de la función read_csv, por lo que vamos a convertir esta columna a tipo fecha desde el momento en el que se carga la información utilizando el parámetro parse_dates, donde enviamos como parámetro un arreglo con el nombre de las columnas que deseamos convertir a tipo fecha, en nuestro caso el arreglo seria [‘Fecha de Ingreso’]:
datos = pd.read_csv("Datos.csv"
,delimiter=','
,encoding='latin1'
,parse_dates=['Fecha de Ingreso']
)
Luego de ejecutar nuevamente esta instrucción y cargar los datos del archivo a la variable datos, verificamos nuevamente el tipo de datos de las columnas:
datos.dtypes
Al obtener el resultado, podemos observar que la columna “Fecha de Ingreso” ya es de tipo fecha o datetime
Sin embargo en un análisis no siempre es necesaria toda la información contenida en un archivo, por lo que podemos pasar como parámetro las columnas que deseamos sean cargadas en la memoria. Esto lo hacemos pasando un arreglo con el nombre de las columnas que contiene nuestro archivo CSV en el parámetro usecols, en nuestro caso vamos a cargar únicamente las columnas “Código”, “Fecha de Ingreso”, “Sueldo Base” y “Bonificación”:
datos = pd.read_csv("Datos.csv"
,delimiter=','
,encoding='latin1'
,parse_dates=['Fecha de Ingreso']
,usecols=['Código','Fecha de Ingreso','Sueldo Base','Bonificación']
)
Al ejecutar este comando y hacer uso de la función head() sobre la variable que contiene el DataFrame, obtenemos unicamente la información de las columnas que hemos especificado.
Estos suelen ser los parámetros de más ayuda al momento de cargar un archivo CSV, sin embargo existen más parámetros dentro de la función read_csv que nos pueden llegar a ser de utilidad, por lo que si se desea profundizar en las demás opciones que no fueron cubiertas, puede visitarse el siguiente link de documentación:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Harrison, M., y Petrou, T. (2020). Pandas 1.x: coockbook. 2da. Edicion. Birmingham, U.K: Packt Publishing. 86 – 93 pp.
McKinney, W. (2018). Python for Data Analysis. 2 da edicion. California, E.E.U.U.: . 124 – 130 pp.
Stepanek, H. (2020). Thinking in Pandas: How to use the Python Data Analysis Library the Right Way. Portland, E.E.U.U: Apress. 67 – 69 pp.
Walker, M. (2020). Python Data Cleaning: cookbook. Birmingham, U.K: Packt Publishing. 2 – 8 pp.
Cargando Datos de un CSV en Python con Pandas by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Diferencia entre Power BI Desktop de Descarga Directa y Power BI de Microsoft Store by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Es una aplicación gratuita que está conformada por una colección de servicios de software, aplicaciones y conectores que funcionan de forma conjunta, con la finalidad de poder cargar información y transformarla de forma visual en un conocimiento coherente e interactivo. Siendo una herramienta que agiliza el proceso de análisis de datos, en la que permite crear, compartir y consumir la información de una forma fácil y rápida, a partir de cualquier fuente de datos (archivos CSV, Hojas de calculo, base de datos, entre otros), Creando reportes completos y eficientes para la toma de decisiones, sin escribir código de programación.
Power BI cuanta con diferentes aplicaciones. La cual Power BI Desktop es su aplicación de escritorio, Power BI Service es un servicio SaaS (Software as a Service), el cual es su versión web, y cuenta con aplicaciones móviles nativas para Windows, iOS y Android. Donde el conjunto de estas aplicaciones permiten crear, compartir y consumir la información de una manera rápida y útil.
Los requerimientos mínimos para el funcionamiento de Power BI son:
Power BI puede obtenerse de dos formas. Una de ellas es instalándola desde Microsoft Store, o como una descarga directa del ejecutable de instalación. En ambos casos se obtiene la última versión del software, sin embargo hay diferencia entre ambas opciones.
Es importante mencionar que al momento de realizar un reporte, ambas aplicaciones trabajan de la misma forma, sin tener diferencia entre el archivo generado por Power BI (.pbix), pudiendo crear informes y abrirlos desde cualquiera de estas dos opciones de instalación.
Para obtener la aplicación de Power BI Desktop mediante descarga directa, podemos dirigirnos al siguiente enlace: https://powerbi.microsoft.com
Al ingresar al sitio de Microsoft debemos de seleccionar la opción de “Productos” y seleccionar “Power BI Desktop”.
En esta sección podremos ver una opción que indica “Descarga gratis”, si la seleccionamos nos redirigirá a la tienda de Microsoft (Microsoft Store). Como en este caso deseamos realizar la descarga el archivo de instalación manual, seleccionaremos la opción de “Consulte las opciones de descarga e idiomas disponibles”.
Nos abrirá una nueva pestaña donde podremos seleccionar el idioma que deseamos de Power BI que deseamos instalar.
Al haber escogido el idioma que deseamos, seleccionar la opción de descargar (Download), nos abrirá una ventana, mostrando el instalador para una computadora de 32 bits y de 64 bits. Por lo que debemos de seleccionar la opción de nuestro equipo. En mi caso, descargare la opción de 64 bits y seleccionamos “Next” para iniciar la descarga.
Luego de que termine la descarga, tendremos en nuestro equipo el instalador de Power BI Desktop. Donde ejecutamos el archivo descargado para iniciar el proceso de instalación.
Antes de iniciar el proceso de instalación, nos solicitara que seleccionemos el idioma que deseamos ver el contenido del instalador. Al tener seleccionado el idioma, seleccionamos la opción de “Next”.
Al ser una instalación manual de Power BI Desktop, nos solicitará conceder permisos de administración de equipo para instalarlo, por lo que seleccionamos “sí”.
Al conceder los permisos para iniciar la instalación, el instalador se preparará para solicitar los parámetros básicos de la instalación.
Luego nos mostrará un mensaje de bienvenida, donde nos muestra información del instalador que se esta ejecutando e información de los términos de privacidad del software. Donde seleccionamos la opción de “Next” para iniciar el proceso.
Luego nos mostrará los términos y condiciones del uso de Power BI Desktop, por lo que debemos seleccionar la opción donde aceptamos los acuerdos de su uso (I accpet the terms in the License Agreement) para poder continuar. Luego de haber marchado la casilla, seleccionamos la opción de “Next”.
En la siguiente opción podremos cambiar la ubicación donde se instalará Power BI Desktop, seleccionando la opción de “change…”. En nuestro caso lo dejaremos en la ruta de instalación por defecto, seleccionando la opción de “Next” para continuar con la instalación.
Luego en la próxima pantalla, nos preguntará si deseamos crear un acceso directo en el escritorio de nuestra computadora (Create a desktop shortcut), en este caso lo marcaremos para que cree el acceso directo durante el proceso de instalación. Por último, si deseamos revisar los parámetros anteriores, o modificarlos, podemos seleccionar la opción “Back”, de lo contrario podemos iniciar la instalación seleccionando la opción “Install”.
Al iniciar la instalación, nos mostrará el progreso hasta su finalización.
Al finalizar la instalación, nos preguntará si deseamos ejecutar Power BI Desktop (Launch Microsoft Power BI Desktop) al finalizar la instalación. Si no queremos que se ejecute al finalizar, solo debemos desmarcar la casilla.
Al darle finalizar ya tendremos disponible Power BI Desktop en nuestra computadora.
Para poder obtener Power BI Desktop de esta forma, debemos abrir la tienda de Microsoft (Microsoft Market)
Luego ir al buscador (“Search”) ubicado en la parte superior derecha de la venta, e ingresar Power BI Desktop
Seleccionamos la opción que nos aparece en el buscador, donde nos redirige a la información de dicha aplicación, donde debemos tener el cuidado de que estamos instalando Power BI Desktop, ya que en la tienda de Microsoft, nos aparece también la aplicación de Power BI, la cual únicamente nos sirve para poder visualizar los reportes y no elaborarlos.
Debemos seleccionar la opción de “Get” y Luego “Install”, y se iniciará la instalación de Power BI Desktop en nuestro dispositivo de Windows.
Tras terminar la instalación, podremos hacer uso de la aplicación en nuestro equipo.
Iseminger, D., Hart, M., Sparkman, M., Coulter, D. y Sharkey, K. (2021).What is Power BI Desktop? Extraído de: https://docs.microsoft.com/en-us/power-bi/fundamentals/desktop-what-is-desktop
Iseminger, D., Hart, M., Thompson, W., Heerdt, J., Coulter, D. y Sharkey, K. (2021). Get Power BI Desktop. Extraído de: https://docs.microsoft.com/en-us/power-bi/fundamentals/desktop-get-the-desktop
Microsoft. (s.f.). DA-100 Analyzing Data with Power BI.
Rad, R. (2020). Power BI Desktop Download or Microsoft Store App? Which One? Extraído de: https://radacad.com/power-bi-desktop-download-or-microsoft-store-app-which-one
Diferencia entre Power BI Desktop de Descarga Directa y Power BI de Microsoft Store by Pablo Sao Alonzo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.