122 - détection anomalie

Bonjour,

dans le module sur la détection d’anomalie, je ne comprends pas la construction de cette ligne de code :

frac = df[df["Class"] == -1]["Class"].count()/df["Class"].count()

Et en particulier, le deuxième [« class »] de la ligne. Je ne comprends pas à quoi il se « rattache ».
Bon, la ligne fonctionne, c’est pas ça, mais intuitivement je n’en comprends pas la construction.

Merci d’avance,

Bonjour Olivier,

Dans la variable frac on a stocké la proportion des outliers (Les lignes qui ont -1 comme classe ).

Donc la partie df[df["Class"] == -1]["Class"].count() filtre le DataFrame sur les lignes qui ont -1 dans "Class" et compte le nombre de lignes. Et la partie df["Class"].count() compte le nombre de lignes dans le DataFrame. A la fin on fait la fraction entre les deux pour avoir la proportion des outliers.

J’espère que cela répond à votre question.

Bonjour,

merci pour la réponse. En fait, je comprends bien le sens de cette fraction, mais c’est surtout la construction du code qui me pose problème.
J’aurais eu tendance à l’écrire comme ça :

frac = df[df["Class"] == -1].count()/df["Class"].count()

en enlevant donc ce fameux deuxième « [Class] » dans la ligne. Je ne comprends pas comment cette partie-là s’articule avec le reste de la ligne.

Parce que appliquer count() à un DataFrame vous donnera le nombre de valeurs (hors les Nan) pour chaque ligne, ou pour chaque colonne.
Alors que nous on s’intéresse juste à la colonne "Class".

Voici la documentation de count pour plus de détail : pandas.DataFrame.count — pandas 1.3.5 documentation

Ok, j’ai compris. parfait, merci beaucoup !!