PROGRAMMING AND MACHINE LEARNING FOR BIOLOGICAL DATA Canale unico
Docente coordinatore e verbalizzante: ALLEGRA VIA
Docenti
Obiettivi formativi
Al termine del corso, gli studenti saranno in grado di:
Eseguire programmi Python
Archiviare i dati nei programmi
Utilizzare le funzioni integrate
Rilevare errori di sintassi che si verificano nei programmi
Leggere dati tabulari
Visualizzare e analizzare statisticamente i dati tabulari
Graficare dati biologici
Creare funzioni
Ripetere le azioni con i loop
Operare delle scelte
Determinare dove si sono verificati gli errori
Gestire errori ed eccezioni
Rendere i programmi leggibili
Utilizzare software scritto da altre persone
Riconoscere vari formati di dati per rappresentare i dati della sequenza DNA/RNA
Realizzare in modo indipendente script Python per:
- Leggere dati in sequenza utilizzando moduli Python o BioPython
- Analizzare i file di dati
- Eseguire programmi esterni
- Leggere l'input dalla riga di comando
Descrivere un'ampia gamma di tecniche di machine learning
Riconoscere quale metodo di apprendimento automatico è applicabile a determinati problemi di analisi dei dati
Trasformare i dati biologici per l'applicazione ML. In particolare, trasformare i dati di sequenza in un formato leggibile dal computer per l'input in una pipeline di machine learning
Dati di sequenza biologica pre-elaborazione per l'elaborazione del linguaggio naturale
Creare un modello RF (Random Forest) per classificare un set di sequenze
Risultati di apprendimento attesi
COMPETENZE GENERALI
Il corso si propone di insegnare la programmazione in Python a partire da zero e, in parallelo, di introdurre le basi del machine learning (ML) "tradizionale" applicato alla biologia. Con "tradizionale" si intende che lo studio delle reti neurali artificiali non è incluso nel programma.
Sul piano delle competenze, al termine del corso gli studenti e le studentesse saranno in grado di implementare i passi fondamentali di un workflow di ML supervisionato utilizzando Python e librerie come NumPy, Pandas, Matplotlib e Scikit-Learn. In particolare, sapranno importare i dati, pulirli, suddividerli in training set e test set, implementare un modello di machine learning, eseguire la cross-validation, ottimizzare gli hyperparameter e valutarne le prestazioni.
L'ambizione del corso è insegnare a programmare in Python e applicare quanto appreso per sviluppare una pipeline di machine learning — non formare esperti e esperte di ML. Tuttavia, chi svilupperà una passione per la disciplina avrà gli strumenti per approfondire in modo autonomo il lavoro nel campo dell'ML applicato ai dati biologici.
COMPETENZE SPECIFICHE
Al termine del corso, gli studenti e le studentesse saranno in grado di:
A) Conoscenza e comprensione
Spiegare cos'è un linguaggio di programmazione
Descrivere cos'è e come funziona l'interprete Python
Descrivere le diverse opzioni per eseguire codice Python
Spiegare perché si utilizza Python 3
Spiegare perché esistono molti linguaggi di programmazione
Elencare i tipi di dati in Python
Dato un frammento di codice, descrivere riga per riga (tramite commenti) cosa fa ciascuna istruzione
Elencare i componenti strutturali del linguaggio Python (es. funzioni, classi e moduli)
Spiegare il significato e l'uso del "." (punto) in Python
Descrivere lo scopo delle librerie necessarie per fare ML con Python
Descrivere una varietà di tecniche di machine learning
Elencare le differenze tra supervised e unsupervised learning
Spiegare quando utilizzare un algoritmo di classificazione o di regressione
Fare esempi di riduzione della dimensionalità
Elencare le caratteristiche principali del reinforcement learning
Fare un esempio di reinforcement learning
Elencare i 6 passi di un workflow di ML
Spiegare cosa sono un training set e un test set
B) Applicazione delle conoscenze
Assegnare un valore a una variabile
Usare un indice per estrarre un singolo carattere da una stringa
Usare uno slice per estrarre una sottostringa
Usare la funzione built-in type() per identificare i tipi di dati
Scrivere ed eseguire codice su Jupyter Notebook e/o Google Colab
Dato uno pseudocodice, scrivere ed eseguire il codice corrispondente
Usare i metodi dei tipi di dati
Importare librerie
Richiamare funzioni da una libreria importata
Importare elementi specifici da un modulo di una libreria
Assegnare un alias breve a una libreria al momento dell'importazione
Creare e indicizzare liste
Modificare i valori di singoli elementi di una lista
Aggiungere valori a una lista esistente
Riordinare e fare slicing degli elementi di una lista
Creare e manipolare liste annidate
Creare un dizionario Python
Assegnare un elemento a un dizionario
Usare almeno un metodo dei dizionari
Usare l'indentazione per creare un blocco if
Usare i booleani True e False nelle condizioni if
Usare gli operatori >, <, >=, <=, ==
Leggere dati da un file CSV in un DataFrame Python
Leggere una tabella CSV da un URL in un DataFrame Pandas
Creare una Series e un DataFrame da un dizionario Python
Esplorare e selezionare dati da DataFrame
Iterare su una sequenza di elementi e stampare ciascun elemento
Iterare su una Series Pandas
Iterare su una colonna di un DataFrame Pandas
Sostituire valori non numerici con NaN
Scaricare un dataset dal database Kaggle
Implementare modelli di ML utilizzando la libreria Python Scikit-Learn
C) Capacità di giudizio
Dato un dataset, valutare se è adatto per il supervised learning
In caso affermativo, indicare se è più appropriato un approccio di classificazione o di regressione
Riconoscere quale modello di machine learning è più adatto a un dato problema di analisi dei dati
Gestire errori ed eccezioni
Valutare le prestazioni di un modello di ML.
Migliorare le prestazioni di un modello di ML
Prerequisiti
È richiesta una formazione in ambito biologico o biomedico, con conoscenza di diversi tipi di dati e problematiche biologiche.
Per il Modulo di Programmazione non è necessaria alcuna esperienza pregressa; è tuttavia indispensabile comprendere i concetti di file e directory e sapere come accedere al proprio Google Drive.
È richiesta familiarità con almeno uno dei principali sistemi operativi (Linux, Mac OSX, Windows 10).
Per poter completare il Modulo 3 (Programmazione avanzata), il raggiungimento degli obiettivi di apprendimento del Modulo 1 (Introduzione) e del Modulo 2 (Fondamenti) è un prerequisito.
Programma dell’insegnamento
Programmazione e Machine Learning per i Dati Biologici (PMLBD)
I metodi moderni della biologia — in particolare il sequenziamento ad alta processività — generano oggi volumi di dati senza precedenti. Per estrarne informazioni utili e porre le domande di ricerca corrette, è necessario acquisire competenze in data mining, intelligenza artificiale e deep learning.
Il corso è organizzato in tre moduli progressivi, affiancati da attività pratiche ed esercitazioni individuali, e si conclude con una sessione finale di 4 ore dedicata a una simulazione d'esame.
MODULO 1 — Introduzione
Avvio del corso
Presentazione del programma, delle modalità di lavoro e degli strumenti didattici; conoscenza della classe attraverso un questionario diagnostico su background, aspettative e competenze pregresse.
Programmazione in Python
Introduzione al linguaggio e all'interprete Python; panoramica delle diverse modalità di esecuzione (shell interattiva, script da terminale, editor di codice, IDE, notebook); allestimento dell'ambiente di lavoro con Google Colab e, in alternativa, Anaconda/Jupyter Lab.
Machine Learning
Concetti fondamentali: cos'è il ML, il suo rapporto con l'intelligenza artificiale, le differenze rispetto alla programmazione tradizionale e il perché della sua rilevanza per i dati biologici. Introduzione alla data science e breve panoramica storica sull'evoluzione dei dati.
MODULO 2 — Fondamenti
Python di base
Variabili e assegnazione; tipi di dato (numeri, stringhe, liste, tuple, dizionari, set); funzioni built-in e metodi; import di moduli e librerie; cicli for e strutture condizionali; primi elementi di debugging. Introduzione alle librerie fondamentali per l'analisi dati — NumPy, Pandas e Matplotlib — con particolare attenzione alla manipolazione di dati tabulari tramite i DataFrame di Pandas e alla visualizzazione dei risultati.
Fondamenti di Machine Learning
Le principali tipologie di apprendimento automatico; concetti chiave quali supervised e unsupervised learning, classificazione, regressione, clustering, classi ed etichette, training/validation/test. Presentazione dei sei passi fondamentali di un progetto di ML:
Importazione dei dati
Pulizia dei dati (data cleaning)
Suddivisione in training set e test set
Costruzione del modello
Verifica dei risultati
Miglioramento delle prestazioni
MODULO 3 — Programmazione avanzata
Python avanzato
Gestione dei file (lettura e scrittura in diverse modalità); scrittura di funzioni personalizzate; introduzione alla programmazione a oggetti (classi).
Machine Learning avanzato
Costruzione di dataset di training solidi attraverso il preprocessing dei dati; algoritmo K-Nearest Neighbors (KNN); creazione e validazione di modelli tramite cross-validation k-fold; hyperparameter tuning; confronto tra più algoritmi di classificazione (KNN, Random Forest, Logistic Regression, XGBoost, Decision Tree); diagnosi di overfitting, underfitting e data leakage; gestione dello sbilanciamento delle classi; interpretabilità del modello tramite SHAP analysis; tecniche di feature engineering, selezione e riduzione delle feature.
Attività pratiche
Ogni modulo prevede esercitazioni guidate (live coding), lavori di gruppo, discussioni in classe e homework settimanali, inclusa la progressiva costruzione di un progetto personale di data science che accompagna lo studente/la studentessa lungo l'intero corso.
Testi di riferimento
Sebastian Raschka - Introduction to Machine Learning
https://sebastianraschka.com/resources/ml-lectures-1/
Sebastian Raschka, Yuxi Liu, Vahid Mirjalili
Machine Learning with PyTorch and Scikit-Learn: Develop machine learning and deep learning models with Python (ISBN-10: 1801819319 ISBN-13: 978-1801819312)
Ulteriori materiali didattici (tra cui slide, tutorial, video, dispense ed estratti da libri di testo, esempi e script) saranno messi a disposizione dalla docente prima e durante il corso.
Modalità di svolgimento
I risultati di apprendimento (learning outcomes, LO) guideranno la progettazione delle esperienze di apprendimento (EA). Per il raggiungimento di ciascun LO, verranno identificate e pianificate le EA più appropriate.
Le esperienze di apprendimento includeranno, a seconda dei descrittori di Dublino coinvolti:
Brevi lezioni interattive sui concetti fondamentali della programmazione e del machine learning;
Sessioni di live coding partecipative;
Sessioni pratiche di coding (individuali o in coppie/gruppi) in cui gli studenti e le studentesse dovranno usare autonomamente la programmazione in Python per risolvere problemi di gestione dei dati e implementare algoritmi di ML.
Frequenza
Il corso è interamente pratico. Si raccomanda vivamente la frequenza, indispensabile per acquisire le competenze necessarie a raggiungere i risultati di apprendimento previsti e superare l'esame.
Modalità di esame
Il raggiungimento dei risultati di apprendimento (learning outcomes, LO) del corso sarà valutato attraverso due componenti.
La prima componente è la discussione di un progetto di data science. Gli studenti e le studentesse che frequentano il corso sono invitati/e a discutere il proprio progetto in modo progressivo durante il corso e, ove possibile, prima dell'esame scritto. Chi non raggiunge lo standard richiesto con il progetto lo discuterà immediatamente dopo l'esame scritto. La discussione del progetto è pensata per valutare il raggiungimento dei LO di machine learning, nonché la capacità di pensiero critico nella scelta del dataset, nel suo pre-processing e nell'uso dei dati in tutte le fasi di un protocollo di machine learning.
La seconda componente è un esame scritto, che valuta il raggiungimento dei LO di programmazione in Python.
Ciascuna componente è descritta in dettaglio di seguito.
PROGETTO DI DATA SCIENCE
Dovrai realizzare un progetto di data science in cui sceglierai un dataset, lo analizzerai e applicherai un workflow completo di machine learning (ML). Il progetto deve essere sviluppato in un notebook Colab o Jupyter e caricato in una cartella Google Drive dedicata prima della discussione con la docente.
1. Scelta del dataset
Scegli un dataset che ti interessa esplorare. Puoi usare Kaggle o qualsiasi altra risorsa adatta. Prima di iniziare l'analisi, condividi la tua scelta con la docente per verificare che il dataset sia appropriato in termini di complessità e portata.
2. Struttura e contenuto del notebook
Il notebook deve includere le seguenti sezioni, nell'ordine indicato:
Obiettivo — indica chiaramente lo scopo del tuo studio e spiega perché hai scelto questo dataset
Descrizione del dataset — fornisci una descrizione analitica approfondita dei dati (variabili, dimensioni, fonte, limitazioni note, ecc.)
Pre-processing — descrivi e giustifica tutti i passi effettuati per pulire, trasformare e organizzare i dati
Analisi esplorativa dei dati — visualizza e descrivi le principali caratteristiche e pattern presenti nei dati
Workflow di ML — applica un protocollo completo di ML (un workflow di riferimento è disponibile qui); per ogni passo, dalla scelta del modello alla valutazione delle prestazioni, spiega le tue scelte e la strategia adottata
Risultati e discussione critica — presenta i risultati della tua analisi e discutili criticamente, includendo limitazioni e possibili miglioramenti
3. Documentazione
Ogni passo dell'analisi deve essere chiaramente descritto e spiegato. Ogni scelta deve essere giustificata. Il notebook deve avere la forma di un report coerente e autosufficiente, comprensibile anche a chi non era presente alla discussione.
Esame scritto (2h30)
L'esame scritto è composto da due esercizi che valutano le competenze di programmazione in Python e la capacità di lavorare in modo critico con codice generato da strumenti di intelligenza artificiale.
Esercizio 1 — Dallo pseudocodice a Python
Ti verrà fornito uno pseudocodice — una sequenza di istruzioni scritte in linguaggio naturale — e ti verrà chiesto di tradurlo in codice Python funzionante. L'esercizio si articola in due fasi:
Fase 1 (carta e penna): scrivi a mano la tua traduzione in Python, senza eseguirla.
Fase 2 (notebook): trascrivi il codice scritto a mano in un notebook ed eseguilo. Documenta nel notebook tutti gli errori prodotti dall'interprete Python, spiegando la causa di ciascun errore e come lo hai risolto. Questa fase valuta anche le tue capacità di debugging.
Esercizio 2 — Prompt engineering e confronto critico del codice
Ti verrà fornito uno script Python stampato, scritto dalla docente. Il tuo compito è:
Scrivere un prompt per ChatGPT progettato per riprodurre quello script nel modo più fedele possibile
Sottoporre il prompt a ChatGPT e confrontare il risultato con lo script originale
Annotare e spiegare le eventuali discrepanze tra le due versioni, discutendo le possibili cause
Questo esercizio valuta sia la capacità di comunicare in modo efficace un compito di programmazione a uno strumento di intelligenza artificiale, sia la capacità di valutare criticamente il codice generato dall'AI.
Esempi di domande
ESERCIZIO 1
Scrivi su un foglio di carta il codice corrispondente allo pseudocodice riportato di seguito.
Quando hai finito, copia il codice in un Jupyter Notebook (o in qualsiasi altro ambiente che conosci per eseguire codice Python), eseguilo e fai il debugging. Consiglio: esegui il debugging passo per passo usando print() per stampare ogni nuova variabile che definisci, o ogni volta che ha senso stampare qualcosa. È un approccio basilare e un po' grezzo, ma funziona!
Annota sullo stesso foglio — usando un colore o uno stile di scrittura diverso — gli errori che hai commesso e come li hai corretti.
ESERCIZIO 2
Scrivi su un foglio di carta il prompt ottimale (per ChatGPT o Copilot) pensato per generare esattamente il codice Python riportato di seguito — stessa struttura, logica, formattazione e commenti.
Quando hai finito, sottoponi il tuo prompt a ChatGPT, confronta il codice generato dall'AI con quello riportato di seguito e annota le differenze concettuali, se presenti.
Programmazione delle attività didattiche
- Course website
- Plotting and Programming in Python
- Book
Obiettivi per lo sviluppo sostenibile - Agenda ONU 2030
- Anno accademico2026/2027
- Corso di studio a cui afferisce l’insegnamentoGenetica e Biologia Molecolare - Genetics and Molecular Biology
- Codice insegnamento10628794
- CurriculumGenetics and Molecular Biology (percorso valido anche ai fini del conseguimento del doppio titolo italo-francese) - in lingua inglese
- Anno e semestre1º anno - 2º semestre
- TipologiaAttività formative affini ed integrative
- AmbitoAttività formative affini o integrative
- SSDBIOS-07/A
- Presenza obbligatoriaNo
- Linguaeng
- CFU6 CFU
- Durata complessiva56 ore
- Distribuzione delle ore32 classroom hours, 24 training hours