Les variables catégorielles

Dans cette présentation, nous utiliserons notre jeu de données sur les courses hippiques.

#Import de nos librairies
import pandas as pd

import matplotlib.pyplot as plt

# Chargement de notre jeu de données
data = pd.read_csv('../exportfeature.csv',parse_dates=['date'],infer_datetime_format=True,dayfirst=True,sep=";",encoding='ANSI')

data.head()
machine learning course hippique
# regardons les valeurs de la variable Hippodrome

data['Hippodrome'].unique()
On a la liste de tous les hippodromes présents dans notre jeu de test

array(['Vincennes', 'Wolvega', 'Argentan', 'Toulouse', 'Cagnes-sur-Mer',
       'Mons', 'Cagnes', 'Cordemais', 'Marseille', 'Geelong',
       'Marseille-Vivaux', 'Gelsenkirchen', 'Son Pardo  Majorque',
       'Nantes', 'Lyon', 'Lyon-La Soie', 'Son Pardo', 'Agen',
       'Vienne Krieau', 'Saint', 'Saint-Galmier', 'Bordeaux',
       'Bordeaux  Le Bouscat', 'Mauquenchy', 'Châteaubriant', 'Kuurne',
       'Angers', 'Grenade-sur-Garonne', 'Graignes', 'Laval', 'Vire',
       'Enghien', 'Le Croisé-Laroche', 'Berlin-Mariendorf', 'Avenches',
       'Le Croisé', 'Pontchâteau', 'Chartres', 'Caen', 'Amiens',
       'Munich-Daglfing', 'Machecoul', 'Lyon-Parilly', 'Lisieux',
       'Hyères', 'Fougères', 'Reims', 'Castillonnès', 'Cherbourg',
       'Marseille-Borély', 'Maure', 'Maure-de-Bretagne',
       'Ebreichsdorf (Magna Racino)', 'La Capelle', 'Beaumont', 'Tours',
       'Beaumont-de-Lomagne', 'Tours-Chambray', 'Nort-sur-Erdre',
       'Le Mans', 'Tongres', 'Chatillon', 'Strasbourg',
       'Chatillon-sur-Chalaronne', 'Challans', 'Meslay',
       'Meslay-du-Maine', 'Cavaillon', 'Saint-Malo', 'Rambouillet',
       'Oraison', 'Aby', 'Alençon', 'Cholet', 'Montluçon', 'Nîmes',
       'Vitré', 'Avignon', 'Charlottenlund', 'Paray-le-Monial',
       'Montauban', 'Vichy', 'Laon', 'Villeneuve-sur-Lot', 'Solvalla',
       'Vannes', 'Nancy', 'La Roche', 'La Roche-Posay', 'Frauenfeld',
       'Lignières', 'Saint-Brieuc', 'Chatelaillon',
       'Chatelaillon-La Rochelle', 'Feurs', 'Ostersund', 'Erbray',
       'Marsa', 'Bjerke', 'Kouvola', 'Boden', 'Arras', 'Segré',
       'Duindigt', 'La Gacilly', 'Agon-Coutainville', 'Sablé-sur-Sarthe',
       'Cabourg', 'Pornichet', 'Biarritz', 'Jarlsberg', 'Eauze', 'Arjang',
       'Royan-la Palmyre', 'Mikkeli', 'Clairefontaine',
       'Les Sables-d&#039Olonne', 'Bernay', 'L&#039Isle-sur-La Sorgue',
       'Jägersro', 'Le Touquet', 'Aix-les-Bains', 'Saint-Jean-de-Monts',
       'Carpentras', 'Bréhal', 'Vittel', 'Auch', 'Dieppe',
       'Langon-Libourne', 'Villeréal', 'Zonza', 'Le Mont-Saint-Michel',
       'Craon', 'Montier-en-Der', 'Divonne-les-Bains', 'Bergsaker',
       'Carentan', 'Waregem', 'Ajaccio', 'Baden', 'Ecommoy', 'Angoulême',
       'Salon-de-Provence', 'Castera-Verduzan', 'Eskilstuna', 'Ballarat',
       'Melton', 'Loudéac', 'Vermo', 'Hambourg Bahrenfeld', 'Niort',
       'Dundalk', 'Saint-Omer', 'Montluçon-Néris-les-Bains', 'Straubing',
       'Ostende', 'Dielsdorf', 'Landivisiau', 'Prunelli-di-Fiumorbo',
       'Dinslaken', 'Yonkers-New York', 'Kilmore', 'Saint-Moritz',
       'Hambourg Horn', '(Q+ du mardi 25', 'Moenchengladbach', '<br',
       'lundi 02', '(R1C5) lundi 14', 'Singapour', 'Farjestad',
       'Halmstad', 'Axevalla', 'Gavle', 'Hagmyren', 'Mantorp', 'Orebro',
       'Bollnas', 'Romme', 'Umaker', 'Dannero', 'Rattvik', 'Vaggeryd',
       'Aalborg', 'Leangen', 'Biri', 'Skive', 'Bergen', 'Momarken',
       'Amal', 'Forus', 'Odense', 'Harstad', 'Visby', 'Skelleftea',
       'Kalmar', 'Meadowlands', '(Gr.II) jeudi 12', '(R1C1)  Vendredi 04'],
      dtype=object)
