Quelques exercices de rappels pour se remettre en selle

Un chapitre consacré à divers exercices pour réviser les principes de base de la syntaxe Python et des objets utilisés par le langage.

Auteur·rice

Lino Galiana

Date de publication

2025-12-26

Pandas et Numpy, les premiers packages de notre parcours initiatique, sont essentiels pour manipuler les données. Néanmoins, il est nécessaire de ne pas faire l’impasse sur les fondements du langage Python lorsqu’on découvre ce langage. Une bonne compréhension des éléments structurants du langage permet de mieux comprendre la logique des packages de data science, de mieux comprendre les erreurs rencontrées et entraîne une plus grande productivité et liberté.

Pour découvrir les objets de base et la structure du langage, une série de notebooks est mise à disposition ci-dessous. Le parcours est à la carte, vous pouvez faire ces notebooks dans le désordre ou n’en faire qu’une partie si vous avez de bons souvenirs sur le contenu couvert par certains.

Après avoir révisé, des exercices de synthèse sont là pour mettre en oeuvre, en pratique, les éléments sur les structures de données. Après avoir fait ceux-ci, la suite du parcours se trouve dans la partie “Manipuler les données”.

1 Notebooks de révision

2 Exercices de synthèse

Pour vérifier que vous êtes au point sur les structures de données et les opérations adéquates en Python pour différents problèmes, voici une série d’exercice.

Ils demandent de se creuser un peu la tête sur la structure adéquate des données pour y répondre, c’est normal !

Une fois n’est pas coutume, les exercices se font directement sur cette page plutôt que par le biais de notebooks1. La correction sera prochainement dans la page dédiée.

2.1 Exercice 1

AstuceExercice 1

Vous disposez d’une liste de citations issues d’oeuvres littéraires de notre magnifique patrimoine littéraire :

Voir la liste de citations qui seront utiles
Citation Auteur
“Rien ne sert de courir ; il faut partir à point.” La Fontaine
“Selon que vous serez puissant ou misérable, les jugements de cour vous rendront blanc ou noir.” La Fontaine
“Heureux qui comme Ulysse a fait bon voyage” Du Bellay
“L’homme est né libre, et partout il est dans les fers.” Rousseau
“Parce que c’était lui, parce que c’était moi.” Montaigne
“La première fois qu’Aurélien vit Bérénice, il la trouva franchement laide” Aragon
“Aujourd’hui maman est morte. Ou peut-être hier, je ne sais pas.” Camus

Créer un objet citations qui utilise une structure de données adéquate en Python pour:

  1. Pouvoir facilement retrouver toutes les citations associées à un auteur. Créer un objet citation_aragon qui teste la validité de votre approche avec l’exemple d’Aragon.
  2. Pour chaque citation, compter le nombre de mots et le nombre de mots uniques. Créer un objet stats_phrases qui liste ces propriétés. Tester sur les citations de la Fontaine.

Voici les citations, ici en vrac, pour pouvoir démarrer.

Dans cette cellule, créer la structure de données adéquates pour cet exercice.

NoteIndice 1

Quelle structure de données pourrait permettre d’avoir ce type de code ?

citations.get("La Fontaine")
NoteIndice 2

Quelle structure de données pourrait permettre d’avoir un objet ressemblant à

NoteIndice 3

Un dictionnaire pourrait vous aider. Si vous avez encore du mal à comprendre pourquoi et comment, retournez au notebook dédié ⬆️.

NoteHint 3

A dictionary may help. If you are still struggling to understand why and how, go back to the dedicated notebook ⬆️.

Pour la question 1, vous pouvez utiliser cette cellule.

Pour la question 2, vous pouvez utiliser cette cellule.

NoteIndice 1

Comment itérer sur les clés et valeurs de votre dict stats_phrases ?

NoteIndice 2

Adopter cette structure générale :

for auteur, liste_citations in citations.items():
    # do something

Comment avoir la longueur d’une phrase (suite de mots) et des mots uniques dans celle-ci ?

NoteIndice 3

Comment avoir la longueur d’une phrase (suite de mots) et des mots uniques dans celle-ci ?

  1. Une phrase (chaîne de caractères) peut être décomposée en mots (liste) avec la méthode split()
  2. Un set permet de dédoublonner une liste
