0Pricing
Pandas & NumPy Academy · Lezione

Riassumere i risultati in un report

Raccolga gli insight principali in un riepilogo strutturato in Markdown, con riferimenti alle visualizzazioni incorporate e prossimi passi concreti.

Riassumere i risultati in un report è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Perché è importante un report EDA strutturato

I notebook Jupyter grezzi, con centinaia di grafici e celle di codice, sono difficili da condividere con gli stakeholder che devono agire sulla base dei risultati. Un report riepilogativo EDA distilla le informazioni più importanti emerse da tutta l'analisi univariata e bivariata in una narrazione chiara. I report ben strutturati distinguono i risultati (ciò che mostrano i dati) dalle implicazioni (che cosa fare al riguardo) e includono visualizzazioni di supporto solo per le affermazioni principali.

Le sei sezioni di un report EDA

Un report EDA professionale contiene in genere sei sezioni: 1) Panoramica del dataset (dimensioni, origine, periodo di riferimento), 2) Problemi di qualità dei dati (valori mancanti, outlier, duplicati e relativa gestione), 3) Distribuzioni delle variabili principali (le colonne numeriche e categoriche più importanti), 4) Correlazioni e associazioni (le relazioni con il valore assoluto più elevato), 5) Risultati sui sottogruppi (differenze tra gruppi rilevanti per la domanda di business) e 6) Prossimi passi consigliati (azioni di pulizia e suggerimenti per la modellazione).

Scrivere la sezione sulla panoramica del dataset

La sezione panoramica dovrebbe essere generata programmaticamente per garantire che sia sempre accurata. Rilevi le dimensioni, i nomi delle colonne e i dtypes, l'intervallo di date (se applicabile) e l'origine o la versione del dataset. Scrivere questa sezione nel codice anziché in prosa evita l'errore comune di descrivere in un report un dataset di 10.000 righe quando il report è stato in realtà generato da una versione ripulita di 9.800 righe.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('=== DATASET OVERVIEW ===')
print(f'Shape: {df.shape[0]:,} rows x {df.shape[1]} columns')
print(f'Columns: {", ".join(df.columns)}')
print(f'Numeric: {df.select_dtypes("number").shape[1]} columns')
print(f'Categorical: {df.select_dtypes("object").shape[1]} columns')
print(f'Boolean: {df.select_dtypes("bool").shape[1]} columns')
print(f'Total missing cells: {df.isna().sum().sum():,}')
print(f'Duplicate rows: {df.duplicated().sum()}')

Scrivere la sezione sulla qualità dei dati

La sezione sulla qualità dei dati elenca ogni problema individuato e la decisione presa per ciascuno di essi. Utilizzi una tabella con le colonne: Colonna, Problema, Gravità (Alta/Media/Bassa), Azione intrapresa. Calcoli questa tabella programmaticamente a partire dai risultati della profilazione, in modo che si aggiorni automaticamente quando cambiano i dati. La gravità dovrebbe riflettere l'impatto sul business: una variabile target mancante ha gravità Alta, mentre una colonna non predittiva con valori mancanti può avere gravità Bassa.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Auto-generate data quality table
missing_pct = (df.isna().sum() / len(df) * 100).round(1)
quality = missing_pct[missing_pct > 0].to_frame(name='missing_pct')
quality['severity'] = quality['missing_pct'].apply(
    lambda x: 'High' if x > 30 else ('Medium' if x > 10 else 'Low')
)
quality['action'] = quality['missing_pct'].apply(
    lambda x: 'Drop column' if x > 50 else 'Impute or flag'
)
print(quality.to_string())

Generare figure riepilogative a più pannelli

Una figura riepilogativa combina diversi grafici in un'unica immagine che può essere incorporata in un report. Utilizzi plt.subplots(rows, cols) per creare una griglia e assegni a ciascun risultato principale il proprio pannello. Salvi la figura con savefig() a una DPI appropriata per il formato di output (150 per lo schermo, 300 per la stampa). Dia a ogni pannello un titolo che esprima chiaramente il risultato, come 'La tariffa è fortemente asimmetrica a destra (skew=4.1)', anziché indicare soltanto il nome della colonna.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. Fare distribution
sns.histplot(df['fare'], kde=True, bins=30, ax=axes[0][0])
axes[0][0].set_title('Fare is right-skewed (skew=4.1)')

# 2. Survival by class
survival = df.groupby('class')['survived'].mean().reset_index()
sns.barplot(data=survival, x='class',
            y='survived', order=['First', 'Second', 'Third'], ax=axes[0][1])
axes[0][1].set_title('Survival Rate Drops by Class')

# 3. Age distribution
sns.histplot(df['age'].dropna(), kde=True, bins=25, ax=axes[1][0], color='coral')
axes[1][0].set_title('Age: Near-Normal, Missing 20%')

# 4. Embarkation counts
sns.countplot(data=df, x='embarked', ax=axes[1][1], palette='Set2')
axes[1][1].set_title('Most Boarded at Southampton')

plt.tight_layout()
plt.savefig('/tmp/eda_summary.png', dpi=150, bbox_inches='tight')
plt.show()
print('Saved: /tmp/eda_summary.png')

Scrivere i risultati come testo narrativo

Ogni risultato principale dovrebbe essere espresso come una frase rilevante per il business, non come una descrizione tecnica. Invece di scrivere 'La colonna fare ha skewness=4.1', scriva 'I prezzi dei biglietti presentano una forte asimmetria a destra: un numero ridotto di passeggeri di prima classe ha pagato più di 10 volte la tariffa mediana, il che potrebbe distorcere le analisi dei ricavi che utilizzano i prezzi medi.' È questa traduzione dall'osservazione statistica all'implicazione per il business a rendere i report EDA preziosi per gli stakeholder non tecnici.

