Analisi esplorativa su oltre 420.000 osservazioni per identificare trend continentali, pattern europei e anomalie nei dati sanitari.

Trasformare dati grezzi sul COVID-19 in insight strategici per:
- Analizzare trend di diffusione a livello continentale
- Confrontare l'impatto sanitario tra nazioni europee (Italia, Francia, Germania, Spagna)
- Identificare anomalie nei dati che compromettono l'affidabilità delle analisi
- Dimostrare competenze di Data Quality Assessment e pulizia dati complessi
Fonte: Our World in Data - COVID-19 Dataset
Caratteristiche:
- Osservazioni totali: 420.000+
- Periodo temporale: 2020-2023
- Granularità: Dati giornalieri per nazione
- Metriche principali:
new_cases: Nuovi casi confermatihosp_patients: Pazienti ospedalizzatiicu_patients: Pazienti in terapia intensivanew_deaths: Nuovi decessi
Sfide del dataset:
- Presenza di aggregazioni geografiche (World, Income groups) mescolate con dati nazionali
- Valori nulli strutturali in alcune nazioni
- Frequenza di registrazione variabile (giornaliera vs settimanale)
Problema: Il dataset includeva righe aggregate (es. "World", "High income") che distorcevano le analisi nazionali.
Soluzione:
# Filtraggio righe con continent valido (esclude aggregazioni)
df_clean = df[df['continent'].notna()]
# Risultato: da 420k a 400k osservazioni puntuali per nazioneProblema: Visualizzazione "a scalini" della curva contagi dovuta a registrazioni settimanali.
Soluzione:
# Rimozione date con valori nulli per ottenere trend lineare coerente
df_italy_2022 = df_italy_2022[df_italy_2022['new_cases'].notna()]Risultato: Curva smooth che mostra chiaramente i picchi stagionali.
Confronto: Italia, Francia, Germania, Spagna (2021-2022)
Metriche:
- Pazienti in terapia intensiva (
icu_patients) - Pazienti ospedalizzati (
hosp_patients)
Tools: Boxplot per variabilità, Bar Chart per confronto diretto.
Insight:
- Picco massimo: Gennaio 2022 (periodo Omicron)
- Discesa graduale fino a Estate 2022
- Ripresa autunnale contenuta
Insight:
- Italia: Stabilità maggiore (IQR ridotto)
- Germania: Alta variabilità (picchi improvvisi)
- Francia/Spagna: Pattern intermedio
Anomalia critica identificata:
# Check valori nulli Germania 2021 - hosp_patients
germany_2021_null = df_germany_2021['hosp_patients'].isna().sum()
# Risultato: 365/365 giorni (100%)Decisione:
❌ NO imputation (media, mediana, modelli predittivi)
✅ Documentazione trasparente: "Dati non disponibili - impossibile stimare con attendibilità"
- L'assenza totale di dati impedisce qualsiasi stima ragionevole
- Inventare valori compromette l'integrità dell'analisi
- Un Data Analyst deve saper dire "questo non posso calcolarlo"
-
Pulizia Dati:
- Riduzione rumore del 5% (filtraggio aggregazioni)
- Gestione corretta di valori nulli strutturali
-
Insight Sanitari:
- Italia mostra resilienza superiore nei reparti intensivi
- Germania ha maggiore volatilità (possibile sottoreporting?)
-
Data Quality:
- Identificazione e documentazione anomalia critica (Germania 2021)
- Approccio etico: trasparenza > completezza forzata
| Categoria | Tecnologia |
|---|---|
| Linguaggio | Python 3.10 |
| Data Manipulation | Pandas, NumPy |
| Visualizzazione | Matplotlib, Seaborn |
| Notebook | Jupyter Notebook |
| Version Control | Git, GitHub |
Simone Vitale
Data Analyst | Roma, Italia
Questo progetto è rilasciato sotto licenza MIT.
- Our World in Data per il dataset pubblico
- EPICODE Institute of Technology per il supporto formativo
- Community Python per documentazione e best practices