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.