• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • JavaScript
  • Excel

Creación de tablas resumen en Python con Sidetable

diciembre 13, 2021 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

Sidetable es un complemento para Pandas con el que es posible crear fácilmente tablas resumen en Python de los conjuntos de datos. Lo que consigue mediante la combinación de funciones de tabulación cruzada y recuento de datos, simplificando muchos análisis habituales.

Instalación y conjunto de datos de ejemplo

El método más sencillo para instalar Sidetable en Python es usar el comando pip en la terminal. Así para instalar la librería solamente es necesario abrir la terminal y escribir el siguiente comando

pip install sidetable

Para ver el funcionamiento de Sidetable usare el conjunto de datos tips que se puede importar de la librería Seaborn. Un conjunto de datos que cuenta con 244 registros de facturas de restaurantes con la cantidad total de la cuenta, la propina y datos sobre los comensales. La importación y los primeros registros se pueden ver con el siguiente código.

import pandas as pd
import sidetable
from seaborn import load_dataset

tips = load_dataset("tips")

tips.head()
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Obtener la frecuencia de ocurrencia con Sidetable

Para este conjunto de datos puede ser interesante la frecuencia de ocurrencia en base al día de la semana. Algo que, gracias a haber importado Sidetable, se puede conseguir fácilmente con

tips.stb.freq(['day'])
    day  count    percent  cumulative_count  cumulative_percent
0   Sat     87  35.655738                87           35.655738
1   Sun     76  31.147541               163           66.803279
2  Thur     62  25.409836               225           92.213115
3   Fri     19   7.786885               244          100.000000

Nótese que ahora el objeto DataFrame cuenta con una nueva propiedad llamada stb dentro de la cual se pueden encontrar métodos para la creación de tablas resumen. En este caso se ha utilizado el método freq() para crear una tabla resumen de frecuencias en función del día de la semana, columna que se ha indicado mediante la lista de nombres. El resultado es una tabla ordenada de mayor a menor con el número de ocurrencias, el porcentaje, el número de ocurrencias y el porcentaje acumulados.

Publicidad


Por defecto la función freq() cuenta en número de ocurrencias, pero también se puede conseguir la suma de cualquier otra columna. Para esto es necesario pasar el nombre de la columna sobre la que se desea sumar en la propiedad value. Así los valores de facturación por día de la semana se pueden conseguir de la siguiente manera.

tips.stb.freq(['day'], value='total_bill')
    day  total_bill    percent  cumulative_total_bill  cumulative_percent
0   Sat     1778.40  36.836883                1778.40           36.836883
1   Sun     1627.16  33.704174                3405.56           70.541057
2  Thur     1096.33  22.708828                4501.89           93.249886
3   Fri      325.88   6.750114                4827.77          100.000000

Obtener la frecuencia en base a múltiples columnas

El método freq() admite análisis más complejos, en lugar de una única columna se pueden indicar varias, obteniéndose de este modo la frecuencia para todas la indicadas. Por ejemplo, se pueden combinar el día de la semana con el género de los comensales.

tips.stb.freq(['day','sex'])
    day     sex  count    percent  cumulative_count  cumulative_percent
0   Sat    Male     59  24.180328                59           24.180328
1   Sun    Male     58  23.770492               117           47.950820
2  Thur  Female     32  13.114754               149           61.065574
3  Thur    Male     30  12.295082               179           73.360656
4   Sat  Female     28  11.475410               207           84.836066
5   Sun  Female     18   7.377049               225           92.213115
6   Fri    Male     10   4.098361               235           96.311475
7   Fri  Female      9   3.688525               244          100.000000

En este caso también se pueden cambiar el conteo de ocurrencias por el sumatoria de otras columnas, como puede ser el caso de la factura total.

tips.stb.freq(['day', 'sex'], value='total_bill')
    day     sex  total_bill    percent  cumulative_total_bill  cumulative_percent
0   Sun    Male     1269.46  26.294956                1269.46           26.294956
1   Sat    Male     1227.35  25.422711                2496.81           51.717667
2  Thur    Male      561.44  11.629386                3058.25           63.347053
3   Sat  Female      551.05  11.414173                3609.30           74.761225
4  Thur  Female      534.89  11.079442                4144.19           85.840668
5   Sun  Female      357.70   7.409218                4501.89           93.249886
6   Fri    Male      198.57   4.113079                4700.46           97.362965
7   Fri  Female      127.31   2.637035                4827.77          100.000000

Una opción interesante para cuando existen demasiados valores diferentes es seleccionar únicamente los primeros registros que suman hasta un porcentaje. Para lo que se puede usar la propiedad thresh. Por ejemplo, se puede seleccionar únicamente los registros que suman el primer 70% de la factura. Selecciona de esta manera las categorías de datos más significativas.

tips.stb.freq(['day', 'sex'], value='total_bill', thresh=70)
      day     sex  total_bill    percent  cumulative_total_bill  cumulative_percent
0     Sun    Male     1269.46  26.294956                1269.46           26.294956
1     Sat    Male     1227.35  25.422711                2496.81           51.717667
2    Thur    Male      561.44  11.629386                3058.25           63.347053
3  others  others     1769.52  36.652947                4827.77          100.000000

Agrupando el resto de los valores en un fila a la que se denomina others.

Publicidad


Contar los registros de todas las columnas

