Skip to article frontmatterSkip to article content

Notions intervenant dans ce TP

N’oubliez pas d’utiliser le help en cas de problème.

tri et affichage

  1. importez les librairies numpy et pandas
# votre code
  1. importez la librairie matplotlib.pyplot avec le nom plt
# votre code
  1. lors de la lecture du fichier de données data/titanic.csv
    1. gardez uniquement les colonnes cols suivantes 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age' et 'Fare'

    2. mettez la colonne PassengerId comme index des lignes

    3. besoin d’aide ? faites pd.read_csv?

# votre code
  1. en utilisant la méthode df.plot()
    plottez la dataframe (pas la série) réduite à la colonne des ages
    utilisez le paramètre de style 'rv' (r pour rouge et v pour le style: points triangulaires)

    vous allez voir les points en vrac; dans la suite on va s’efforcer de les trier, pour mieux voir la distribution des âges dans la population concernée

# votre code
  1. pour commencer on va trier - i.e. mettre les lignes de la dataframe suivant l’ordre d’une colonne
    en utilisant la méthode df.sort_values():
    1. créez une nouvelle dataframe dont les lignes sont triées
      dans l’ordre croissant des 'Age' des passagers
    2. pour constater qu’elles sont triées, affichez les 4 premières lignes de la dataframe
      la colonne des Age est triée
      les lignes ont changé de place dans la table
    3. remarquez que l’indexation a été naturellement conservée
# votre code
    1. plottez la colonne des ages de la dataframe triée
      pour changer un peu on va mettre un style 'b.'
    2. Que constatez-vous ?
# votre code
    1. la logique de df.plot() consiste

      • à utiliser comme abscisses l’index de la dataframe
      • et accessoirement à faire autant de plots que de colonnes - ici on n’en a qu’une vous tracez donc le point (804,0.42)(804, 0.42) puis le point (756,0.67)(756, 0.67) ...
        alors que vous voudriez tracer le point (0,0.42)(0, 0.42) puis le point (1,0.67)(1, 0.67) ...
        c’est à dire: le fait d’utiliser le ‘PassengerId’ n’est pas bon, on voudrait que les abscisses soient les indices de lignes
    2. une solution: voyez la méthode reset_index() qui permet de transformer l’index en une colonne normale

    3. utiliser cette méthode et regardez ce que vous avex dans l’index ensuite

    4. plottez le résultat
      normalement à ce stade vous obtenez la visualisation qu’on cherche

# votre code

tri des lignes selon plusieurs critères

quand on trie, que faire en cas d’égalité ?
en général on choisit plusieurs critères, on trie selon le premier, puis en cas d’égalité selon le second, etc..

note: on appelle cela un ordre lexicographique, car c’est - un peu - comme dans un dictionnaire

  1. rechargez la dataframe
# votre code
  1. utilisez df.sort_values() pour trier la dataframe suivant la colonne ('Pclass')
    et trier les lignes identiques (passagers de même classe) suivant la colonne ('Age')
# votre code
  1. sélectionnez, dans la nouvelle dataframe, la sous-dataframe des gens dont les ages ne sont pas définis

hint: utiliser la méthode isna sur une série, pour créer un masque de booléens, et appliquer ce masque à la dataframe

# votre code
  1. combien nous manque-t-il d’ages ?
# votre code
  1. où sont placés ces passagers dans la data-frame globale triée ?
    • en début (voir avec head)
    • ou en fin (voir avec tail)
    • ou c’est plus compliqué que ça ?
# votre code
  1. trouvez le paramètre de sort_values()
    qui permet de mettre ces lignes en début de dataframe lors du tri
# votre code
  1. produire une nouvelle dataframe en ne gardant que les ages connus, et triée selon les ages, puis les prix de billet

tri d’une dataframe selon l’index

en utilisant df.sort_index() il est possible de trier une dataframe
dans l’axe de ses index de ligne (ou même de colonnes)

  1. reprenez la dataframe du Titanic, en choisissant toujours comme index PassengerId
    utilisez la méthode des dataframe sort_index pour la trier dans l’ordre des index
# votre code