NoteIndice 4

Vous devriez obtenir ce type de résultat:

AvertissementWarning

Idéalement, il faudrait faire attention à la ponctuation.

Mais nous n’avons pas encore appris comment faire des substitutions raffinées dans des chaînes de caractères, cela sera dans un prochain chapitre.

2.2 Exercice 2

Les advent of code sont d’excellents problèmes pratiques pour apprendre l’algorithmique. Avec un problème par jour de difficulté croissante entre le 1er décembre et le jour de Noël, on devient très vite à l’aise avec les nombreuses structures de données qu’offre Python.

Le prochain exercice propose de résoudre la première partie du jour 1 (année 2022) exclusivement avec du Python base.

AvertissementWarning

Il serait pertinent d’utiliser Numpy pour le prochain problème. Mais c’est l’objet du prochain chapitre de montrer la manière dont ce package simplifie les opérations numériques basiques.

Voici les objets dont nous aurons besoin pour cet exercice:

AstuceExercice 2

Cet exercice vise à vous guider pour résoudre le problème sur cette page (Advent of Code 2022, jour 1, première partie). Il va être nécessaire de trouver une structure de données plus adéquate que celle de départ.

  1. Lire la consigne
  2. En allant progressivement, essayez de retrouver sur l’exemple le volume de calories portées par chaque elfe.
  3. En déduire l’elfe portant le plus de calories. Vérifier que vous obtenez bien sur l’exemple les calories évoquées dans la consigne.
  4. Généraliser pour résoudre le problème

Vous pouvez dans cette cellule écrire votre code pour la question 2:

NoteIndice 1

Il va falloir itérer sur chaque valeur de elves_example: comment transformer la chaîne de caractère en objet plus maniable ?

NoteIndice 2

Attention au type d’objet que vous allez obtenir, n’oubliez pas de convertir dans un format numérique si vous désirez faire des opérations arithmétiques

NoteIndice 3

Vous devriez finir avec la liste

Vous pouvez dans cette cellule écrire votre code pour la question 3:

Pour finir, après avoir généralisé, vous devriez retrouver les valeurs suivantes:

Elf number 217 carries the most calories (72602 calories).

2.3 Exercice 3: les chaînes de caractères

Voici le type de motif final vers lequel vous désirez aboutir à la question 1 et 2.

On 17 March 2022, Nadia (34) reported an income of $33,333.33.
AstuceExercice 3
  1. A partir de la méthode format, essayez d’obtenir le résultat attendu.
  2. Faites de même avec les f-strings.
  3. Modifiez le message pour créer un revenu mensuel arrondi à 1 chiffre. Utiliser l’espace comme séparateur de milliers plutôt que le séparateur par défaut (la virgule).
  4. Voici un chemin fictif C:\Users\Nadia\Documents\cours\chapitre_03\notes.txt vers un fichier. Faire un print correctif de celui-ci.

Dans la première partie de cet exercice, vous devriez avoir ces résultats.

Question 1:
On 17 March 2022, Nadia (34) reported an income of $33,333.33.
Question 2:
On 17 March 2022, Nadia (34) reported an income of $33,333.33.
Question 3:
On 17 March 2022  Nadia (34) reported an income of $2 777.8.

Vous pouvez tester ci-dessous votre solution

Dans la deuxième partie de l’exercice, si vous utilisez le mauvais type de string, vous devriez avoir une erreur:

  Cell In[14], line 2
    chemin_bad = "C:\Users\Nadia\Documents\cours\chapitre_03\notes.txt"
                 ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

Les slashs posent souvent problème. Avec des raw strings vous ne devriez pas rencontrer ce problème:

File can be found here: C:\Users\Nadia\Documents\cours\chapitre_03\notes.txt

Informations additionnelles

Ce site a été construit automatiquement par le biais d’une action Github utilisant le logiciel de publication reproductible Quarto (version 1.8.26).

L’environnement utilisé pour obtenir les résultats est reproductible par le biais d’uv. Le fichier pyproject.toml utilisé pour construire cet environnement est disponible sur le dépôt linogaliana/python-datascientist

