Lezione 4
Lezione 4
Esempi ed approfondimenti di analisi dati e uso di STL

In questa lezione non ci sono esercizi da consegnare per l'esame. Vi proponiamo alcuni temi specifici che si possono affrontare con gli strumenti che abbiamo sviluppato sinora. Questi esercizi sono pensati per darvi degli spunti di possibili applicazioni concrete degli strumenti che abbiamo sviluppato. A partire da questi semplici esempi proposti potete poi ampliare e migliorare le funzionalità del vostro codice.

Le stringhe:

ESERCIZIO 4.0 - Misura del rapporto q/m per l'elettrone (tipo : analisi dati):
Un esperimento molto interessante che si svolge nel laboratorio di fisica riguarda la misura del rapporto tra la carica e la massa di un elettrone. Un fascio di elettroni di energia nota (determinata dal potenziale 2ΔV applicato ai capi di un condensatore) viene deflesso da un campo magnetico opportunamente generato. Dalla misura del raggio di deflessione r si può ricavare una stima del rapporto q/m. La misura in laboratorio è piuttosto complessa ( in particolare lo studio delle sistematiche sperimentali ) ma il rapporto q/m può essere determinato sfruttando la relazione
(rB)2 = (m/q) 2ΔV
come il coefficiente angolare della relazione. Nel file di dati sono riportate le misure prese in laboratorio: nella prima colonna il valore di 2ΔV, nella seconda colonna il valore di (rB)2 e nella terza l'errore sulla determinazione di (rB)2. Provate a scrivere un codice che pemetta di visualizzare i dati raccolti e determinare il rapporto q/m ( in questo caso l'oggetto di ROOT più indicato è il TGraphErrors. Se non ci riuscite potete prendere ispirazione dal questo codice:
ESERCIZIO 4.1 - Misura della carica dell'elettrone (tipo : anslisi dati):
La carica dell'elettrone è stata misurata per la prima volta nel 1909 in uno storico esperimento dal fisico statunitense Robert Millikan. Questo esperimento si effettua anche nel laboratorio di fisica e consiste nel misurare la velocità di caduta o risalita di goccioline d'olio elettrizzate per strofinio in una regione con campo elettrico regolabile. Nel file di dati sono riportare le misure di carica elettrica (Qi) per un certo numero di goccioline osservate. Il valore della carica può essere determinato come il minimo della funzione
S(q)=Σ[(Qi/ki)-q]2
dove ki è il numero intero più vicino al rapporto Qi/q. Provate a scrivere un codice per rappresentare la funzione S(q) e determinare il valore della carica dell'elettrone. Se non ci riuscite provare prendere ispirazione da questo codice:
  • Il file di dati lo potete trovare qui.
  • Il file di codice lo potete trovare qui.

ESERCIZIO 4.2 - Determinazione del cammino minimo (tipo : approfondimento uso STL) :
In questo esercizio possiamo provare ad approfondire l'uso di contenitori e algoritmi della STL. Proviamo ad affrontare questo problema: dato un set di punti nel piano cerchiamo il percorso che ci permette ( partendo dall'origine ) di toccare tutti i punti percorrendo la minor distanza possibile. Le coordinate dei punti si trovano in un file. Eventualmente cercate di produrre un grafico del percorso effettuato. In caso potete prendere qualche spunto dal codice linkato qui sotto ( nel codice si può anche trovare un esempio di overloading di operator<< utile per semplificare la lettura da file ) :
  • Il file di dati lo potete trovare qui.
  • Il file di codice lo potete trovare qui .


ESERCIZIO 4.3 - Studio dati relativi a decessi in Italia nel 2020 (tipo : approfondimento uso STL e analisi dati) :
In questo esercizio proviamo ad utilizzare le classi, i contenitori e gli algoritmi imparati nelle prime tre lezioni per affrontare una analisi dati leggermente più realistica. Per fare questo cerchiamo di analizzare i dati dei decessi mensili per comune italiano da gennaio 2020 a maggio 2020 confrontandoli con la media degli anno 2015-2019 ( fonte Istituto Nazionale di Statistica (ISTAT ). Scopo dell'esercizio è quello di estrarre dai dati ISTAT l'andamento del rapporto dei decessi da gennaio 2020 a maggio 2020 rapportato alla media degli ultimi quattro anni per una provincia italiana a scelta. Ovviamente questo è solo un esempio delle informazioni che possiamo estrarre da questi dati. Notate inoltre che il sito dell'ISTAT fornisce una sterminata quantità di dati su svariati aspetti della società italiana. Saper analizzare in modo sensato i dati è fondamentale nella nostra preparazione.

1) Il file di input:

Il file di input è scritto in formato csv ( comma separated value ), un file di testo in cui i vari campi sono separati da una virgola. La struttura del file è la seguente:



Come si può notare ogni comune è rappresentato da una riga nel file e le informazioni relative ad un certo comune sono riportate nelle varie colonne. Sono riportati la regione di appartenenza del comune, la provincia, il comune e il numero di decessi medi degli ultimi quattro anno per mese seguiti dal numero di decessi nel primi cinque mesi del 2020. Possiamo poi cercare i comuni italiani in cui il totale dei decessi nei primi cinque mesi del 2020 rispetto alla media degli ultimi quattro anno è risultato più elevato.

2) La classe comune:

Per immagazzinare in modo efficiente i dati presenti nel file di input potremmo pensare di costruire una classe comune che possa essere utilizzata per contenere tutte le informazioni relative ad un certo comune italiano.

3) Le funzioni :

come nelle lezioni precedenti codifichiamo le funzioni necessarie in un file dedicato (funzioni.h ed eventualmente funzioni.cxx). Potremmo pensare
  • Una funzione che accetta un file in input e restituisce un vector di comuni;
  • Una funzione che accetta in input il vettore di comuni, il nome della provincia e restituisca l'andamento dei decessi relativo alla media degli ultimi quattro anni.
  • Una funzione che accetta in input il vettore di comuni e scrive a video le informazioni principali desiderate.

4) Il file principale :

nel main utilizziamo la classe comune, le funzioni, contenitori e algoritmi della STL. Il main potrà contenere :
  • Una chiamata alla funzione ReadFromFile per caricare tutti i dati in modo organizzato dentro un vector di comune.
  • Una chiamata alla funzione GroupByProvincia che accetta in input in vettore dei comuni e il nome di una provincia e restituisce l'andamento dei decessi relativo alla media degli ultimi quattro anni.
  • Utilizzo delle funzionalità della STL e dei suoi contenitori per cercare il comune italiano più con l'incremento più elevato di decessi nel 2020.
Il file di dati e uno scheletro di codice lo potete trovare qui sotto
  • Il file di dati lo potete trovare qui.
  • L'header file della classe comune lo potete trovare qui.
  • L'header file delle funzioni lo potete trovare qui.
  • Un esempio di main lo potete trovare qui.

Il namespace:

Il contenitore map della STL:
Back to Home Page