Notions intervenant dans ce TP
- affichage des données par
plot
- tri de
pandas.DataFrame
par ligne, par colonne et par index
N’oubliez pas d’utiliser le help en cas de problème.
tri et affichage¶
- importez les librairies
numpy
etpandas
# votre code
- importez la librairie
matplotlib.pyplot
avec le nomplt
# votre code
- lors de la lecture du fichier de données
data/titanic.csv
gardez uniquement les colonnes
cols
suivantes'PassengerId'
,'Survived'
,'Pclass'
,'Name'
,'Sex'
,'Age'
et'Fare'
mettez la colonne
PassengerId
comme index des lignesbesoin d’aide ? faites
pd.read_csv?
# votre code
en utilisant la méthode
df.plot()
plottez la dataframe (pas la série) réduite à la colonne des ages
utilisez le paramètre destyle
'rv'
(r
pour rouge etv
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
- pour commencer on va trier - i.e. mettre les lignes de la dataframe suivant l’ordre d’une colonne
en utilisant la méthodedf.sort_values()
:- créez une nouvelle dataframe dont les lignes sont triées
dans l’ordre croissant des'Age'
des passagers - pour constater qu’elles sont triées, affichez les 4 premières lignes de la dataframe
la colonne desAge
est triée
les lignes ont changé de place dans la table - remarquez que l’indexation a été naturellement conservée
- créez une nouvelle dataframe dont les lignes sont triées
# votre code
- plottez la colonne des ages de la dataframe triée
pour changer un peu on va mettre un style'b.'
- Que constatez-vous ?
- plottez la colonne des ages de la dataframe triée
# votre code
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 puis le point ...
alors que vous voudriez tracer le point puis le point ...
c’est à dire: le fait d’utiliser le ‘PassengerId’ n’est pas bon, on voudrait que les abscisses soient les indices de lignes
une solution: voyez la méthode
reset_index()
qui permet de transformer l’index en une colonne normaleutiliser cette méthode et regardez ce que vous avex dans l’index ensuite
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
- rechargez la dataframe
# votre code
- 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
- 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
- combien nous manque-t-il d’ages ?
# votre code
- 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 ?
- en début (voir avec
hint
la façon standard d’afficher un dataframe consiste à montrer le début et la fin
il y a des situations, comme celle-ci, où on veut avoir une vision globale des données,
et pour cela le bon réflexe consiste à se ramener à un tableau numpy
pour cela voyez par exemple df.no_numpy()
# votre code
- trouvez le paramètre de
sort_values()
qui permet de mettre ces lignes en début de dataframe lors du tri
# votre code
- 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)
- reprenez la dataframe du Titanic, en choisissant toujours comme index
PassengerId
utilisez la méthode des dataframesort_index
pour la trier dans l’ordre des index
# votre code