You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(mit-incidentalita): plateau 2013, indice di mortalità e stagionalità - #264
Arricchisce la pagina mit-incidentalita con tre letture che oggi mancano del tutto: il plateau della mortalità dal 2013, il calo dell'indice di mortalità (morti ogni 100 incidenti) e la stagionalità mensile (agosto come mese più letale). Tutti i numeri restano calcolati a build-time dal parquet: nessuna cifra scritta a mano, KPI e grafici si aggiornano da soli.
I contenuti derivano dall'analisi dataciviclab/dataciviclab#451 (README + notebook + figure) e vengono qui resi data-driven nella forma richiesta dallo standard delle pagine dataset.
Contesto collegato
Nessuna issue dedicata: nasce dalla richiesta di arricchire la pagina esistente dopo l'analisi #451. Nessun loader modificato, nessun dataset nuovo.
Cosa cambia
Miglioramento pagina dataset esistente (src/dataset/mit-incidentalita.md)
Nota sull'ambiente: npm run lint completo e npm run build non sono stati eseguiti in locale perché la macchina di sviluppo ha Node 19 e Python 3.9, mentre il repo richiede Node 20 e Python 3.12+ con lab-connectors (i loader usano sintassi 3.10+). Come validazione alternativa ho ricostruito l'esatto output del data loader leggendo il parquet clean da GCS (216 righe) ed eseguito le 22 celle JS della pagina in Node con il vero format-utils.js:
22 celle, 0 errori di sintassi, tutte le interpolazioni ${...} della prosa risolvono;
0 pattern di numeri hardcoded rilevati sul testo;
valori coerenti con l'analisi #451: morti −53%, indice di mortalità −33% (2,90 → 1,93), plateau −51 vittime dal 2013, 309 → 10 vite/anno, agosto 3,03 vs febbraio 2,06 (+47%), agosto 2º mese su 12 per numero di incidenti;
il blocco 1 regge al cambio anno del selettore (verificato su 2001: 6.455 incidenti mortali, indice 2,90; e 2012: 1,99).
Checklist PR
Perimetro stretto: una PR = un dataset
Motivazione della PR (nessuna issue collegata: arricchimento di pagina esistente su richiesta, contenuti dall'analisi #451)
Note per chi revisiona
const SOGLIA = 2013 è una costante editoriale (punto di svolta della serie), nello stesso spirito della soglia 2020 in entrate-stato.md. Se cambia il parquet, va rivista a mano: non è derivata dal dato.
Gli indici della pagina sono calcolati sul rapporto aggregato (morti/incidenti del periodo), non come media dei valori mensili pubblicati dalla fonte: è dichiarato nei Limiti e nella nota del dettaglio mensile.
La nota "Come leggerlo" sul 2012→2013 serve a evitare la lettura sbagliata: il salto dell'indice di mortalità è un effetto di composizione legato alla discontinuità nella rilevazione degli incidenti, non un peggioramento improvviso delle strade.
Il data loader src/data/mit-incidentalita.json.pynon è stato modificato: carica già incidenti_mortali, indice_gravita e indice_lesivita, sufficienti per i nuovi blocchi.
Lore222
changed the title
feat(mit-incidentalita): plateau 2013, indice di mortalita e stagionalita
feat(mit-incidentalita): plateau 2013, indice di mortalità e stagionalità
Sep 22, 2026
Ciao Lore, ho tirato il branch locale e revisionato. La PR è solida, narrative forte, dati tutti data-driven. Due fix tecnici:
1. domain: [0, null] rompe il rendering dei grafici
Righe 275 e 323 (sezioni 4 e 5): domain: [0, null] non è un valore valido per Observable Plot. L'unico file nel codebase che usa null come endpoint del dominio — tutti gli altri usano bound numerici espliciti ([0, 100], [0, 40], ecc.).
Fix: rimuovere domain: [0, null] e lasciare che Plot auto-scali l'asse Y.
- y: {grid: true, label: "morti ogni 100 incidenti", domain: [0, null]},+ y: {grid: true, label: "morti ogni 100 incidenti"},
2. Mesi ordinati alfabeticamente, non cronologicamente
I due grafici stagionali (bar chart morti medi + linea letalità) usano x: {label: null} — Plot ordina le stringhe alfabeticamente, risultato: Agosto, Aprile, Dicembre, Febbraio… La linea della letalità connette i punti in ordine sbagliato.
Fix: forzare il dominio cronologico con domain: stagionale.map(d => d.mese) (l'array è già ordinato per mese_numero).
Entrambi i fix applicati nel branch pr-264 — possono essere cherry-pickati o applicati a mano.
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sintesi
Arricchisce la pagina
mit-incidentalitacon tre letture che oggi mancano del tutto: il plateau della mortalità dal 2013, il calo dell'indice di mortalità (morti ogni 100 incidenti) e la stagionalità mensile (agosto come mese più letale). Tutti i numeri restano calcolati a build-time dal parquet: nessuna cifra scritta a mano, KPI e grafici si aggiornano da soli.I contenuti derivano dall'analisi
dataciviclab/dataciviclab#451(README + notebook + figure) e vengono qui resi data-driven nella forma richiesta dallo standard delle pagine dataset.Contesto collegato
Nessuna issue dedicata: nasce dalla richiesta di arricchire la pagina esistente dopo l'analisi #451. Nessun loader modificato, nessun dataset nuovo.
Cosa cambia
src/dataset/mit-incidentalita.md)Dettaglio dei blocchi
decimals: 2) + nuova serie annuale completaStandard check
toLocaleString— solonum(),numFix(),tableFormat()daformat-utils.jstableFormateInputs.tablein celle separateduckdb.connect()— il loader non è stato toccatoobservablehq.config.jsinvariato)data_driven: truerispettato: nessuna cifra hardcoded nella prosaVerifica
Nota sull'ambiente:
npm run lintcompleto enpm run buildnon sono stati eseguiti in locale perché la macchina di sviluppo ha Node 19 e Python 3.9, mentre il repo richiede Node 20 e Python 3.12+ conlab-connectors(i loader usano sintassi 3.10+). Come validazione alternativa ho ricostruito l'esatto output del data loader leggendo il parquet clean da GCS (216 righe) ed eseguito le 22 celle JS della pagina in Node con il veroformat-utils.js:${...}della prosa risolvono;Checklist PR
Note per chi revisiona
const SOGLIA = 2013è una costante editoriale (punto di svolta della serie), nello stesso spirito della soglia 2020 inentrate-stato.md. Se cambia il parquet, va rivista a mano: non è derivata dal dato.src/data/mit-incidentalita.json.pynon è stato modificato: carica giàincidenti_mortali,indice_gravitaeindice_lesivita, sufficienti per i nuovi blocchi.