# On peut créer un graphique avec ces valeurs

fig = data['Hippodrome'].value_counts().plot.bar()
fig.set_title('Hippodrome')
fig.set_ylabel('Fréquence')
machine learning hippodrome

Ce n’est pas très parlant comme graphique car il y a beaucoup trop d’hippodromes.

On va  créer un nouveau graphique avec les 10 premiers hippodromes.

# Les 10 fréquences les plus élevées
data['Hippodrome'].value_counts().sort_values(ascending=False)[:10].plot(kind='bar')
machine learning hippodrome frequents

De suite, c’est beaucoup mieux. On voit  que l’hippodrome de Vincenne est sur représenté par rapport aux autres hippodromes. Si à la fin de notre analyse on utilise la variable hippodrome, il faudra garder cela à l’esprit en encodant correctement cette variable.

# On peut afficher les différentes fréquences

data['Hippodrome'].value_counts()
Vincennes         3834
Cagnes-sur-Mer    1110
Enghien            948
Mons               916
Avenches           721
                  ... 
Tours                1
Saint-Moritz         1
lundi 02             1
Kilmore              1
Montluçon            1
Name: Hippodrome, Length: 199, dtype: int64
# dans notre jeu de données les variables concernant la musique sont de type catégorielle

# Regardons les valeurs de cette variable
data['M1'].unique()
array(['3a', '1a', 'Da', '8a', '2a', '9a', '4a', '5a', '10a', 'Aa', 'Dm',
       '13a', '7a', '6m', '11a', '6a', '2Da', '0a', '1Disqa', '10m', '3m',
       '3Da', '14a', '5m', '4Dista', '1m', '1Dista', '2Dm', '4Da', '15a',
       '1Da', '10Dista', '3Dista', '5Da', '4m', '6Da', '12a', '0m', '2m',
       '7Da', '8m', '2Dista', 'Rpa', '9m', '7m', '4Disqa', 'Dista',
       '7Dista', '4Distm', '2Dpga', '6Dista', '5Dista', '1Dpga', '1Dm',
       'Am', 'Ta', '16a', '17a', '8Dista', '2Disqa', 'Dpga', '12m', '3Dm',
       '11m', '3Dpga', '9Da', '8Dm'], dtype=object)

On peut se demander quelles sont les valeurs les plus représentées.  On va afficher un graphiques avec les 10 valeurs les plus communes de cette variable M1

# Les 10 fréquence les plus élevées
data['M1'].value_counts().sort_values(ascending=False)[:10].plot(kind='bar')
machine learning musiques frequents

Enfin, regardons une variable qui est numérique. La variable id.
Mais ses chiffres n’ont pas de réelle signification. Leurs valeurs sont plus des « étiquettes » que des chiffres réels. Chaque identifiant représente un cheval. Ce numéro est attribué pour identifier le cheval si nécessaire, tout en préservant la confidentialité et en assurant la protection des données. Quoique je ne sais pas si les chevaux rentre dans le cadre de la RGPD ;=)

data['id'].head()
0    56005
1    98833
2    98834
3    98835
4    98836
Name: id, dtype: int64
Il peut être interessant de voir combien il y a de chevaux uniques.

len(data['id'].unique())
20504  Chevaux uniques

Si vous voulez découvrir comment fonctionne la librairie pandas ou bien l’environnement Jupyter, n’hésitez pas à consulter les cours ci-dessous.

GCH anime

Je télécharge mon guide gratuit

Vous recevrez votre guide par email sans aucun engagement de votre part.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.