pyproject.toml
[project]
name = "python-datascientist"
version = "0.1.0"
description = "Source code for Lino Galiana's Python for data science course"
readme = "README.md"
requires-python = ">=3.13,<3.14"
dependencies = [
    "altair>=6.0.0",
    "black==24.8.0",
    "cartiflette",
    "contextily==1.6.2",
    "duckdb>=0.10.1",
    "folium>=0.19.6",
    "gdal!=3.11.1",
    "geoplot==0.5.1",
    "graphviz==0.20.3",
    "great-tables>=0.12.0",
    "gt-extras>=0.0.8",
    "ipykernel>=6.29.5",
    "jupyter>=1.1.1",
    "jupyter-cache==1.0.0",
    "kaleido==0.2.1",
    "langchain-community>=0.3.27",
    "loguru==0.7.3",
    "markdown>=3.8",
    "nbclient==0.10.0",
    "nbformat==5.10.4",
    "nltk>=3.9.1",
    "pip>=25.1.1",
    "plotly>=6.1.2",
    "plotnine>=0.15",
    "polars==1.8.2",
    "pyarrow>=17.0.0",
    "pynsee==0.1.8",
    "python-dotenv==1.0.1",
    "python-frontmatter>=1.1.0",
    "pywaffle==1.1.1",
    "requests>=2.32.3",
    "scikit-image==0.24.0",
    "scipy>=1.13.0",
    "selenium<4.39.0",
    "spacy>=3.8.4",
    "webdriver-manager==4.0.2",
    "wordcloud==1.9.3",
]

[tool.uv.sources]
cartiflette = { git = "https://github.com/inseefrlab/cartiflette" }
gdal = [
  { index = "gdal-wheels", marker = "sys_platform == 'linux'" },
  { index = "geospatial_wheels", marker = "sys_platform == 'win32'" },
]

[[tool.uv.index]]
name = "geospatial_wheels"
url = "https://nathanjmcdougall.github.io/geospatial-wheels-index/"
explicit = true

[[tool.uv.index]]
name = "gdal-wheels"
url = "https://gitlab.com/api/v4/projects/61637378/packages/pypi/simple"
explicit = true

[dependency-groups]
dev = [
    "nb-clean>=4.0.1",
]

Pour utiliser exactement le même environnement (version de Python et packages), se reporter à la documentation d’uv.

SHA Date Author Description
8cfd74d9 2025-12-26 13:57:40 Lino Galiana Adding fstring/rstring exercise (#671)
086116d6 2025-12-23 13:35:15 lgaliana Fix problem with script location
7b8b7f9b 2025-12-15 11:01:54 lgaliana Traduction anglaise
8e387110 2025-12-15 10:20:42 Lino Galiana Fix WASM build in GHA (#663)
02abcf02 2025-12-14 22:52:19 Lino Galiana Intro à Python: des exercices sur les structures de données (#662)
81837397 2025-09-26 15:13:01 lgaliana deployment url from vscode for intro notebooks
91431fa2 2025-06-09 17:08:00 Lino Galiana Improve homepage hero banner (#612)
dac49604 2024-08-29 15:07:49 linogaliana Change URL on edit on github button
f8b04136 2024-08-28 15:15:04 Lino Galiana Révision complète de la partie introductive (#549)
Retour au sommet

Notes de bas de page

  1. Il est possible d’exécuter du Python sur le navigateur grâce à son implémentation en WASM par le biais de Pyodide. Ce n’est pas une méthode recommandée quand on doit faire des calculs conséquents comme dans les prochains chapitres. Mais comme ici nous travaillons sur de petits exemples c’est assez pratique pour bénéficier de l’interactivité permise par le navigateur, notamment les aides en cas de blocage.↩︎

Citation

BibTeX
@book{galiana2025,
  author = {Galiana, Lino},
  title = {Python pour la data science},
  date = {2025},
  url = {https://pythonds.linogaliana.fr/},
  doi = {10.5281/zenodo.8229676},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Galiana, Lino. 2025. Python pour la data science. https://doi.org/10.5281/zenodo.8229676.