TdP-prove-finali / Introduzione

Istruzioni e documentazione per la proposta e lo svolgimento delle prove finali relative al corso di Tecniche di Programmazione.
http://bit.ly/tecn-progr
Apache License 2.0
3 stars 13 forks source link

Creazione di una dashboard per l'epidemia di Covid-19 in Italia #37

Closed RobertoTorta closed 4 years ago

RobertoTorta commented 4 years ago

Studente proponente:

s236929 Roberto Torta

Titolo della proposta:

Dashboard Dati Covid-19 Italia

Descrizione del problema proposto:

Il programma si propone di fornire una interfaccia grafica per la visualizzazione semplificata dei dati nazionali e regionali sul contagio da Covid-19 in Italia, inoltre si intende creare un simulazione il quanto più verosimile di una epidemia al variare delle condizioni poste dall'user.

Descrizione della rilevanza gestionale del problema:

Riuscire ad avere accesso ai dati aggiornati del contagio, in modo pratico ed intuitivo, potendosi concentrare sul periodo e sulla regione di propria preferenza.

Descrizione dei data-set per la valutazione:

I dati verranno presi dal repository del dipartimento della protezione civile italiana (https://github.com/pcm-dpc/COVID-19), verranno scaricati in formato csv tramite wget, caricati su HeidiSQL in un database creato manualmente tramite l'importazione di file csv per poi poter effettuare le interrogazioni sql desiderate. In particolare si creeranno una tabella per i dati a livello nazionale ed una parallela per i dati a livello regionale. Inoltre verrà creata una tabella per ospitare i dati sul numero della popolazione italiana e delle terapie intensive regione per regione.

Descrizione preliminare degli algoritmi coinvolti:

I principali problemi da affrontare saranno, una volta creati i database, creare i metodi per estrarre i dati in modo funzionale alle operazioni da eseguire in seguito, creare i metodi che permettano di calcolare agilmente i vari tassi richiesti dall'user, a seconda della data e della regione richieste da esso. Verranno poi creati metodi per il calcolo dei tassi partendo da dati di input. L'ultimo passo sarà quello di creare la simulazione della epidemia partendo da dati di input utilizzando algoritmi ricorsivi o di simulazione.

Descrizione preliminare delle funzionalità previste per l'applicazione software:

L'interfaccia sarà dotata di menù a tendine per leggere i dati a livello nazionale e regionale, nei giorni scelti dall'user, sono previsti metodi per calcolare il tasso di contagiosità R0, il tasso di mortalità, i posti disponibili in terapia intensiva e le percentuali di contagiati. Verrà inoltre fornito un tasto per la creazione a video di un grafico riguardante i decessi, i guariti, e il totale dei casi, sempre a seconda della regione di input. La parte di simulazione permetterà di scegliere in quali giorni applicare le varie misure di contenimento (chiusura scuole, negozi, lock-down totale, mascherine obbligatorie, eventuali altre), tali scelte dell'user permetteranno di abbassare il tasso di moltiplicazione del virus, arrivati alla fine della simulazione, i risultati dovranno essere mostrati a video sia in formato grafico che in formato testuale.

fulcorno commented 4 years ago

Innanzitutto scusami per il ritardo con cui rispondo. Avevamo già condiviso che il tipo di applicazione ed il data set fossero adeguati. La sezione "descrizione preliminare degli algoritmi" non dice nulla. In sostanza dice "verranno implementati gli algoritmi che serviranno". Però questi algoritmi non sono citati. Se ci hai già pensato, sarebbe oppurtuno descriverli. Nella parte di simulazione, manca un aspetto importante: qual è il modello da adottare per calcolare/simulare l'effetto delle varie misure? Esiste un modello a cui ti ispiri (trovato magari in qualche articolo scientifico)? Svilupperai un modello ad hoc? Ti chiederei di chiarire questi due aspetti, grazie.

RobertoTorta commented 4 years ago

Gentile professore, scusi se le rispondo solo ora ma sono ancora alle prese con gli esami e non ho avuto tempo di pensare al progetto di tesi. Sto iniziando ora a pensare come sviluppare la seconda parte, mi piacerebbe molto provare ad implementare un modellizzazione di un grafico per fare famigliarizzare gli utilizzatori dell'applicativo con l'importanza di prendere misure di distanziamento tempestivamente. Detto in modo semplice, pensavo per la seconda di avere una funzione ricorsiva che mi riceve come parametri dagli utenti i giorni in cui introdurre le varie misure di contenimento e mostrare a video il famoso "flat the curve". Sarà mia premura cercare di fare una modellizzazione non dico veritiera ma quanto meno realistica, cercherò ed allegherò nel progetto tutti gli articoli/siti dove troverò i dati con cui impostare il modello. Se le piace come idea andrò quanto prima ad aggiornare la issue su GitHub. Inoltre la informo che la sessione è andata bene, al momento mi manca solo più un esame che darò a settembre, appena mi verranno caricati i voti sul libretto scriverò alla segreteria per risolvere il problema dell'overbooking, così da porle fare richiesta di tesi in modo ufficiale. Grazie mille per la disponibilità. Buona giornata. Roberto Torta s236929

Il 2020-06-14 22:13 Fulvio Corno ha scritto:

Innanzitutto scusami per il ritardo con cui rispondo. Avevamo già condiviso che il tipo di applicazione ed il data set fossero adeguati. La sezione "descrizione preliminare degli algoritmi" non dice nulla. In sostanza dice "verranno implementati gli algoritmi che serviranno". Però questi algoritmi non sono citati. Se ci hai già pensato, sarebbe oppurtuno descriverli. Nella parte di simulazione, manca un aspetto importante: qual è il modello da adottare per calcolare/simulare l'effetto delle varie misure? Esiste un modello a cui ti ispiri (trovato magari in qualche articolo scientifico)? Svilupperai un modello ad hoc? Ti chiederei di chiarire questi due aspetti, grazie.

-- You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub [1], or unsubscribe [2]. [ { "@context": "http://schema.org", "@type": "EmailMessage", "potentialAction": { "@type": "ViewAction", "target": "https://github.com/TdP-prove-finali/Introduzione/issues/37#issuecomment-643816436", "url": "https://github.com/TdP-prove-finali/Introduzione/issues/37#issuecomment-643816436", "name": "View Issue" }, "description": "View this Issue on GitHub", "publisher": { "@type": "Organization", "name": "GitHub", "url": "https://github.com" } } ]

Links:

[1] https://github.com/TdP-prove-finali/Introduzione/issues/37#issuecomment-643816436 [2] https://github.com/notifications/unsubscribe-auth/AOXLZ4MN6CKSYMZWGFBR35DRWUVQDANCNFSM4M7GE54Q

fulcorno commented 4 years ago

L'idea di valutare l'andamento dell'epidemia in funzione delle misure di contenimento va bene. Tuttavia, secondo me è ancora troppo generica e non mi permette di valutare il contenuto algoritmico della proposta (in particolare, verificare che non sia troppo complessa o troppo lontana dagli argomenti del corso).

Dal punto di vista pratico, forse è meglio se provi a ri-scrivere (nella tua risposta) l'intera proposta (nel formato originario), integrando nel informazioni mancanti, così possiamo valutarla e se va bene procedere.

RobertoTorta commented 4 years ago

Studente proponente:

s236929 Roberto Torta

Titolo della proposta:

Dashboard Dati Covid-19 Italia

Descrizione del problema proposto:

Il programma si propone di fornire una interfaccia grafica per la visualizzazione semplificata dei dati nazionali e regionali sul contagio da Covid-19 in Italia, inoltre si intende creare un simulazione il quanto più verosimile di una epidemia in Italia al variare delle condizioni poste dall'user.

Descrizione della rilevanza gestionale del problema:

Riuscire ad avere accesso ai dati aggiornati del contagio, in modo pratico ed intuitivo, potendosi concentrare sul periodo e sulla regione di propria preferenza. Inoltre la parte di simulazione del contagio permetterà all'utente di vedere intuitivamente quanto una risposta tempestiva al contagio permetta di contenere la situazione.

Descrizione dei data-set per la valutazione:

I dati verranno presi dal repository del dipartimento della protezione civile italiana (https://github.com/pcm-dpc/COVID-19), verranno scaricati in formato csv tramite wget, caricati su HeidiSQL in un database creato manualmente tramite l'importazione di file csv per poi poter effettuare le interrogazioni sql desiderate. In particolare si creeranno una tabella per i dati a livello nazionale ed una parallela per i dati a livello regionale. Inoltre verrà creata una tabella per ospitare i dati sul numero della popolazione italiana e delle terapie intensive regione per regione.

Descrizione preliminare degli algoritmi coinvolti:

I principali problemi da affrontare saranno, una volta creati i database, creare i metodi per estrarre i dati in modo funzionale alle operazioni da eseguire in seguito, creare i metodi che permettano di calcolare agilmente i vari tassi richiesti dall'user, a seconda della data e della regione richieste da esso. Verranno poi creati metodi per il calcolo dei tassi partendo da dati di input.

L'ultimo passo sarà quello di creare la simulazione della epidemia partendo da dati di input utilizzando un algoritmo ricorsivo. Più in particolare, ogni giorno simulato corrisponderà ad un livello della ricorsione, nel quale il numero dei nuovi casi giornalieri verrà moltiplicato per un coefficiente che andrà ad aumentare o diminuire il numero delle nuovi contagiati. L'utente potrà scegliere in quali settimane inserire una delle quattro misure di contenimento (scuole chiuse, negozi chiusi, smart working obbligatorio, lock down totale), che abbasseranno, gradualmente ad ogni livello di ricorsione il fattore moltiplicativo. I fattori moltiplicativi sono stati trovati algebricamente da me usando sia Excel che un programma scritto ad hoc su Eclipse, corrispondono a +1,38 per la crescita libera, -0,08 per la chiusura delle scuole, -0,10 per la chiusura dei negozi, -0,12 per l'obbligo di lavoro da casa e -0,20 per il lock down totale, inoltre per evitare abbassamenti troppo repentini nell'aumento dei contagi e per rendere la simulazione più armonica, le sottrazioni del fattore moltiplicativo verranno fatte su più livelli della ricorsione (-0,02 a livello fino al totale della misura in questione) Allego a fondo issue una mia simulazione fatta per simulare il caso italiano per "convincere" della bontà del mio semplice modello. Finiti 90 livelli di ricorsione, la funzione restituirà la somma dei casi totali giorno per giorno, e verrà passata all'interfaccia grafica che la trasformerà in grafico, mostrando il "flat the curve". Opzionalmente la ricorsione potrà tenere conto di altro, se riesco a trovare dei modelli che mi approssimino bene anche i morti e i ricoveri.

Descrizione preliminare delle funzionalità previste per l'applicazione software:

L'interfaccia sarà dotata di menù a tendine per leggere i dati a livello nazionale e regionale, nei giorni scelti dall'user, sono previsti metodi per calcolare il tasso di contagiosità R0, il tasso di mortalità, i posti disponibili in terapia intensiva e le percentuali di contagiati. Verrà inoltre fornito un tasto per la creazione a video di un grafico riguardante i decessi, i guariti, e il totale dei casi, sempre a seconda della regione di input. La parte di simulazione permetterà di scegliere in quale settimana applicare le varie misure di contenimento (chiusura scuole, negozi, lock-down totale, lavoro agile), tali scelte dell'user permetteranno di abbassare il tasso di moltiplicazione del virus, arrivati alla fine della simulazione, i risultati dovranno essere mostrati a video sia in formato grafico che in formato testuale.

Esempio coefficienti:

Ho scelto di chiudere le scuole la terza settimana, di chiudere i negozi alla terza, di obbligare al lavoro da casa alla quarta e di stabilire il lock-down alla quinta e sono riuscito ad ottenere in buona approssimazione la situazione dei primi tre mesi in Italia.

Esempio calcolo r0.xlsx

fulcorno commented 4 years ago

Non capisco perché il problema proposto dovrebbe essere risolto attraverso la ricorsione. Se ho ben capito, i coefficienti sono già dati in input, le misure contenitive sono anch'esse predefinite. Per calcolare dei valori del giorno T+1 rispetto al giorno T non mi pare sia utile una funzione ricorsiva... mi sembra più un semplice ciclo for() sui vari giorni. In altri termini, che cosa sta "ottimizzando" la ricorsione? Altrimenti, mi sembra una forma di simulazione, che tra l'altro non ha nemmeno molte varianti nei tipi di eventi considerati...

RobertoTorta commented 4 years ago

Ho provato a creare una funzione per simulare l'evoluzione del contagio, dove i parametri moltiplicativi erano messi dall'utente e la funzione mi cercava l'ottimo come il minimo dei casi totali, andando a scegliere lui quando implementare le misure; il problema è che così facendo, o trovo la soluzione banale di mettere il lockdown al primo giorno, oppure quasi sempre vado a finire in risultati totalmente assurdi (milioni di contagiati) se non addirittura errori di overflow. A questo punto penso che lascerò perdere la ricorsione perché numericamente è veramente difficile da controllare e opterei per un algoritmo di simulazione. Ci ho già pensato un po' perché immaginavo che questo primo tentativo fosse un po' scarso (ci ho voluto provare comunque perché mi piaceva l'idea di vedere il flat the curve graficamente).

Potrei associare ad ogni persona una probabilità di contagiare, una di morire e una di guarire, che vanno a modificarsi alzandosi o abbassandosi ogni volta che la stessa persona viene reinserita nella coda degli eventi. La simulazione si esaurirà quando tutte le persone saranno morte o guarite e lo stato del mondo coinciderà al numero dei morti, dei contagiati e dei guariti totali. Questa è ovviamente un'idea di partenza, giusto per sapere se le può piacere come algoritmo, sono apertissimo, anzi desideroso, di migliorie e suggerimenti. Cordiali saluti Roberto Torta

Il gio 27 ago 2020, 11:42 Fulvio Corno notifications@github.com ha scritto:

Non capisco perché il problema proposto dovrebbe essere risolto attraverso la ricorsione. Se ho ben capito, i coefficienti sono già dati in input, le misure contenitive sono anch'esse predefinite. Per calcolare dei valori del giorno T+1 rispetto al giorno T non mi pare sia utile una funzione ricorsiva... mi sembra più un semplice ciclo for() sui vari giorni. In altri termini, che cosa sta "ottimizzando" la ricorsione? Altrimenti, mi sembra una forma di simulazione, che tra l'altro non ha nemmeno molte varianti nei tipi di eventi considerati...

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/TdP-prove-finali/Introduzione/issues/37#issuecomment-681842281, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOXLZ4LUJQVO6VVZNDDZBC3SCYTAHANCNFSM4M7GE54Q .

RobertoTorta commented 4 years ago

Studente proponente:

s236929 Roberto Torta

Titolo della proposta:

Dashboard Dati Covid-19 Italia

Descrizione del problema proposto:

Il programma si propone di fornire una interfaccia grafica per la visualizzazione semplificata dei dati nazionali e regionali sul contagio da Covid-19 in Italia, inoltre si intende creare un algoritmo che simulo la trasmissione del virus al variare delle condizioni poste dall'user.

Descrizione della rilevanza gestionale del problema:

Riuscire ad avere accesso ai dati aggiornati del contagio, in modo pratico ed intuitivo, potendosi concentrare sul periodo e sulla regione di propria preferenza. Inoltre la parte di simulazione del contagio permetterà all'utente di vedere intuitivamente quanto una risposta tempestiva al contagio permetta di contenere la situazione.

Descrizione dei data-set per la valutazione:

I dati verranno presi dal repository del dipartimento della protezione civile italiana (https://github.com/pcm-dpc/COVID-19), verranno scaricati in formato csv tramite wget, caricati su HeidiSQL in un database creato manualmente tramite l'importazione di file csv per poi poter effettuare le interrogazioni sql desiderate. In particolare si creeranno una tabella per i dati a livello nazionale ed una parallela per i dati a livello regionale. Inoltre verrà creata una tabella per ospitare i dati sul numero della popolazione italiana e delle terapie intensive regione per regione.

Descrizione preliminare degli algoritmi coinvolti:

I principali problemi da affrontare saranno, una volta creati i database, creare i metodi per estrarre i dati in modo funzionale alle operazioni da eseguire in seguito, creare i metodi che permettano di calcolare agilmente i vari tassi richiesti dall'user, a seconda della data e della regione richieste da esso. Verranno poi creati metodi per il calcolo dei tassi partendo da dati di input.

L'ultimo passo sarà quello di creare un algoritmo di simulazione del contagio. Lo stato del mondo corrisponderà al numero dei contagiati totali, a quello dei morti ed a quello dei guariti. L'algoritmo partirà con N persone contagiate (passate da parametro), a ciascuna di loro sarà assegnata una probabilità di contagiare altre persone, una di guarire ed una di morire; queste probabilità verranno modificate ogni volta che una persona passerà nella coda degli eventi, alzando la probabilità di morire o di guarire a scapito di quella di contagiare altre persone. L'utente inoltre potrà scegliere tramite interfaccia grafica di modificare le probabilità dei 3 eventi (ad esempio aumentare la probabilità di morte simulando la saturazione degli ospedali, aumentando la probabilità di guarigione con trattamenti al plasma, alzando o diminuendo il livello di contagiosità a seconda di quanto è rispettato il distanziamento sociale). Inoltre a ogni persona della simulazione verrà assegnato casualmente un valore numerico, che simulerà l'età del paziente in questione e modificherà a sua volta il valori probabilistici. La simulazione terminerà una volta esaurite tutte le persone nelle code degli eventi oppure dopo N passaggi di eventi (scelti sempre dall'user), i risultati ottenuti dell'algoritmo saranno quindi stampati a video e resi fruibili in forma grafica ed intuitiva.

Descrizione preliminare delle funzionalità previste per l'applicazione software:

L'interfaccia sarà dotata di menù a tendine per leggere i dati a livello nazionale e regionale, nei giorni scelti dall'user, sono previsti metodi per calcolare il tasso di contagiosità R0, il tasso di mortalità, i posti disponibili in terapia intensiva e le percentuali di contagiati. Verrà inoltre fornito un tasto per la creazione a video di un grafico riguardante i decessi, i guariti, e il totale dei casi, sempre a seconda della regione di input. La parte di simulazione permetterà di scegliere il numero di contagiati di partenza tra un range predefinito e di settare i vari parametri che influenzeranno le probabilità della simulazione. I risultati dovranno essere mostrati a video sia in formato grafico che in formato testuale.

RobertoTorta commented 4 years ago

update: ho apportato alcune migliorie per rendere la simulazione più dinamica e personalizzabile dall'user

Studente proponente:

s236929 Roberto Torta

Titolo della proposta:

Dashboard Dati Covid-19 Italia

Descrizione del problema proposto:

Il programma si propone di fornire una interfaccia grafica per la visualizzazione semplificata dei dati nazionali e regionali sul contagio da Covid-19 in Italia, inoltre si intende creare un algoritmo che simula la trasmissione di un virus al variare delle condizioni poste dall'user.

Descrizione della rilevanza gestionale del problema:

Riuscire ad avere accesso ai dati aggiornati del contagio, in modo pratico ed intuitivo, potendosi concentrare sul periodo e sulla regione di propria preferenza. Inoltre la parte di simulazione del contagio permetterà all'utente di vedere intuitivamente quanto una risposta tempestiva al contagio permetta di contenere la situazione.

Descrizione dei data-set per la valutazione:

I dati verranno presi dal repository del dipartimento della protezione civile italiana (https://github.com/pcm-dpc/COVID-19), verranno scaricati in formato csv tramite wget, caricati su HeidiSQL in un database creato manualmente tramite l'importazione di file csv per poi poter effettuare le interrogazioni sql desiderate. In particolare si creeranno una tabella per i dati a livello nazionale ed una parallela per i dati a livello regionale. Inoltre verrà creata una tabella per ospitare i dati sul numero della popolazione italiana e delle terapie intensive regione per regione.

Descrizione preliminare degli algoritmi coinvolti:

I principali problemi da affrontare saranno, una volta creati i database, creare i metodi per estrarre i dati in modo funzionale alle operazioni da eseguire in seguito, creare i metodi che permettano di calcolare agilmente i vari tassi richiesti dall'user, a seconda della data e della regione richieste da esso. Verranno poi creati metodi per il calcolo dei tassi partendo da dati di input.

L'ultimo passo sarà quello di creare un algoritmo di simulazione del contagio. Lo stato del mondo corrisponderà al numero dei contagiati totali, a quello dei morti ed a quello dei guariti. L'algoritmo partirà con N persone contagiate (passate da parametro), a ciascuna di loro sarà assegnata, sempre dall'user, una probabilità di contagiare altre persone, una di guarire ed una di morire; queste probabilità verranno modificate ogni volta che una persona passerà nella coda degli eventi, alzando la probabilità di morire o di guarire a scapito di quella di contagiare altre persone. Sempre l'utente sceglierà dopo quanti giorni una persona, venuta a contatto con il virus, inizierà a sviluppare sintomi, e di conseguenza iniziare a sua volta a contagiare. L'utente inoltre potrà scegliere tramite interfaccia grafica di modificare le probabilità dei 3 eventi (ad esempio aumentare la probabilità di morte simulando la saturazione degli ospedali, aumentare la probabilità di guarigione con trattamenti specializzati, diminuire il livello di contagiosità introducendo il distanziamento sociale). Inoltre a ogni persona della simulazione verrà assegnato casualmente un valore numerico, che simulerà l'età del paziente in questione e modificherà a sua volta il valori probabilistici. La simulazione terminerà una volta esaurite tutte le persone nelle code degli eventi oppure dopo N giorni simulati (scelti sempre dall'user), le persone smetteranno di contagiare e si andrà ad esaurire i contagiati già presenti, i risultati ottenuti dell'algoritmo saranno quindi stampati a video e resi fruibili in forma grafica ed intuitiva.

Descrizione preliminare delle funzionalità previste per l'applicazione software:

L'interfaccia sarà dotata di menù a tendine per leggere i dati a livello nazionale e regionale, nei giorni scelti dall'user, sono previsti metodi per calcolare il tasso di contagiosità R0, il tasso di mortalità, i posti disponibili in terapia intensiva e le percentuali di contagiati. Verrà inoltre fornito un tasto per la creazione a video di un grafico riguardante i decessi, i guariti, e il totale dei casi, sempre a seconda della regione di input. La parte di simulazione permetterà di scegliere il numero di contagiati di partenza tra un range predefinito e di settare i vari parametri che influenzeranno le probabilità della simulazione e la sua durata. I risultati dovranno essere mostrati a video sia in formato grafico che in formato testuale.