Datos categóricos con Pandas

Datos categóricos con Pandas

Los datos categóricos son un tipo común de datos que se encuentran en muchas aplicaciones de análisis de datos. Estos datos se caracterizan por tener un conjunto finito de valores posibles, y se utilizan a menudo para representar variables cualitativas o variables nominales. En esta publicación, exploraremos cómo trabajar con datos categóricos utilizando la librería Pandas de Python.

Vamos a usar este dataset https://www.kaggle.com/datasets/tayyarhussain/best-selling-video-games-of-all-time

import pandas as pd
df = pd.read_csv('./video_games.csv')
print(df.head())
print(df.dtypes)
   Rank                Title      Sales            Series     Platform(s)  \
0     1            Minecraft  238000000         Minecraft  Multi-platform   
1     2   Grand Theft Auto V  175000000  Grand Theft Auto  Multi-platform   
2     3          Tetris (EA)  100000000            Tetris  Multi-platform   
3     4           Wii Sports   82900000               Wii             Wii   
4     5  PUBG: Battlegrounds   75000000     PUBG Universe  Multi-platform   

  Initial release date      Developer(s)       Publisher(s)  
0    November 18, 2011    Mojang Studios  Xbox Game Studios  
1   September 17, 2013    Rockstar North     Rockstar Games  
2   September 12, 2006         EA Mobile    Electronic Arts  
3    November 19, 2006      Nintendo EAD           Nintendo  
4    December 20, 2017  PUBG Corporation   PUBG Corporation 
Rank                     int64
Title                   object
Sales                    int64
Series                  object
Platform(s)             object
Initial release date    object
Developer(s)            object
Publisher(s)            object
dtype: object

Para comenzar veremos cuáles son los datos con los que contamos y sus tipos en este caso vemos que la columna Platform(s) es de tipo string y vemos que hay valores que se repiten, esta columna es candidata a ser categórica, para verificarlo haremos lo siguiente.

df['Platform(s)'].value_counts()
Multi-platform             25
Wii                         6
Nintendo Switch             4
Nintendo DS                 4
Wii U / Switch              3
Game Boy / NES              1
Game Boy Color              1
NES                         1
Nintendo 3DS                1
Xbox 360                    1
Game Boy Advance            1
PlayStation 4 / Windows     1
PS3 / Xbox 360              1
Name: Platform(s), dtype: int64

Con esta tabla de frecuencias podemos ver que hay valores que se repiten multiples veces, ahora vamos a transformar la columna Platform(s) a tipo category .

df['Platform(s)'] = df['Platform(s)'].astype('category')
print(df.dtypes)
Rank                       int64
Title                     object
Sales                      int64
Series                    object
Platform(s)             category
Initial release date      object
Developer(s)              object
Publisher(s)              object
dtype: object

Ahora vemos que la columna Platform(s) es de tipo category , y te pregutaras que ventajas tiene hacer esto, una de las ventajas es el ahorro de memoria.

 df['Platform(s)'].nbytes
# antes 400
# despues 154

Como puedes ver hay un ahorro muy significativo de memoria, tambien los datos categoricos son muy utiles para hacer agrupaciones usando .groupby() . En este ejemplo veremos la suma de ventas por plataforma.

df.groupby('Platform(s)')['Sales'].sum().sort_values(ascending=False)
Platform(s)
Multi-platform             1283567095
Wii                         255560000
Nintendo Switch             122830000
Wii U / Switch              114800000
Nintendo DS                 103090000
Game Boy / NES               43000000
Game Boy Color               29490000
NES                          28300000
Nintendo 3DS                 25410000
Xbox 360                     24000000
Game Boy Advance             23280000
PS3 / Xbox 360               23000000
PlayStation 4 / Windows      23000000
Name: Sales, dtype: int64

Podemos hacer muchas operaciones más con datos categóricos como definir un valor de jerarquía a nuestros datos o renombrar nuestras categorías, pero lo veremos en una proxima publicación.