Quand les exercices font partie d’une série d’exercices, faites les dans l’ordre, ils se servent des précédents...*
mosaique (un peu de tout)¶
Importer numpy et pandas indiquer la version des bibliothèques
# votre code iciImporter pyplot de matplotlib et mettez les plots en mode notebook
# votre code ici[note importante]
avec le mode notebook, il est souvent utile de déclarer explicitement que la cellule va produire une figure avec
plt.figure() (ou autre fonction qui crée une figure ou des sous-figures)
sinon votre dessin va être inséré dans la dernière figure ouverte, souvent c’est plus haut dans le notebook...
# par exemple, faites
plt.figure()
# avant de faire
plt.plot(X, Y)
# ...Exercices sur la suite de Syracuse¶
La suite de Syracuse¶
pour chaque , on définit une suite de Syracuse par:
Les consignes¶
la suite s’arrête après le premier 1
lever une exception si le type de l’argument n’est pas valide (TypeError), pensez à utiliser
isinstancelever une exception si la valeur de l’argument n’est pas valide (ValueError)
pensez à mettre un message explicatif dans vos exceptions
mettez un docstring à la fonction
Implémentation de la suite de Syracuse¶
implémenter une fonction syracuse qui retourne la liste de la suite des nombres de Syracuse pour un donné sous les conditions précédentes
par exemple
>>> syracuse(10)
[10, 5, 16, 8, 4, 2, 1]Exécutions:
tester votre fonction dans les cas suivants (n vaut 0, “toto”, 4 et 27) en rattrapant les exceptions levées
# EXERCICE
def syracuse(n):
# votre code ici
pass# pour vérifier
syracuse(10) == [10, 5, 16, 8, 4, 2, 1]False# pour vérifier
try:
syracuse("toto")
except TypeError:
print("OK your code raises TypeError on a str")# pour vérifier
try:
syracuse(-12)
except ValueError:
print("OK your code raises TypeError on a str")Plotter la suite de Syracuse¶
[indications]:
attention les sous-figures sont appelées axis en matplotlib.pyplot
[rappels]:
une figure peut être composée de sous-figures
les sous-figures sont appelées des Axis (pensez toujours: axis = subfigure)
créer une figure globale de titre syracuse
créer six sous-figures en une grille de 2 lignes et 3 colonnes en plottant 6 suites de syracuse - par exemple pour les entrées 4, 8, 12, 5, 10 et 20
donner la même taille aux sous-figures
donner un titre aux sous-figures
inputs = (4, 8, 12, 5, 10, 20)# à vous
...EllipsisExercice: vectorization de fonctions¶
implémenter la fonction valeur absolue sans utiliser
numpy.absni aucune fonction numpy dans le corps de la fonctioncréer un
numpy.ndarraycontenant des flottants linéairement espacés entre -100 et 100appliquez votre fonction à ce tableau
quel problème constatez-vous ?
[indications]
si vous voulez que votre fonction ( puisse s’appliquer à des tableaux numpy
il faut la vectoriser en utilisant le décorateur
numpy.vectorize
# votre code ici
def abs (n):
# votre code ici
pass
# votre code ici
# x = ...
# abs(x)
# pensez à rattraper l'erreur3D plotting¶
implémentez en utilisant les opérateurs et fonctions numpy une fonction (dans le genre de)
plotter votre fonction en 3D
# votre code iciTravail sur des fichiers csv¶
[consigne]
ne pas utiliser de boucles python sur les tableaux csv
Lecture de fichiers csv¶
Lecture d’un (petit) csv sans noms de colonnes¶
créer une pandas.DataFrame df1 à partir du (petit) fichier
data/weight_height_no_names.csvil ne comporte pas de noms de colonnes
passer lui la liste des colonnes =[“genre”, “taille”, “poids”] à la création de la DataFrame
afficher la taille de la DataFrame
# à vous
df1 = ...df1Ellipsis# ceci doit afficher True
df1.shape == (7, 3)---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[13], line 2
1 # ceci doit afficher True
----> 2 df1.shape == (7, 3)
AttributeError: 'ellipsis' object has no attribute 'shape'Lecture d’un (petit) csv avec des lignes de commentaires mais sans noms de colonnes¶
créer une pandas.DataFrame df2 à partir du (petit) fichier
data/weight_height_no_comments.csvles valeurs sont séparées par des ‘;’
ce fichier comporte 3 lignes de commentaires
il ne comporte pas de noms de colonnes
mettez dans la DataFrame existante la liste de colonnes: [“Gender”, “Height”, “Weight”]
# le contenu du fichier
%cat data/weight_height_no_comments.csvce fichier comporte le genre, la taille et le poids
de personnes, se trouve sur kaggle dans la page
https://www.kaggle.com/mustafaali96
Male;71.6408051192206;213.741169489411
Male;64.7663291334055;167.127461073476
Male;69.2830700967204;189.446181386738
Male;69.2437322298112;186.434168021239
Male;67.6456197004212;172.186930058117
Male;72.4183166259878;196.028506330482
Male;63.974325721061;172.883470208780
Male;69.6400598997523;185.983957573130
Male;67.9360048540095;182.426648013226
# à vous
df2 = ...# ceci doit afficher True
(
df2.shape == (9, 3)
and df2.columns[0] == 'Gender'
)---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[16], line 3
1 # ceci doit afficher True
2 (
----> 3 df2.shape == (9, 3)
4 and df2.columns[0] == 'Gender'
5 )
AttributeError: 'ellipsis' object has no attribute 'shape'Lecture d’un (gros) fichier csv avec le nom des colonnes et sans commentaires¶
créer une pandas.DataFrame df à partir du (gros) fichier
data/weight_height.csvles valeurs sont séparées par des ‘;’
la première ligne comporte le nom des colonnes
cette DataFrame servira dans les fonctions suivantes
# votre code ici
df = ...df.head()---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[18], line 1
----> 1 df.head()
AttributeError: 'ellipsis' object has no attribute 'head'# ceci doit afficher True
(
df.shape == (10000, 3)
and df.columns[0] == 'Gender'
)---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[19], line 3
1 # ceci doit afficher True
2 (
----> 3 df.shape == (10000, 3)
4 and df.columns[0] == 'Gender'
5 )
AttributeError: 'ellipsis' object has no attribute 'shape'Informations générales sur une DataFrame¶
on veut en savoir plus sur cette DataFrame df précédente
affichez les types des colonnes
# à vousaffichez un résumé / des informations générales
# à vousManipulations des colonnes de la DataFrame¶
Conversions¶
convertissez les tailles de inches à mètres ()
convertissez les poids de pounds à kg ()
# votre code ici
# et n'hésitez pas à recharger le fichier
# pour partir d'un truc propre
...
# df.head()EllipsisAjout d’une colonne¶
calculer l’indice de masse corporelle
et rangez-le dans une colonneMass Indexde la DataFrame
# votre code ici n'hésitez pas à recharger le fichier
# pour partir d'un truc propre
df = ...df.head()---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[24], line 1
----> 1 df.head()
AttributeError: 'ellipsis' object has no attribute 'head'Catégorisation¶
ajouter une colonne “Gender-cat” dans laquelle le genre a été catégorisé (le type de la colonne doit être
category)en option, renommez les termes de cette catégorie en minuscules
maleetfemale
# votre code ici n'hésitez pas à recharger le fichier
# pour partir d'un truc propre
# df = ...df.head()---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[26], line 1
----> 1 df.head()
AttributeError: 'ellipsis' object has no attribute 'head'df.dtypes---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[27], line 1
----> 1 df.dtypes
AttributeError: 'ellipsis' object has no attribute 'dtypes'Calculs sur une colonne¶
compter le nombre de valeurs différentes dans la colonne “Gender”
# à vouscalculez la moyenne du poids
# à vouset l’écart-type de l’indice de masse corporelle
# à vousPlots de colonnes de la DataFrame¶
Les boxplots¶
tracer le boxplot de la colonne height
tracer le boxplot de la colonne weight
# à vousLes femmes par poids¶
tracer les tailles des femmes en fonction de leurs poids
# à vousTri de colonnes et plots¶
trier les tailles en ordre croissant et plotter les
# à vousplotter sur une même figure les tailles par genre
# à vousafficher en ordre croissant les personnes de plus de 180 cm
# à vousNaN¶
Lecture du csv¶
lisez le fichier
data/car_sales.csv(la première ligne contient le nom des colonnes)
# à vous de jouer
cars = ...cars.head(5)---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[37], line 1
----> 1 cars.head(5)
AttributeError: 'ellipsis' object has no attribute 'head'le nombre de lignes dans la dataframe
# votre codenombre de colonnes dans la dataframe
# à vousafficher les colonnes
# à vous de jouerafficher les lignes 10 à 14 inclusivement (on compte à partir de 1)
# à vous de jouerNombres de NaN¶
le nombre de NaN par colonne (sans boucle python)
# votre codele nombre de NaN par ligne
# à vous de jouerSuppression de NaN¶
supprimer les colonnes qui ont plus de 5 NaN
indices
la taille originale de notre dataframe est 157 lignes et 16 colonnes
voyez
pandas.dropnaça concerne une colonne
# votre code icisupprimer les lignes qui ont plus de 5 NaN
ça devrait concerner une ligne
# votre code icisupprimer les lignes qui ont au moins un NaN
# votre code icisupprimer les colonnes qui ont au moins un NaN
# votre code ici