Generare programmaticamente report Markdown

Può scrivere report EDA come file Markdown direttamente da Python. Costruisca una stringa contenente intestazioni Markdown, elenchi puntati e link a immagini incorporate, quindi la scriva in un file .md. Questo approccio crea report riproducibili che si aggiornano automaticamente quando cambiano i dati sottostanti, rendendoli adatti all'integrazione negli artefatti di output delle pipeline di dati o nei repository Git.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Build a simple markdown report
lines = [
    '# EDA Summary Report: Titanic Dataset',
    '',
    '## Overview',
    f'- **Rows:** {len(df):,}',
    f'- **Columns:** {df.shape[1]}',
    f'- **Total Missing Cells:** {df.isna().sum().sum():,}',
    '',
    '## Key Findings',
    '- First-class passengers had a 63% survival rate vs 24% for third class.',
    '- Fare is extremely right-skewed (skew=4.1); use log transform before modelling.',
    '- Age is missing in 20% of rows — median imputation recommended.',
    '',
    '## Recommended Next Steps',
    '1. Impute age with median grouped by class.',
    '2. Drop the cabin column (77% missing).',
    '3. Log-transform fare before any regression modelling.',
]

with open('/tmp/eda_report.md', 'w') as f:
    f.write('\n'.join(lines))

print('Report written to /tmp/eda_report.md')
print('\n'.join(lines[:10]))

Esportare in HTML con Jupyter

I notebook Jupyter possono essere esportati in HTML o PDF usando jupyter nbconvert --to html notebook.ipynb. In questo modo tutti i grafici, il codice e le celle Markdown vengono conservati in un unico file condivisibile, che può essere visualizzato senza installare Python. Per una pipeline completamente automatizzata, esegua il notebook programmaticamente con papermill: papermill input.ipynb output.ipynb -p date '2024-01-01', che parametrizza ed esegue il notebook come uno script.

# To export a Jupyter notebook to HTML:
# jupyter nbconvert --to html eda_notebook.ipynb

# To parameterise and run with papermill:
# pip install papermill
# papermill eda_template.ipynb eda_2024.ipynb -p date '2024-01-01' -p min_rows 1000

# The output notebook can then be exported:
# jupyter nbconvert --to html eda_2024.ipynb
print('Jupyter nbconvert and papermill automate report generation.')

Strutturare i prossimi passi operativi

La sezione prossimi passi consigliati è spesso quella più letta di un report EDA. La strutturi come una checklist con priorità: P1 (bloccanti): problemi che devono essere risolti prima che qualsiasi analisi sia valida (ad esempio dtypes identificati erroneamente); P2 (importanti): azioni di pulizia che influenzano significativamente le prestazioni del modello (ad esempio la gestione degli outlier); P3 (auspicabili): idee per arricchire i dati e ulteriori fonti da esplorare. Questa impostazione facilita l'assegnazione delle risorse in modo adeguato.

Usare pandas-profiling per creare report rapidamente

ydata-profiling (pip install ydata-profiling) genera un report HTML completo con una sola chiamata. Il report include statistiche riepilogative, distribuzioni delle variabili, correlazioni, schemi dei valori mancanti e rilevamento dei duplicati: tutte le sezioni di un report EDA manuale. Lo utilizzi per un'esplorazione rapida all'inizio di un progetto, quindi scriva un report riepilogativo personalizzato per evidenziare i risultati più rilevanti per la specifica domanda di business.

# pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic EDA')
# profile.to_file('titanic_eda.html')  # interactive HTML
# profile.to_notebook_iframe()          # inline in Jupyter

# Key sections in the generated report:
# - Overview: shape, missing, duplicates
# - Variables: per-column statistics and plots  
# - Correlations: Pearson, Spearman, Cramers V
# - Missing values: heatmap and dendrogram
# - Duplicates: full list of duplicate rows
print('ydata-profiling generates full EDA reports with one function call.')

Anti-pattern dei report EDA da evitare

Anti-pattern comuni nei report EDA: mostrare ogni grafico per ogni colonna (crea report di 50 pagine che nessuno legge: selezioni i 5-10 grafici più importanti), presentare fatti senza interpretarli ('age contiene 177 valori nulli': e quindi, che cosa dovremmo fare?), non aggiornare il report dopo la pulizia (ripulisca i dati, quindi ripeta la profilazione per confermare che i problemi siano stati risolti) e mescolare il codice di pulizia con l'analisi (mantenga la pulizia dei dati separata dalla narrazione EDA).

Verifica rapida

Verifichi la Sua comprensione della scrittura dei report EDA trattata in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato a strutturare i report EDA in sei sezioni (panoramica, qualità, distribuzioni, correlazioni, risultati sui sottogruppi, prossimi passi), a generare programmaticamente figure riepilogative a più pannelli e report Markdown e a tradurre i risultati statistici in un linguaggio rilevante per il business. Nella prossima lezione esploreremo tecniche avanzate di indicizzazione: creazione di MultiIndex e selezione gerarchica in Pandas.

Domande Frequenti

La lezione «Riassumere i risultati in un report» è gratuita?

Sì — il testo completo di «Riassumere i risultati in un report» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Riassumere i risultati in un report»?

Raccolga gli insight principali in un riepilogo strutturato in Markdown, con riferimenti alle visualizzazioni incorporate e prossimi passi concreti. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Riassumere i risultati in un report»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Checklist per il profiling di un dataset
  2. Analisi univariata
  3. Analisi bivariata e della correlazione
  4. Riassumere i risultati in un report
← Torna a Pandas & NumPy Academy