Insegnamento mutuato da: B029807 - ALGORITMI E PROGRAMMAZIONE PER L'ANALISI DEI DATI Laurea Magistrale in STATISTICA E DATA SCIENCE
Lingua Insegnamento
ITALIANO
Contenuto del corso
Analisi degli Algoritmi e Complessità Computazionale. Introduzione a moduli Python per l'analisi dei dati e di grafi. Sviluppo di algoritmi efficienti per grafi di grandi dimensioni.
Think Python: How to Think Like a Computer Scientist by Allen B. Downey Beijing: O'reilly Media
Problem Solving With Algorithims and Data Structures Using Python, 2nd edition, By Brad Miller and David Ranum Franklin Beedle & Assoc
Piattaforma Interattiva (libera traduzione dei libri sopra con materiale e esercizi addizionali): - http://www.andreamarino.it/python/thinkcspy/toc.html#t-o-c - http://www.andreamarino.it/python/pythonds/
Slide e dispense del corso distribuite su Moodle.
Obiettivi Formativi
Lo scopo di questo corso è quello di introdurre gli studenti alla progettazione, all'analisi e alla sperimentazione di algoritmi efficienti per l'analisi dei dati, attraverso la sperimentazione e lo sviluppo di algoritmi per grafi. L'apprendimento e lo sviluppo in Python di algoritmi per grafi sarà un'occasione per sviluppare le abilità di problem solving e di programmazione, imparando a usare moduli Python finalizzati all'analisi dei dati. Alla fine del corso gli studenti avranno una buona conoscenza delle problematiche computazionali e delle tecniche algoritmiche necessarie per un calcolo efficiente, saranno in grado di formulare e risolvere problemi legati all'analisi dei dati e di valutare le possibili soluzioni sia in termini di semantica che di efficienza.
Prerequisiti
Gli studenti devono (1) avere una conoscenza di base di algoritmi e strutture dati, (2) avere familiarità con la teoria della probabilità e la statistica di base, (3) avere sufficienti capacità di programmazione (per esempio, in Python).
Metodi Didattici
- Lezione frontale
- Brainstorming: discussione finalizzata alla ricerca di soluzioni non scontate a problemi complessi. Esposizione del problema e i relativi obiettivi che si vogliono raggiungere, sollecitando la classe a comunicare idee di risoluzione.
- Problem solving: l’apprendimento sarà il risultato di un attività di scoperta e per soluzione di problemi. Il metodo sarà utilizzato per individuare, pianificare ed attuare le azioni necessarie alla risoluzione di un problema.
- La piattaforma Moodle verrà utilizzata come ambiente integrato di apprendimento, tramite il caricamento di contributi fruibili in modalità asincrona.
Altre Informazioni
Software - Spyder all'interno di Anaconda, PythonTutor o repl.it.
Modalità di verifica apprendimento
Consegna di un progetto con relativa discussione più orale. La consegna di un progetto che rispetti la specifica è condizione necessaria per essere ammessi all'orale. Lo scopo del progetto è verificare la capacità di sviluppare in autonomia algoritmi e applicarli in pratica su un dataset dato di grandi dimensioni in modo asincrono.
Nella prova orale verrà valutata la conoscenza degli argomenti presentati a lezione, l'acquisizione del linguaggio tecnico adeguato al contesto, la capacità di mettere in relazione fra loro argomenti diversi del programma, la comprensione del funzionamento degli algoritmi visti a lezione, la capacità e la velocità nel progettare soluzioni efficienti per problemi nuovi.
Programma del corso
Review su Analisi degli Algoritmi
Python Review
Strutture dati di base in Python
Introduzione al Modulo Python Pandas e Visualizzazione dei dati
Grafi: algoritmi di visita e calcolo delle distanze
Introduzione al modulo Python NetworkX
Algoritmi per l'analisi dello small-world in reti: diametro, distanza media, e distribuzione delle distanze
Conteggio probabilistico
Algoritmi di community detection
Algoritmi per il calcolo delle centralità