Otra método de los que ofrece Sidetable es counts() con el que se puede obtener una tabla resumen con la frecuencia y otros valores de cada una de las columnas.

tips.stb.counts()
            count  unique most_freq  most_freq_count least_freq  least_freq_count
sex           244       2      Male              157     Female                87
smoker        244       2        No              151        Yes                93
time          244       2    Dinner              176      Lunch                68
day           244       4       Sat               87        Fri                19
size          244       6         2              156          6                 4
tip           244     123         2               33       1.01                 1
total_bill    244     229     13.42                3      17.82                 1

En el caso de que únicamente sea de interés las variables de algún tipo existe la opción de excluir valores con exclude. Por ejemplo, se puede excluir los valores categóricos con

tips.stb.counts(exclude='category')
            count  unique  most_freq  most_freq_count  least_freq  least_freq_count
size          244       6       2.00              156        6.00                 4
tip           244     123       2.00               33        1.01                 1
total_bill    244     229      13.42                3       17.82                 1

Valores faltantes o nulos

Sidetable también cuenta con un método para contar el número de valores faltantes o nulos. Lo que se puede obtener con el método missing. El conjunto de datos tips no cuenta con este tipo de valores, por lo que este método es mejor evaluarlo con otro conjunto como planets.

planets = load_dataset("planets")
planets.stb.missing()
                missing  total    percent
mass                522   1035  50.434783
distance            227   1035  21.932367
orbital_period       43   1035   4.154589
method                0   1035   0.000000
number                0   1035   0.000000
year                  0   1035   0.000000

Obteniendo como resultado una tabla en la que están ordenadas de mayor a menor las columnas que cuentan con más valores faltantes. Información que puede ser necesaria para saber si es necesario imputar o no los valores faltantes.

Subtotales

Al resumir los valores en base a dos variables muchas veces es interesante contar con los valores agregados en base a cada una. Por ejemplo, si se tiene el total de facturación por día y género posible que nos interese el subtotal por día. Valores que los métodos de Pandas no ofrecen. En estas situaciones se puede usar el método subtotal() de Sidetable para completar las tablas con esta información.

Publicidad


tips[['day', 'sex', 'total_bill']].groupby(['day', 'sex']).sum().stb.subtotal()
                             total_bill
day         sex                        
Thur        Male                 561.44
            Female               534.89
            Thur - subtotal     1096.33
Fri         Male                 198.57
            Female               127.31
            Fri - subtotal       325.88
Sat         Male                1227.35
            Female               551.05
            Sat - subtotal      1778.40
Sun         Male                1269.46
            Female               357.70
            Sun - subtotal      1627.16
grand_total                     4827.77

Conclusiones

En esta ocasión se ha visto las opciones que ofrece Sidetable para la creación de tablas resumen en Python. Una librería que sea de utilidad para el trabajo diario con Pandas, facilitando la creación de muchos de los resúmenes habituales.

Imagen de Goumbik en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 3.5 / 5. Votos emitidos: 2

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Convertir un Notebook en un archivo de Python
    Convertir un Notebook en un archivo de Python
  • Jupyter Notebooks en Visual Studio Code
    Jupyter Notebooks en Visual Studio Code
  • Análisis de sentimientos en español con spaCy en Python
    Análisis de sentimientos en español con spaCy en Python
  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares
    Gráficos de correlación en Seaborn: Mapas de calor y…
  • Tablas dinámicas en Python con pandas
    Tablas dinámicas en Python con pandas
  • Extensiones de Jupyter Notebook para facilitar las tareas de codificación
    Extensiones de Jupyter Notebook para facilitar las tareas de…

Publicado en: Python Etiquetado como: Pandas

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Publicidad




Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Facebook
  • GitHub
  • Instagram
  • Pinterest
  • RSS
  • Twitter
  • Tumblr
  • YouTube

Publicidad

Entradas recientes

El método de Hare-Niemeyer y su implementación en Python

septiembre 29, 2023 Por Daniel Rodríguez

Redimensionar una partición de disco LVM con espacio no asignado en Linux

septiembre 27, 2023 Por Daniel Rodríguez

¿Cómo saber la versión de Pandas o cualquier otra librería en Python?

septiembre 25, 2023 Por Daniel Rodríguez

Publicidad

Es tendencia

  • ¿Cómo cambiar el nombre de las columnas en Pandas? publicado el mayo 6, 2019 | en Python
  • Seleccionar filas y columnas en Pandas con iloc y loc publicado el junio 21, 2019 | en Python
  • ¿Cómo eliminar columnas y filas en un dataframe pandas? publicado el marzo 25, 2019 | en Python
  • Archivos Guardar y leer archivos CSV con Python publicado el junio 15, 2018 | en Python
  • pandas Pandas: Cómo iterar sobre las filas de un DataFrame en Pandas publicado el septiembre 13, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (22)

Seleccionar filas y columnas en Pandas con iloc y loc

4.7 (12)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.6 (15)

Archivos JSON con Python: lectura y escritura

4.5 (10)

Diferencias entre var y let en JavaScript

4.3 (12)

Ordenación de diccionarios en Python mediante clave o valor

Publicidad

Comentarios recientes

  • Daniel Rodríguez en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • Miguel en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • alberto en Resolver problema de credenciales en Bitbucket
  • Pablo en Aplicar el método D’Hondt en Excel
  • Agapito en Creación de un EXE desde un archivo Python en Windows

Publicidad

Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2023 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto