Données catégorielles et discrétisation
Un type catégoriel représente un vocabulaire fini. Il peut réduire la mémoire utilisée, rendre explicites les valeurs autorisées et préserver un ordre significatif.
import pandas as pd
from pandas.api.types import CategoricalDtype
tasks = pd.DataFrame({"priority": ["high", "low", "urgent", None]})
priority_type = CategoricalDtype(
categories=["low", "medium", "high"],
ordered=True,
)
unknown = tasks["priority"].notna() & ~tasks["priority"].isin(priority_type.categories)
assert tasks.loc[unknown, "priority"].tolist() == ["urgent"]
tasks["priority"] = tasks["priority"].astype(priority_type)
Les catégories ordonnées permettent tris et comparaisons d'intervalle selon la séquence déclarée. Les catégories non ordonnées représentent l'appartenance sans prétendre qu'une catégorie en dépasse une autre.
Valider le vocabulaire
Les valeurs absentes des catégories déclarées deviennent manquantes lors de la conversion. Recherchez les valeurs inconnues avant ou immédiatement après la conversion, et distinguez une catégorie inconnue d'une observation réellement manquante.
Discrétiser les valeurs continues
ages = pd.DataFrame({"age": [-1, 0, 17, 18, 35, 65]})
ages["band"] = pd.cut(
ages["age"],
bins=[0, 18, 35, 65, float("inf")],
labels=["child", "young_adult", "adult", "senior"],
right=False,
)
ages["quartile"] = pd.qcut(ages["age"], q=4, duplicates="drop")
cututilise des bornes choisies selon le sens métier.qcututilise les quantiles de l'échantillon pour viser des classes de taille similaire.
Consignez la fermeture des intervalles et le traitement des bornes. La discrétisation perd de l'information et peut rendre discontinues de petites variations d'entrée ; conservez la valeur numérique d'origine.
Encoder pour les modèles
get_dummies crée des colonnes indicatrices, mais l'encodage doit faire partie du pipeline d'entraînement
et d'inférence lorsque les vocabulaires doivent rester identiques. N'inférez pas indépendamment les colonnes
de production pour chaque lot.
Bornes et codes de catégories
L’exemple détecte volontairement urgent avant conversion ; la Series convertie contient ensuite high, low, manquant, manquant. Déclarer le vocabulaire ne rejette pas automatiquement les lignes invalides. Les codes catégoriels sont des positions de stockage, avec -1 pour l’absence : ce ne sont pas des mesures et leur moyenne n’a pas de sens général. Le gain mémoire dépend de la répétition des valeurs.
Avec cut et right=False, les intervalles sont fermés à gauche, ouverts à droite : 0 donne child, 18 young_adult, 35 adult et 65 senior ; -1 devient manquant, hors des bornes. Une Series donne une Series catégorielle alignée ; une liste donne normalement un Categorical. qcut peut produire moins de quatre classes après suppression des bornes répétées. Les ex æquo empêchent parfois des classes de même effectif. Pour entraînement/test, récupérez les bornes d’entraînement avec retbins=True, puis réutilisez-les avec cut en décidant du traitement des futures valeurs hors limites.