Skip to content

Commit 862e9be

Browse files
xadupreCopilot
andauthored
plan (#91)
* plan * fix * g * fix links * Exclude 2026-03-15-route2026-ml article from rstcheck workflow Agent-Logs-Url: https://github.com/sdpython/teachpyx/sessions/b4dff7a8-91ba-4852-b367-711eaeed2027 Co-authored-by: xadupre <22452781+xadupre@users.noreply.github.com> * fix * Harden rstcheck workflow for empty file lists Agent-Logs-Url: https://github.com/sdpython/teachpyx/sessions/b4dff7a8-91ba-4852-b367-711eaeed2027 Co-authored-by: xadupre <22452781+xadupre@users.noreply.github.com> * fix * fix * fix --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: xadupre <22452781+xadupre@users.noreply.github.com>
1 parent 6b7266b commit 862e9be

12 files changed

Lines changed: 244 additions & 32 deletions

File tree

.github/workflows/rstcheck.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ jobs:
2424
run: python -m pip install sphinx tomli rstcheck[toml,sphinx]
2525

2626
- name: rstcheck
27-
run: rstcheck -r _doc teachpyx
27+
run: find _doc teachpyx -name "*.rst" ! -path "_doc/articles/2026/2026-03-15-route2026-ml.rst" -print0 | xargs -0 -r rstcheck

_doc/articles/2026/2026-03-15-route2026-ml.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. _l-feuille-route-2026:
22

33
=========================================
4-
2026-03-15 : feuille de route 2025 - mars
4+
2026-03-15 : feuille de route 2026 - mars
55
=========================================
66

77
site web : `sdpython.github.io <https://sdpython.github.io/>`_
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
.. _l-feuille-route-2026-2:
2+
3+
==========================================
4+
2026-04-13 : feuille de route 2026 - avril
5+
==========================================
6+
7+
site web : `sdpython.github.io <https://sdpython.github.io/>`_
8+
9+
`Apprendre la programmation avec Python
10+
<https://sdpython.github.io/doc/teachpyx/dev/>`_
11+
12+
Journée 1 (13/4) - Data Analyse
13+
===============================
14+
15+
L'Objectif de la journée : créer une base de données avec le résultat des élections municipales.
16+
17+
raccourci : https://github.com/sdpython/teachdata/tree/main/municipales
18+
19+
* quelques mots sur ChatGPT, Gemini, Claude, et la notion de vibe-coding
20+
* on code moins, on lit plus, mais il faut toujours comprendre le code
21+
* `Building Claude Code with Harness Engineering <https://levelup.gitconnected.com/building-claude-code-with-harness-engineering-d2e8c0da85f0>`_
22+
23+
Quelques modules :
24+
25+
* :epkg:`numpy`
26+
* :epkg:`pandas`
27+
* :epkg:`matplotlib`
28+
* :epkg:`seaborn`
29+
* :epkg:`statsmodels`
30+
* :epkg:`skrub`
31+
* :epkg:`scikit-learn`
32+
33+
**Exercices numpy**
34+
35+
* :ref:`Calcul matriciel avec numpy <nbl-c_data-nb_numpy>`
36+
* :ref:`numpy broadcast <nbl-c_data-numpy_broadcast>`
37+
* :ref:`Pivot de Gauss <nbl-practice-years-2023-pivot_gauss>`
38+
39+
**Exercices pandas**
40+
41+
* :ref:`l-example-serialization`
42+
* :ref:`l-example-plot-groupby`
43+
* :ref:`Manipulation de données avec pandas <nbl-c_data-nb_pandas>`
44+
* filter, groupby, jointure, pivot
45+
46+
**Quelques exercices pour plus d'agilité**
47+
48+
* que vaut ``1/2`` ? et ``1//2`` ?
49+
* retourner une liste (obtenir une liste dans l'autre sens)
50+
* calculer le nombre d'occurences des éléments d'une liste (histogrammes)
51+
* modifier un élément d'un tuple
52+
* retourner un dictionnaire : que fait-on des doublons ?
53+
* trouver le minimum dans un tableau
54+
* trier un tableau
55+
* transformer une liste en un dictionnaire et réciproquement
56+
* comment multiplier une chaîne de caractère ?
57+
* écrire une boucle ``for`` et la même avec une boucle ``while``
58+
* écrire un test
59+
* écrire une fonction qui vérifie si une chaîne de caractères est symétrique
60+
* écrire une fonction qui retourne une chaîne de caractères sans ses voyelles
61+
62+
*fonctions*
63+
64+
* fonction, paramètre par défaut
65+
* arguments positionnels, arguments nommés
66+
* écrire une fonction récursive
67+
* écrire une fonction qui calcule la suite de Fibonacci ?
68+
* écriture ``*args``, ``**kwargs`` ?
69+
* comment espionner une autre fonction ?
70+
71+
*graphes*
72+
73+
* comment représenter un graphe de type facebook à l'aide dictionnaires ?
74+
* compter le nombre d'amis en commun ?
75+
* compter le nombre moyen de connexions ?
76+
* comment obtenir la liste des membres du graphes ?
77+
78+
**Exercices plus longs**
79+
80+
* :ref:`Variables, boucles, tests <nbl-practice-tds-base-variable_boucle_tests>`
81+
* :ref:`Structures de données <nbl-practice-py-base-structures_donnees_conversion>`
82+
* :ref:`Tracer une pyramide bigarrée <nbl-practice-tds-base-pyramide_bigarree>`
83+
* :ref:`Recherche dichotomique <nbl-practice-py-base-recherche_dichotomique>`
84+
* :ref:`Tri plus rapide que prévu <nbl-practice-py-base-tri_nlnd>`
85+
* :ref:`l-exp-mathador`
86+
* :ref:`Un bref aperçu des classes <nbl-practice-py-base-classes_metro>`
87+
* :ref:`Prises aux dames <nbl-practice-py-base-dame_prise>`
88+
* :ref:`les itérateurs <nbl-practice-py-base-classe_iterateur>`
89+
* :ref:`Quelques programmes truffés d'erreurs <nbl-practice-exams-interro_rapide_20_minutes_2014_11>`
90+
91+
**Exercices plus costauds**
92+
93+
* `Lettres et encodages <https://sdpython.github.io/doc/teachpyx/dev/_downloads/032ccfaa7b99eb2a4b992aaa3bc48c34/td_note_2023-2024.pdf>`_
94+
* `Câblages électriques <https://sdpython.github.io/doc/teachpyx/dev/_downloads/8b77610717572d8d8899c825964056bb/td_note_2024.pdf>`_
95+
* `Dessin d'un arbre <https://sdpython.github.io/doc/teachpyx/dev/_downloads/538fb74f2b1a76ede9cb20e40bb4b8af/td_note_2022_rattrapage2.pdf>`_
96+
(`correction <https://sdpython.github.io/doc/teachpyx/dev/practice/exams/td_note_2022_rattrapage2.html>`_)
97+
98+
**PDF**
99+
100+
.. code-block:: python
101+
102+
from pypdf import PdfReader, PdfWriter
103+
from reportlab.pdfgen import canvas
104+
from reportlab.lib.pagesizes import letter
105+
106+
# ...
107+
108+
Journée 2 (14/4)
109+
================
110+
111+
**Partie 1**
112+
113+
* :ref:`exceptions`
114+
* :ref:`l-regex`, :ref:`Expressions régulières <nbl-practice-py-base-exercice_regex>`
115+
* :mod:`pickle`, fichiers pickle (voir :ref:`chap_serialization`)
116+
* récupération des fichiers préparés pour la formation avec pandas
117+
* utilisation de :epkg:`skrub`
118+
* première jointure
119+
120+
**Partie 2**
121+
122+
* introduction de :epkg:`scikit-learn`
123+
* valeurs manquantes, remplacement simple (moyenne),
124+
corrélations (:class:`sklearn.impute.KNNImputer`), prédictions
125+
(:class:`sklearn.impute.IterativeImputer`),
126+
(voir `sklearn.impute <https://scikit-learn.org/stable/api/sklearn.impute.html>`_)
127+
* premières impressions
128+
* exemples classique pour traiter, enrichir un jeux de données :
129+
`skrub tutorial <https://skrub-data.org/stable/auto_examples/00_getting_started.html>`_,
130+
voir aussi
131+
`AggJoiner on a credit fraud dataset <https://skrub-data.org/stable/auto_examples/08_join_aggregation.html>`_
132+
* :class:`sklearn.pipeline.Pipeline`, :class:`sklearn.compose.ColumnTransformer`,
133+
:class:`sklearn.pipeline.FeatureUnion`
134+
* Dates, Catégories : :epkg:`category_encoders`, :epkg:`skrub`,
135+
:ref:`Prétraitement des catégories <nbl-practice-ml-pretraitement_cat>`
136+
* Son : :epkg:`librosa`, voir :ref:`Prétraitement du son <nbl-practice-ml-pretraitement_son>`
137+
* Image : :epkg:`scikit-image`, voir :ref:`Prétraitement d'une image <nbl-practice-ml-pretraitement_image>`
138+
* Texte : :ref:`Prétraitement du texte <nbl-practice-ml-pretraitement_texte>`
139+
140+
Journée 3 (15/4)
141+
================
142+
143+
**programmation Avancé**
144+
145+
* notion de test unitaires
146+
* création de ses propres classes (estimateur scikit-learn)
147+
148+
Journée 4 (16/4)
149+
================
150+
151+
* `Créations d'établissements au niveau communal et supra communal par secteur d'activité (A10) et forme légale <https://catalogue-donnees.insee.fr/fr/explorateur/DS_SIDE_CREA_ETAB_COM>`_
152+
* `Communes et villes de France en CSV, Excel, Json, Parquet et Feather <https://www.data.gouv.fr/datasets/communes-et-villes-de-france-en-csv-excel-json-parquet-et-feather>`_
153+
* `Résultats du contrôle sanitaire de l'eau distribuée commune par commune <https://www.data.gouv.fr/datasets/resultats-du-controle-sanitaire-de-leau-distribuee-commune-par-commune>`_
154+
* `Balances comptables des communes en 2021 <https://www.data.gouv.fr/datasets/balances-comptables-des-communes-en-2021>`_
155+
156+
**Partie 1**
157+
158+
* retour sur les graphes :epkg:`matplotlib`, :epkg:`seaborn`, :epkg:`plotly`, :epkg:`skrub`
159+
* cartographie, :epkg:`cartopy`, :epkg:`folium`
160+
* jointure avec les meta données
161+
* tracer l'évolution temporelle d'une série agrégées
162+
* tracer des cartes avec le jeux de données proposés, on veut tracer une carte par an
163+
* carte avec :epkg:`folium`
164+
165+
**Partie 2**
166+
167+
* lecture itérative d'un jeux de données
168+
* utilisation de `polars <https://docs.pola.rs/>`_
169+
* manipulation complexes avec pandas,
170+
cubes de données avec pandas, passer un indice à droite (colonnes), à gauche (index),
171+
:ref:`Cube de données et pandas <nbl-c_data-nb_pandas_cube>`

_doc/articles/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Ou *blog*.
99
:caption: 2026
1010
:maxdepth: 1
1111

12+
2026/2026-04-13-route2026
1213
2026/2026-03-15-route2026-ml
1314

1415
.. toctree::

_doc/c_ml/regclass.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Classification et régression
88
Le site :epkg:`UCI` propose de nombreux jeux de
99
de données utilisés dans un but pédagogique.
1010
Parmi ceux-ci, on y trouve un jeu de données
11-
sur le vin, `Wine Data Set <https://archive.ics.uci.edu/ml/datasets/wine+quality>`_.
11+
sur le vin, `Wine Data Set <https://archive-beta.ics.uci.edu/dataset/186/wine+quality>`_.
1212
Pour ma part, j'ai goûté le vin assez tard, ne sachant véritablement
1313
l'apprécier qu'à la trentaine avérée. Je suis encore incapable de
1414
déchiffrer le vocabulaire qui sort de la bouche des experts
@@ -76,7 +76,7 @@ Les données
7676
+++++++++++
7777

7878
Le jeu de données peut être téléchargé depuis le site
79-
`Wine Quality Data Set <https://archive.ics.uci.edu/dataset/186/wine+quality>`_.
79+
`Wine Quality Data Set <https://archive-beta.ics.uci.edu/dataset/186/wine+quality>`_.
8080
Il peut être également obtenu avec le code suivant :
8181

8282
.. runpython::

_doc/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ def linkcode_resolve(domain, info):
431431
"recherche dichotomique": "https://fr.wikipedia.org/wiki/Recherche_dichotomique",
432432
"seaborn": "https://seaborn.pydata.org/",
433433
"transformers": "https://github.com/huggingface/transformers",
434-
"UCI": "https://archive.ics.uci.edu/datasets",
434+
"UCI": "https://archive-beta.ics.uci.edu/",
435435
"variable aléatoire": "https://fr.wikipedia.org/wiki/Variable_al%C3%A9atoire",
436436
"voyageur de commerce": "https://fr.wikipedia.org/wiki/Probl%C3%A8me_du_voyageur_de_commerce",
437437
"xgboost": "https://xgboost.readthedocs.io/en/stable/",

_doc/examples/ml/plot_template_data.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,7 @@ def make_pipeline(table, cible):
105105
if num_cols:
106106
transformers.append(("num", StandardScaler(), num_cols))
107107
if cat_cols:
108-
transformers.append(
109-
("cats", OneHotEncoder(handle_unknown="ignore"), cat_cols)
110-
)
108+
transformers.append(("cats", OneHotEncoder(handle_unknown="ignore"), cat_cols))
111109

112110
model = Pipeline(
113111
[

_doc/practice/ml/pretraitement_image.ipynb

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
},
2121
{
2222
"cell_type": "code",
23-
"execution_count": 11,
23+
"execution_count": 1,
2424
"metadata": {},
2525
"outputs": [
2626
{
@@ -29,7 +29,7 @@
2929
"(dtype('uint8'), (583, 800, 3))"
3030
]
3131
},
32-
"execution_count": 11,
32+
"execution_count": 1,
3333
"metadata": {},
3434
"output_type": "execute_result"
3535
}
@@ -52,7 +52,7 @@
5252
},
5353
{
5454
"cell_type": "code",
55-
"execution_count": 12,
55+
"execution_count": 2,
5656
"metadata": {},
5757
"outputs": [
5858
{
@@ -63,7 +63,7 @@
6363
"<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=800x583>"
6464
]
6565
},
66-
"execution_count": 12,
66+
"execution_count": 2,
6767
"metadata": {},
6868
"output_type": "execute_result"
6969
}
@@ -84,7 +84,7 @@
8484
},
8585
{
8686
"cell_type": "code",
87-
"execution_count": 13,
87+
"execution_count": 3,
8888
"metadata": {},
8989
"outputs": [
9090
{
@@ -138,13 +138,55 @@
138138
},
139139
{
140140
"cell_type": "code",
141-
"execution_count": 14,
141+
"execution_count": 4,
142142
"metadata": {},
143143
"outputs": [
144144
{
145145
"data": {
146146
"application/vnd.jupyter.widget-view+json": {
147-
"model_id": "8dcb7b36a38a436983c7b72c396dbe68",
147+
"model_id": "dc748720a2bb477cb4da52a810ac685e",
148+
"version_major": 2,
149+
"version_minor": 0
150+
},
151+
"text/plain": [
152+
"preprocessor_config.json: 0%| | 0.00/406 [00:00<?, ?B/s]"
153+
]
154+
},
155+
"metadata": {},
156+
"output_type": "display_data"
157+
},
158+
{
159+
"data": {
160+
"application/vnd.jupyter.widget-view+json": {
161+
"model_id": "746c1886d7714dfd831ca59f25b21b51",
162+
"version_major": 2,
163+
"version_minor": 0
164+
},
165+
"text/plain": [
166+
"config.json: 0.00B [00:00, ?B/s]"
167+
]
168+
},
169+
"metadata": {},
170+
"output_type": "display_data"
171+
},
172+
{
173+
"data": {
174+
"application/vnd.jupyter.widget-view+json": {
175+
"model_id": "a2b49cc5592149bc9fb85c8d34ab18c7",
176+
"version_major": 2,
177+
"version_minor": 0
178+
},
179+
"text/plain": [
180+
"model.safetensors: 0%| | 0.00/14.2M [00:00<?, ?B/s]"
181+
]
182+
},
183+
"metadata": {},
184+
"output_type": "display_data"
185+
},
186+
{
187+
"data": {
188+
"application/vnd.jupyter.widget-view+json": {
189+
"model_id": "5641a134f46541e1ba815042622279e9",
148190
"version_major": 2,
149191
"version_minor": 0
150192
},
@@ -159,14 +201,14 @@
159201
"name": "stderr",
160202
"output_type": "stream",
161203
"text": [
162-
"\u001b[1mMobileNetV2Model LOAD REPORT\u001b[0m from: google/mobilenet_v2_1.0_224\n",
204+
"[transformers] \u001b[1mMobileNetV2Model LOAD REPORT\u001b[0m from: google/mobilenet_v2_1.0_224\n",
163205
"Key | Status | | \n",
164206
"------------------+------------+--+-\n",
165207
"classifier.weight | UNEXPECTED | | \n",
166208
"classifier.bias | UNEXPECTED | | \n",
167209
"\n",
168-
"\u001b[3mNotes:\n",
169-
"- UNEXPECTED\u001b[3m\t:can be ignored when loading from different task/architecture; not ok if you expect identical arch.\u001b[0m\n"
210+
"Notes:\n",
211+
"- UNEXPECTED:\tcan be ignored when loading from different task/architecture; not ok if you expect identical arch.\n"
170212
]
171213
}
172214
],
@@ -188,7 +230,7 @@
188230
},
189231
{
190232
"cell_type": "code",
191-
"execution_count": 15,
233+
"execution_count": 5,
192234
"metadata": {},
193235
"outputs": [
194236
{

_doc/practice/years/2026/parcoursup_2026.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375397,4 +375397,4 @@
375397375397
},
375398375398
"nbformat": 4,
375399375399
"nbformat_minor": 2
375400-
}
375400+
}

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ sphinx-issues
4242
git+https://github.com/sdpython/sphinx-runpython.git
4343
statsmodels
4444
torch
45+
torchvision
4546
transformers
4647
ujson
4748
xarray

0 commit comments

Comments
 (0)