Skip to content

Fix(#17369): la conclusion de 1.3 Analyse de donnees avec pandas est ancree sur les sorties reelles - #22863

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/17369-conclusion-1-3
Oct 30, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/17369-conclusion-1-3

Conversation

@jsboige

@jsboige jsboige commented Oct 27, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-ai-01:CoursIA-2 — prev: MED/tooling #22861

Objet

La conclusion du carnet 1.3 — Analyse de données avec Pandas était un template générique, sans chiffre ni lien :

« Ce notebook a permis d'explorer les aspects essentiels de 1.3 analyse de données avec pandas. Les points clés : — Les concepts fondamentaux ont été présentés et illustrés — Les exercices proposent une mise en pratique progressive — Les résultats obtenus permettent de valider la compréhension. Pour aller plus loin : approfondir les aspects avancés du sujet et explorer les liens avec d'autres domaines. »

Trois défauts en un seul bloc : elle ne dit rien de ce que le carnet montre (aucun chiffre, aucune décision), elle ne pointe aucune suite (alors que la suite existe et que le README de la série la déclare déjà), et sa formulation est un template générique réutilisable tel quel dans n'importe quel carnet.

Ce que devient la conclusion

La nouvelle conclusion est écrite sur les sorties réellement produites — chaque chiffre a été vérifié cellule par cellule contre les outputs committés du carnet :

Ce qui est cité Sortie vérifiée Cellule
le filtre booléen col1 > 1 ne laisse passer que Bob et Charles col1 col2 Nom → Bob (2, 4), Charles (10, 30) 7
how=inner ne rend que les 2 appariements (clients 1 et 3) --- how=inner : 2 lignes --- → Alice 100, Charles 250 9
how=outer en rend 4 — la commande sans client connu et le client sans commande ne disparaissent que si on le décide --- how=outer : 4 lignes --- → Bob/NaN, NaN/75 9
isna().sum() : 2 trous dans note, 1 dans age nom 0 / note 2 / age 1 12
dropna ne garde que les 3 notes observées, moyenne 17,33 --- Strategie dropna : 3 lignes restantes --- note moyenne (dropna) = 17.33 12
fillna bouche avec la médiane 12,0, moyenne 15,20 note mediane 12.0 --- note moyenne (fillna) = 15.20 12
resample mensuel agrège les cinq transactions en 200, 200 puis 240 2024-01-31 200 / 2024-02-29 200 / 2024-03-31 240 15
read_csv ne rend Date en datetime64 qu'avec sep et parse_dates Date datetime64[us] / montant int64 17

Le geste durable est nommé (chaque choix — how, dropna ou fillna — se juge sur la statistique aval, pas sur la seule syntaxe), et le paragraphe relie explicitement le temps et le fichier réel à cette même discipline : to_datetime/resample d'un côté, read_csv de l'autre.

La « Suite logique » remplace le « Pour aller plus loin » générique et pointe la suite réelle, avec les liens relatifs vérifiés à l'existence dans cette même tête :

Nature de la modification

Markdown-only — une seule cellule modifiée (la cellule 30, ## Conclusion). Aucune cellule code n'est touchée : la ré-exécution n'est donc pas due au titre de C.2, et le carnet reste dans l'état exécuté de main.

Intégrité du carnet vérifiée à la tête exacte : 13 cellules code, 0 execution_count nul, 0 cellule sans outputs, 0 erreur.

Gardes rejouées

Garde Verdict
check_activity_leak.py --diff origin/main...HEAD [OK] aucun passage d'activite dense ajoute — rc=0
check_prose_quantitative_claims.py --diff origin/main...HEAD [OK] aucun compteur quantitatif en prose — rc=0
check_notebook_nav_chain.py --diff-base origin/main rc=0 (les orphan_entry listés portent sur la série SymbolicAI/Tweety, hors du diff de cette PR)
pre-commit (H.3, gitleaks, strips, syntaxe cellule) Passed

Portée de l'issue #17369

L'issue décrit aussi un défaut de numérotation d'exercices (1.2 en A/B/C) : il est déjà corrigé sur main — 1.2 et 1.3 ont tous deux des Exercices 1-6 propres ; ce PR ne touche pas à ce point. L'issue mentionne aussi un dossier 01-PythonForDataScience/ qui a été renommé (01-Python-For-Data-Science/) : le chemin visé est le bon aujourd'hui. Ce PR ne traite que le gap encore vrai — la conclusion.

See #17369

🤖 Generated with Claude Code

…ancree sur les sorties reelles

La conclusion du carnet 1.3 etait un template generique (« approfondir les
aspects avances du sujet et explorer les liens avec d'autres domaines »),
sans aucun chiffre ni lien vers la suite de la serie -- alors que la suite
existe (1.4 -> 1.6 -> Lab 1 -> 02-ML-Cours) et que le README de la serie
la declare deja.

La nouvelle conclusion est ecrite sur les sorties REELLEMENT produites par
le carnet (verifiees cellule par cellule contre les outputs committes) :

- filtre booleen `col1 > 1` : Bob et Charles (cellule 7)
- jointure `how=inner` : 2 appariements (clients 1 et 3) ; `how=outer` : 4
  lignes, la commande sans client connu et le client sans commande ne
  disparaissent que si on le decide (cellule 9)
- `isna().sum()` : 2 trous dans `note`, 1 dans `age` ; `dropna` garde les 3
  notes observees (moyenne 17,33), `fillna` bouche avec la mediane 12,0
  (moyenne 15,20) (cellule 12)
- `resample` mensuel : 200, 200 puis 240 sur les cinq transactions ;
  `read_csv` ne rend `Date` en `datetime64` qu'avec `sep` et `parse_dates`
  (cellules 15 et 17)

Le geste durable est nomme (chaque choix se juge sur la statistique aval),
puis la « Suite logique » pointe les carnets reels : 1.4, 1.6, le Lab 1 et
le socle 02-ML-Cours -- les trois cibles ont ete verifiees a l'existence
dans la meme tete.

Modification markdown-only (cellule 30) : aucune cellule code n'est touchee,
donc aucune re-execution n'est due au titre de C.2. Le carnet reste sain
(13 cellules code, 0 execution_count nul, 0 erreur).

Gardes : activity-leak OK, prose-counts OK, nav-chain rc=0.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM (vérifié: notebook base↔head extrait intégralement via contents API — 32 cellules avant/après, une seule cellule modifiée (n°30, Conclusion) ; chaque valeur chiffrée de la nouvelle conclusion recoupée dans les outputs committés ; les 3 liens relatifs résolvent au head)

[NanoClaw] structural review (protocole notebook v2, extraction ciblée) — CoursIA #22863 (3be8beff)

PR de redressement de la conclusion du notebook 1.3 (#17369) : +2/−6, 1 fichier, cellule markdown unique. Vérifié :

  • Structure intacte : 32 cellules base = 32 head, aucun déplacement ni suppression ; seule la cellule 30 (Conclusion) change. Le reste du notebook est byte-identique (comparaison mécanique des sources cellule par cellule).
  • L'ancienne conclusion était du texte générique dégradé (« Ce notebook a permis d explorer les aspects essentiels de 1.3… », apostrophes manquantes, aucun contenu spécifique) — sa replacement est justifié cellule par cellule, rien de la matière première n'est perdu (la cellule restait un résumé sans donnée propre).
  • Chaque affirmation de la nouvelle conclusion est ancrée dans les outputs committés (gate 4bis) : filtre col1 > 1 → Bob et Charles ✓ (cell. 7) ; inner = 2 appariements clients 1 et 3, outer = 4, la commande sans client (id 4) et le client sans commande (Bob) ✓ (cell. 9) ; isna().sum() = 2 trous dans note, 1 dans age ✓ (cell. 12) ; dropna → 3 notes, moyenne 17,33 ✓ ; fillna médiane 12,0 → moyenne 15,20 ✓ (cell. 12) ; resample mensuel = 200, 200 puis 240 sur les cinq transactions ✓ (cell. 15) ; read_csv rend Date en datetime64 (datetime64[us] dans l'output) via sep + parse_dates ✓ (cell. 17).
  • Les 3 liens de navigation de la « Suite logique » existent au head (sondés un à un via contents API) : 1.4-Visualisation, Lab1-PythonForDataScience, 02-ML-Cours/README.

Réserves : aucune bloquante. ℹ️ La conclusion écrit « datetime64 » où l'output exact est datetime64[us] — nom de famille correct, pas un défaut.

— NanoClaw (myia-ai-01)

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.0s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 13
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@jsboige

jsboige commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22863
head: 3be8bef
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ed1831d4d71f7183fbd919474c03e8358601ed21eef40bc5812ff2b23136f333
diff-files: 1
diff-additions: 2
diff-deletions: 6
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22863
organ-rc: 0
[/ADJOINT PREFLIGHT]

Verdict

python scripts/check_adjoint_prevalidation.py --derive-verdict 22863 rend READY (rc=0) a la
tete 3be8bef : b0 clear (aucun nit non leve), aucune jambe non verte sur la tete (93
check-runs replies en latest-wins), aucun thread inline non resolu.

Un point de forme que la lecture doit voir : le REST rend mergeable_state: unstable alors que la
tete ne porte aucun check non vert et aucun statut de commit (total_count: 0). Cet
unstable vient d'un rollup de statuts vide, pas d'un rouge. Consequence pratique : l'organe
merge_ready ecarte cette PR sur son etape 6 tant que le champ n'est pas clean ; le dossier est
donc valide et durable, mais le merge reste un geste manuel de ta part.

Ce que la PR change, mesure

Un seul fichier, une seule cellule, markdown-only. 1.3-Analyse_de_Donnees_avec_Pandas.ipynb,
+2/-6 : la cellule 30 (## Conclusion) remplace un template generique par une conclusion ecrite sur
les sorties du carnet, et remplace le « Pour aller plus loin » par une « Suite logique » a liens
relatifs.

Aucune cellule code touchee : le diff ne porte que des items de source de la cellule 30
(markdown). La re-execution n'est donc pas due au titre de C.2, et le carnet reste dans l'etat
execute de main.

Crible de fond — sept chiffres confrontes aux sorties commitees

La conclusion cite des valeurs ; je les ai cherchees dans les outputs de la tete, pas dans la
prose du body :

Chiffre affirme Sortie a la tete Present
how=inner rend 2 appariements --- how=inner : 2 lignes --- oui
how=outer en rend 4 --- how=outer : 4 lignes --- oui
dropna garde 3 notes, moyenne 17,33 note moyenne (dropna) = 17.33 oui
fillna avec la mediane 12,0, moyenne 15,20 note mediane 12.0 / note moyenne (fillna) = 15.20 oui
resample agrege en 200, 200 puis 240 2024-01-31 200 / 2024-02-29 200 / 2024-03-31 240 oui
read_csv rend Date en datetime64 Date datetime64[us] oui

Le troisieme chiffre du resample a d'abord ete lu absent par mon crible, a cause de
l'alignement en colonnes (2024-03-31 et 240 separes par plusieurs espaces). Relecture de la
cellule 15 : la valeur y est. Je le consigne parce qu'un motif trop strict fabrique un faux defaut.

Integrite du carnet a la tete

13 cellules de code, 0 execution_count nul, 0 cellule sans output, 0 erreur, 0
item de source joint (le defaut de lignes recollees qui rend le code commentaire). Aucun marqueur
de degradation (Traceback, fallback, Execution sautee, (aucune sortie), Aborting) dans les
sorties. Volume de sortie inchange entre la base et la tete (23 895 caracteres des deux cotes),
volume de source +1 246 caracteres : c'est exactement la signature d'un ajout de prose sans
re-execution.

Portee

Le diff est exactement le fichier annonce par le corps de la PR, sans fichier hors sujet, sans
harnais, sans donnee. Le corps declare lane myia-ai-01:CoursIA-2, distincte de la mienne.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approbation coordinateur à la tête exacte 3be8bef (1.3 Pandas : conclusion ancrée sur les sorties, #17369). Une seule cellule markdown change, la 30, et aucune cellule de code n'est touchée : l'exception C.2 s'applique. J'ai lu la nouvelle conclusion. Elle remplace un gabarit générique par les mesures du carnet : jointure inner à 2 appariements contre 4 en outer, 2 trous dans note, moyenne 17,33 après dropna contre 15,20 après fillna par la médiane. Dossier tiers du secrétaire à cette tête (c.6526109179), qui confronte ces chiffres aux sorties.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants