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
4 stars 13 forks source link

Proposta di tesi S282425 #106

Closed alevantaggi closed 1 year ago

alevantaggi commented 1 year ago

Studente proponente

S282425 Vantaggi Alessio

Titolo della proposta

Analisi statistiche UEFA Champions League 2021-22 (per singolo giocatore e per singola squadra) e creazione di un dream team.

Descrizione del problema proposto

L’analisi e l’interpretazione dei dati riveste un ruolo molto importante. Infatti, oltre che ad essere immagazzinati, i dati devono essere anche contestualizzati ed interpretati. Il principale obiettivo è quello di facilitare l’interpretazione dei dati, mediante confronti e organizzazione in ranking, in modo da favorire una corretta visualizzazione. Inoltre è possibile anche intervenire a livello di squadra, programmando l’acquisto di un determinato giocatore per la successiva stagione, con l’obiettivo di sanare eventuali carenze tecniche, mediante l’inserimento di un budget massimo e di un salario massimo da dover rispettare e spendere. È possibile infine richiedere la creazione di un dream team, che contempli le opzioni scelte dall’utente.

Descrizione della rilevanza gestionale del problema

Dal punto di vista gestionale l’analisi dei dati riveste un ruolo cruciale, in quanto grazie ad essi si è in grado di fare delle previsioni, ma anche delle scelte per l’organizzazione futura. Lo studio delle performance della passata stagione aiuta anche a capire quali siano stati i punti di forza (e di debolezza) di una determinata squadra o di un singolo giocatore. In questo modo è possibile intervenire, in maniera mirata, sulla rosa e/o intensificare l’allenamento per una determinata caratteristica di un calciatore. La creazione di un dream team permette, infine, di stabilire una sorta di benchmark da seguire come riferimento.

Descrizione dei data-set per la valutazione

Il data-set utilizzato per le statistiche dei giocatori è il seguente: https://www.kaggle.com/datasets/azminetoushikwasi/ucl-202122-uefa-champions-league

che dovrà essere incrociato con il seguente data-set, relativo al salario a inizio stagione (2022) del calciatore: https://www.kaggle.com/datasets/bryanb/fifa-player-stats-database?select=FIFA22_official_data.csv

Infine si utilizzerà il seguente data-set per estrarre il valore economico del giocatore, raggiunto alla fine della competizione: https://www.kaggle.com/datasets/bryanb/fifa-player-stats-database?select=FIFA23_official_data.csv

Il database completo sarà così organizzato:

Descrizione preliminare degli algoritmi coinvolti

Lo scopo del programma è quello di mostrare statistiche “comparate” di un determinato giocatore o di una determinata squadra, mediante un algoritmo di ricerca ed elaborazione del ranking finale, che permetterà di visualizzare le statistiche, sia a livello numerico, che percentuale. La percentuale sarà poi usata per stilare una classifica in modo da comprendere i punti di forza e di debolezza del giocatore selezionato dall’utente. Se invece viene selezionata una squadra, oltre a mostrare le statistiche complessive di quel team, ottenute facendo la media dei calciatori appartenenti, si abiliterà una sezione aggiuntiva, dedicata alla statistica peggiore di quel team e sarà permesso l’inserimento di un valore massimo, per il salario e per il valore economico di un giocatore che si vuole acquistare per il prossimo torneo. Una volta inseriti questi valori, verranno mostrati i migliori calciatori delle altre squadre in quel fondamentale, con i rispettivi valori di salario e valore economico. Grazie a questa vista si potranno fare planning per programmare la stagione futura. L’ultimo algoritmo riguarda la creazione di una sorta di dream team, che verrà stabilito dal sistema sulla base delle opzioni fornite dall’utente ed implementato mediante una ricorsione.

Descrizione preliminare delle funzionalità previste per l’applicazione software

L’applicazione finale dovrà essere composta di tre funzioni principali:

1 - La prima funzione è caratterizzata da un menù a tendina contenente tutti i giocatori presenti all’interno del data-set. Una volta selezionato un singolo giocatore, sarà possibile visionare tutte le caratteristiche relative a quel calciatore. Le statistiche differiranno a seconda che si tratti di un portiere o di un giocatore di movimento.

2 - La seconda funzione è caratterizzata da un menù a tendina, contenente tutte le squadre che hanno partecipato alla Uefa Champions League 2021-22. Una volta selezionata una squadra, sarà possibile visionare tutte le caratteristiche/statistiche relative all’intero team, che saranno suddivise in: • Porta → verranno visualizzati: goal totali subiti, goal subiti/partite giocate, clean sheets, salvataggi, salvataggi/(goal subiti + salvataggi). • Difesa → verranno visualizzati: palloni totali recuperati, palloni recuperati/partite giocate, tackle totali, tackle vinti, tackle vinti/tackle totali. • Passaggi → verranno visualizzati: passaggi totali, passaggi riusciti, passaggi riusciti/passaggi totali, assist, assist/partite giocate. • Attacco → verranno visualizzati: goal totali, goal/partite giocate, dribbling, dribbling/partite giocate, tiri totali, tiri in porta, tiri in porta/tiri totali, goal/tiri in porta totali In questo modo sarà possibile evidenziare la statistica peggiore della squadra ed intervenire individuando un giocatore da aggiungere alla prossima stagione. Infatti, modificando la sezione con max. salario e max. valore economico, si consentirà all’utente di ricercare il profilo adeguato da aggiungere alla squadra attuale, per migliorare (nella stagione successiva) il deficit riscontrato.

3 – La terza funzione consiste nella creazione di un dream team di 11 giocatori (1 portiere e 10 giocatori di movimento) per una determinata caratteristica/statistica, selezionata dall’utente, con dei limiti imposti, sempre dall’utente, sul budget e sul salario della squadra.

Per prima cosa verrà proposto all’utente la scelta del modulo di gioco, tra quelli di seguito disponibili: • 3-4-3 • 3-5-2 • 4-3-3 • 4-4-2 • 4-5-1 • 5-3-2 • 5-4-1

Successivamente l’utente dovrà inserire:

  1. il budget massimo per salario e valore economico della squadra
  2. la percentuale di salario e di valore economico dedicate al portiere (il resto del budget sarà dedicato ai restanti 10 giocatori di movimento).

A questo punto l’utente dovrà effettuare la scelta della caratteristica/statistica di riferimento per il portiere, tra quelle di seguito disponibili: • salvataggi/(goal subiti + salvataggi) • goal subiti/minuti giocati • clean sheets/partite totali.

Infine l’utente dovrà effettuare la scelta della caratteristica/statistica di riferimento per i 10 giocatori di movimento. Ecco di seguito quelle disponibili: • palloni recuperati/minuti giocati • tackle vinti/tackle totali • passaggi riusciti/passaggi totali • assist/minuti giocati • goal totali/minuti giocati • dribbling/minuti giocati • tiri in porta/tiri totali • goal/tiri in porta totali

Oltre alla ricerca mediante l’inserimento di un budget massimo (per salario e per valore economico) è presente un’altra opzione, che permette di ottenere il dream team senza limiti di budget.

fulcorno commented 1 year ago

L'argomento proposto ed i data-set identificati sono adeguati. Dal punto di vista delle funzionalità, se non ho capito male i punti 1 e 2 di fatto si riducono ad una serie di somme pesate... quindi dal punto di vista algoritmico piuttosto banali. Il punto 3, quello del dream team, effettivamente è più interessante, e suggerirei di concentrami su questo (anche per renderlo computazionalmente fattibile, vista la dimensione enorme dello spazio di ricerca).

Ti suggerirei quindi di concentrarti sul punto 3, valutando quali criteri di ricerca e quali vincoli possano essere sensati dal punto di vista applicativo e possano rendere fattibile la ricerca ricorsiva.

Nota: non mi è chiaro perché ti servano ben 5 tabelle, tutte con chiave (giocatore, club)... non basta una tabella sola con molte colonne? (alcune delle quali potranno essere NULL, ovviamente)?

alevantaggi commented 1 year ago

Salve Professore, per quello che riguarda il punto 1 ed il punto 2, intanto volevo aggiungere qualche chiarimento. Oltre a mostrare le statistiche già presenti nel database, l’algoritmo prevede anche la normalizzazione delle principali caratteristiche dei giocatori e delle squadre, in modo tale da rendere i dati tra di loro comparabili e stilare una classifica di merito. È prevista una specifica classifica per ogni tipologia di caratteristica presente nel dataset. Ogni ranking verrà stabilito mediante una query SQL.

L’utente visualizzerà, nel punto 1, per esempio: • Palloni recuperati totali: 12 → posizione in classifica del giocatore per questa caratteristica: 12º • Palloni recuperati/minuti giocati: 1.5 palloni recuperati/min → posizione in classifica del giocatore per questa caratteristica: 2º

Nel punto 2 invece: • goal totali subiti: 7 → posizione in classifica della squadra per questa caratteristica: 5º • goal subiti/partite giocate: 1.2 goal subiti/partite giocate → posizione in classifica della squadra per questa caratteristica: 8º

Per quanto riguarda il punto 3 (dream team), intanto potrei fare una scrematura andando a considerare solo i giocatori che hanno giocato almeno 3 partite (cioè almeno 270 minuti). Inoltre, oltre a quelli già presenti, potrei aggiungere i seguenti vincoli, per rendere la ricerca ricorsiva computazionalmente più fattibile: • numero minimo di minuti giocati (il valore inserito dovrà essere ≥ 270 min) • un’età minima dei giocatori • un’età massima dei giocatori • numero massimo di giocatori appartenenti alla stessa squadra La ricorsione sarà ottimizzata, inoltre, sfruttando i ruoli dei giocatori (prima completo i difensori, poi i centrocampisti ed infine gli attaccanti) e andando ad esplorare tutte le possibili combinazioni dei giocatori in ordine alfabetico crescente.

Infine accolgo il suo consiglio e riduco il numero di tabelle da 5 a 3: • Una tabella con tutti i giocatori presenti nel data-set: (IDGiocatore, Name, position, #Age (2022), Nationality, Wage (2022), Value (2023)) • Una tabella con le statistiche: (IDGiocatore, club, #saved, #conceded, #cleansheets, #balls_recoverd, #tackles, #t_won, #pass_attempted, #pass_completed, #assist, #total_attempts, #on_target, #goals, #dribbles, #minutes_played, #match_played) • Una tabella con il numero di partite giocate da una squadra: (club, #total_match_played)

fulcorno commented 1 year ago

ok, va bene, approvo la richiesta.

Confermo che i punti 1 e 2 non sono particolarmente complessi dal punto di vista algoritmico, e ti suggerisco di concentrarti sul punto 3 (eventualmente a scapito di qualche funzionalità di 1 e 2, se ti dovessi accorgere di qualche difficoltà imprevista nel punto 3).