Το σύνολο δεδομένων, που αναλύεται είναι το VNL 2025 Mens, συγκεκριμένα το “playerStats.csv”, το οποίο αντλήθηκε από την πλατφόρμα Kaggle. Πρόκειται για ένα data set, που περιέχει δεδομένα από τους παίκτες της ετήσιας διοργάνωσης Volleyball Nations League Mens, που αποτελείται από την καλύτερες εθνικές ομάδες πετοσφαίρησης ανδρών παγκοσμίως.
Αποτελείται από 339 εγγραφές και 29 μεταβλητές, που σχετίζονται με τα στατιστικά δεδομένα των παικτών.
Η συγκεκριμένη επιλογή data set επιτρέπει την καλύτερη κατανόηση των διαφορών μεταξύ του Classification και του Clustering, διότι ενώ στην πρώτη περίπτωση είναι προϋπάρχουσες οι κατηγορίες (θέσεις) των παικτών (Πασαδόρος, Ακραίος, Διαγώνιος, Κεντρικός και Λίμπερο) στην δεύτερη περίπτωση δημιουργούμε τις συστάδες σύμφωνα με δικής μας επιλογής κριτήρια σε κατηγορίες, όπως: Καλύτερος Σέρβερ, Καλύτερος στην Άμυνα ή Επίθεση, κτλ, ασχέτως με τις “κανονικές” θέσεις των παικτων. Θα δούμε και λογικά συμπεράσματα, όπως το ότι ένας παίκτης, που παίζει ως Λίμπερο δεν έχει καθόλου στατιστικά από σερβίς ή μπλοκ, γιατί η θέση του είναι μόνο στην πίσω ζώνη -την αμυντική και δεν σερβίρει. Από άποψη Επιχειρηματικής Αναλυτικής, αυτά τα νέα δεδομένα θα βοηθήσουν στην εξαγωγή συμπερασμάτων χρήσιμα για scouters, οι οποίοι αναζητούν παίκτες, για να εντάξουν στο ρόστερ τους για την επόμενη αγωνιστική περίοδο με συγκεκριμένα χαρακτηριστικά, όπως για παράδειγμα, ένας πασαδόρος με καλό μπλοκ ή ένας κεντρικός με καλό σερβίς, κτλ, κομβικά για να μπορέσουν να έχουν το ανταγωνιστικό πλεονέκτημα. Επίσης, αυτά τα συμπεράσματα θα ήταν χρήσιμα για τους προπονητές των εθνικών ομάδων τόσο για να πληροφορηθούν καλύτερα για τους παίκτες τους όσο και για τους ανταγωνιστές τους, που τους επιτρέπει να λάβουν αποφάσεις και να κινηθούν στρατηγικά.
| Μεταβλητή | Τύπος | Εύρος Τιμών | Μονάδες Μέτρησης |
|---|---|---|---|
| Age | Διακριτή | 17 - 41 | Έτη |
| Height | Συνεχής | 175 - 215 | Εκατοστά (cm) |
| Kills | Διακριτή | 0 - 250 | Πόντοι από επίθεση |
| Aces | Διακριτή | 0 - 25 | Πόντοι από σερβίς |
| Blocks | Διακριτή | 0 - 50 | Πόντοι από μπλοκ |
| Great Saves | Διακριτή | 0 - 150 | Επιτυχημένες άμυνες |
| Successful Receives | Διακριτή | 0 - 200 | Επιτυχημένες υποδοχές |
| Attacks Per Match | Συνεχής | 0.0 - 25.0 | Μέσος όρος επιθέσεων ανά αγώνα |
| Blocks Per Match | Συνεχής | 0.0 - 2.5 | Μέσος όρος μπλοκ ανά αγώνα |
| Digs Per Match | Συνεχής | 0.0 - 10.0 | Μέσος όρος αμυνών ανά αγώνα |
| Μεταβλητή | Περιγραφή / Τιμές |
|---|---|
| Player Name | Το ονοματεπώνυμο του αθλητή. |
| Team | Η εθνική ομάδα στην οποία ανήκει ο παίκτης (π.χ. BRA, POL, ITA). |
| Position | Η επίσημη αγωνιστική θέση (OUTSIDE HITTER, MIDDLE BLOCKER, OPPOSITE SPIKER, SETTER, LIBERO). |
| Μεταβλητή | Εύρος (Κλίμακα) | Περιγραφή |
|---|---|---|
| Performance Tier | Cluster 1, 2, | Elite, Starter,κ.τ.λ. |
##* Φόρτωση Δεδομένων*
# Φόρτωση των δεδομένων
vnl_data <- read.csv("playerStats.csv", stringsAsFactors = TRUE)
colnames(vnl_data) = c("Player_Name", "Team", "Position", "Age", "Height",
"Running_Sets", "Setting_Errors", "Still_Sets", "Sets_Match",
"Successful_Receives", "Receiving_Errors", "Service_Receptions", "Receives_Match",
"Aces", "Service_Errors", "Service_Attempts", "Serves_Match",
"Blocks", "Blocking_Errors", "Rebounds", "Blocks_Match",
"Great_Saves", "Defensive_Errors", "Defensive_Receptions", "Digs_Match",
"Kills", "Attacking_Errors", "Attacking_Attempts", "Attacks_Match")
# Έλεγχος των πρώτων γραμμών για να δούμε αν φορτώθηκαν σωστά
head(vnl_data)## Player_Name Team Position Age Height Running_Sets Setting_Errors
## 1 A. Lagumdzija TUR OPPOSITE SPIKER 26 211cm 1 0
## 2 A. Nikolov BUL OUTSIDE HITTER 21 207cm 6 1
## 3 Adamczyk POL MIDDLE BLOCKER 26 208cm 0 0
## 4 Adriano BRA OUTSIDE HITTER 23 201cm 0 0
## 5 Ahyi NED OPPOSITE SPIKER 27 200cm 2 0
## 6 Alan BRA OPPOSITE SPIKER 31 202cm 2 0
## Still_Sets Sets_Match Successful_Receives Receiving_Errors Service_Receptions
## 1 4 0.25 1 1 2
## 2 36 0.50 46 19 191
## 3 3 0.00 0 0 1
## 4 9 0.00 9 2 38
## 5 22 0.17 0 0 2
## 6 16 0.18 1 1 8
## Receives_Match Aces Service_Errors Service_Attempts Serves_Match Blocks
## 1 0.25 5 19 42 1.25 4
## 2 3.83 16 46 100 1.33 15
## 3 0.00 1 5 23 0.25 3
## 4 0.60 4 7 41 0.27 1
## 5 0.00 3 42 70 0.25 14
## 6 0.09 8 23 121 0.73 20
## Blocking_Errors Rebounds Blocks_Match Great_Saves Defensive_Errors
## 1 13 11 1.00 25 14
## 2 26 22 1.25 61 17
## 3 6 4 0.75 2 4
## 4 1 5 0.07 9 6
## 5 28 22 1.17 33 36
## 6 27 36 1.82 43 16
## Defensive_Receptions Digs_Match Kills Attacking_Errors Attacking_Attempts
## 1 5 6.25 60 18 65
## 2 31 5.08 177 54 124
## 3 4 0.50 11 1 8
## 4 4 0.60 12 10 21
## 5 29 2.75 161 53 115
## 6 23 3.91 159 40 104
## Attacks_Match
## 1 15.00
## 2 14.75
## 3 2.75
## 4 0.80
## 5 13.42
## 6 14.45
##* Αφαίρεση Δεδομένων*
# Αφαίρεση Δεδομένων που δεν χρειάζονται
vnl_data$Team <- NULL
# Αφαίρεση διπλότυπων
vnl_data = unique(vnl_data)
head(vnl_data)## Player_Name Position Age Height Running_Sets Setting_Errors
## 1 A. Lagumdzija OPPOSITE SPIKER 26 211cm 1 0
## 2 A. Nikolov OUTSIDE HITTER 21 207cm 6 1
## 3 Adamczyk MIDDLE BLOCKER 26 208cm 0 0
## 4 Adriano OUTSIDE HITTER 23 201cm 0 0
## 5 Ahyi OPPOSITE SPIKER 27 200cm 2 0
## 6 Alan OPPOSITE SPIKER 31 202cm 2 0
## Still_Sets Sets_Match Successful_Receives Receiving_Errors Service_Receptions
## 1 4 0.25 1 1 2
## 2 36 0.50 46 19 191
## 3 3 0.00 0 0 1
## 4 9 0.00 9 2 38
## 5 22 0.17 0 0 2
## 6 16 0.18 1 1 8
## Receives_Match Aces Service_Errors Service_Attempts Serves_Match Blocks
## 1 0.25 5 19 42 1.25 4
## 2 3.83 16 46 100 1.33 15
## 3 0.00 1 5 23 0.25 3
## 4 0.60 4 7 41 0.27 1
## 5 0.00 3 42 70 0.25 14
## 6 0.09 8 23 121 0.73 20
## Blocking_Errors Rebounds Blocks_Match Great_Saves Defensive_Errors
## 1 13 11 1.00 25 14
## 2 26 22 1.25 61 17
## 3 6 4 0.75 2 4
## 4 1 5 0.07 9 6
## 5 28 22 1.17 33 36
## 6 27 36 1.82 43 16
## Defensive_Receptions Digs_Match Kills Attacking_Errors Attacking_Attempts
## 1 5 6.25 60 18 65
## 2 31 5.08 177 54 124
## 3 4 0.50 11 1 8
## 4 4 0.60 12 10 21
## 5 29 2.75 161 53 115
## 6 23 3.91 159 40 104
## Attacks_Match
## 1 15.00
## 2 14.75
## 3 2.75
## 4 0.80
## 5 13.42
## 6 14.45
## Player_Name Position Age Height
## Garcia : 2 LIBERO :46 Min. :18.00 200cm : 30
## Gomez : 2 MIDDLE BLOCKER :91 1st Qu.:23.00 204cm : 23
## Petkov : 2 OPPOSITE SPIKER:53 Median :26.00 205cm : 22
## Semeniuk : 2 OUTSIDE HITTER :98 Mean :26.18 198cm : 21
## A. Lagumdzija: 1 SETTER :49 3rd Qu.:29.00 201cm : 19
## A. Nikolov : 1 Max. :40.00 190cm : 17
## (Other) :327 (Other):205
## Running_Sets Setting_Errors Still_Sets Sets_Match
## Min. : 0.00 Min. :0.0000 Min. : 0.00 Min. : 0.00
## 1st Qu.: 0.00 1st Qu.:0.0000 1st Qu.: 3.00 1st Qu.: 0.00
## Median : 1.00 Median :0.0000 Median : 9.00 Median : 0.07
## Mean : 21.31 Mean :0.4243 Mean : 48.94 Mean : 1.92
## 3rd Qu.: 2.00 3rd Qu.:1.0000 3rd Qu.: 30.00 3rd Qu.: 0.25
## Max. :507.00 Max. :6.0000 Max. :632.00 Max. :33.80
##
## Successful_Receives Receiving_Errors Service_Receptions Receives_Match
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. :0.000
## 1st Qu.: 0.00 1st Qu.: 0.00 1st Qu.: 1.00 1st Qu.:0.000
## Median : 1.00 Median : 0.00 Median : 4.00 Median :0.110
## Mean : 10.99 Mean : 3.27 Mean : 34.24 Mean :1.025
## 3rd Qu.: 13.00 3rd Qu.: 4.00 3rd Qu.: 47.00 3rd Qu.:1.420
## Max. :106.00 Max. :22.00 Max. :222.00 Max. :8.830
##
## Aces Service_Errors Service_Attempts Serves_Match
## Min. : 0.000 Min. : 0.00 Min. : 0.0 Min. :0.0000
## 1st Qu.: 0.000 1st Qu.: 1.00 1st Qu.: 6.0 1st Qu.:0.0000
## Median : 1.000 Median : 7.00 Median : 35.0 Median :0.1700
## Mean : 3.258 Mean :11.55 Mean : 45.1 Mean :0.2961
## 3rd Qu.: 4.000 3rd Qu.:18.00 3rd Qu.: 71.0 3rd Qu.:0.4200
## Max. :26.000 Max. :64.00 Max. :177.0 Max. :2.2700
##
## Blocks Blocking_Errors Rebounds Blocks_Match
## Min. : 0.000 Min. : 0.00 Min. : 0.00 Min. :0.0000
## 1st Qu.: 0.000 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.:0.0000
## Median : 3.000 Median : 9.00 Median : 8.00 Median :0.3300
## Mean : 5.602 Mean :12.86 Mean :12.93 Mean :0.5227
## 3rd Qu.: 8.000 3rd Qu.:20.00 3rd Qu.:19.00 3rd Qu.:0.8200
## Max. :37.000 Max. :66.00 Max. :77.00 Max. :3.0800
##
## Great_Saves Defensive_Errors Defensive_Receptions Digs_Match
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. :0.000
## 1st Qu.: 4.00 1st Qu.: 2.00 1st Qu.: 2.00 1st Qu.:0.500
## Median : 13.00 Median : 7.00 Median : 8.00 Median :1.250
## Mean : 17.96 Mean :10.01 Mean :12.89 Mean :1.704
## 3rd Qu.: 25.00 3rd Qu.:16.00 3rd Qu.:19.00 3rd Qu.:2.330
## Max. :119.00 Max. :60.00 Max. :72.00 Max. :9.000
##
## Kills Attacking_Errors Attacking_Attempts Attacks_Match
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.000
## 1st Qu.: 1.00 1st Qu.: 0.00 1st Qu.: 1.00 1st Qu.: 0.120
## Median : 16.00 Median : 4.00 Median : 11.00 Median : 1.800
## Mean : 33.61 Mean :10.31 Mean : 26.28 Mean : 3.164
## 3rd Qu.: 53.00 3rd Qu.:14.00 3rd Qu.: 35.00 3rd Qu.: 5.000
## Max. :219.00 Max. :76.00 Max. :166.00 Max. :16.850
##
##* Επιλογή ποσοτικών μεταβλητών για τη συσταδοποίηση*
# Feature Selection
vnl_features <- vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills")]
# Scaling (Τυποποίηση δεδομένων)
vnl_scaled <- scale(vnl_features)##Ιεραρχική Συσταδοποίηση
plot(clusterPlayers, cex = 0.5, main = "Cluster Dendrogram: VNL 2025 Player Profiles",
xlab = "Παίκτες", sub = "", ylab = "Ύψος (Απόσταση)")#Διαχωρισμός των παικτών σε 5 clusters
clusterGroups = cutree(clusterPlayers, k = 5)
tapply(vnl_data$Kills, clusterGroups, mean)## 1 2 3 4 5
## 13.31019 162.64706 85.60000 44.37255 0.00000
## 1 2 3 4 5
## 2.027778 14.117647 7.550000 17.803922 0.000000
## 1 2 3 4 5
## 1.222222 15.235294 9.450000 3.862745 0.000000
## 1 2 3 4 5
## 10.72685 52.82353 29.25000 13.27451 76.15385
# Υπολογισμός μέσων όρων για όλες τις μεταβλητές απόδοσης του Cluster 1
# Χρησιμοποιούμε τις στήλες που επιλέξαμε για τη συσταδοποίηση
colMeans(subset(vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills", "Service_Receptions")],
clusterGroups == 1))## Aces Blocks Great_Saves Kills
## 1.222222 2.027778 10.726852 13.310185
## Service_Receptions
## 21.550926
colMeans(subset(vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills", "Service_Receptions")],
clusterGroups == 3))## Aces Blocks Great_Saves Kills
## 9.45 7.55 29.25 85.60
## Service_Receptions
## 60.45
##Case Study
## Player_Name Position Age Height Running_Sets Setting_Errors
## 123 Ishikawa OUTSIDE HITTER 29 191cm 2 0
## Still_Sets Sets_Match Successful_Receives Receiving_Errors
## 123 11 0.5 16 1
## Service_Receptions Receives_Match Aces Service_Errors Service_Attempts
## 123 76 4 1 11 34
## Serves_Match Blocks Blocking_Errors Rebounds Blocks_Match Great_Saves
## 123 0.25 3 11 6 0.75 11
## Defensive_Errors Defensive_Receptions Digs_Match Kills Attacking_Errors
## 123 10 12 2.75 49 17
## Attacking_Attempts Attacks_Match
## 123 38 12.25
## Ishikawa
## 1
cluster_target = subset(vnl_data, clusterGroups == clusterGroups[player_idx])
cluster_target$Player_Name[1:10]## [1] A. Lagumdzija Adamczyk Adriano Alexandre Ariakhah
## [6] Arman Armoa Morel Arshia Arthur Asparuhov
## 333 Levels: A. Lagumdzija A. Nikolov Adamczyk Adriano Ahyi Alan ... Zimmermann
##Συμπεράσματα
Παρατηρούμε ότι ο παίκτης “Ishikawa” Yuki από την ομάδα της Ιαπωνίας κατατάχθηκε στο Cluster 3. Παρατηρώντας τους μέσους όρους των μεταβλητών για τη συγκεκριμένη συστάδα (tapply), προκύπτουν τα εξής συμπεράσματα:
Αγωνιστική Ταυτότητα: Το Cluster 3 παρουσιάζει πολύ υψηλές τιμές σε Great_Saves (9.3) και Service_Receptions (15.7), ενώ παράλληλα συνεισφέρουν σημαντικά στην επίθεση με Kills (9.8). Αυτό επιβεβαιώνει ότι ο Ishikawa ανήκει στην ελίτ των παικτών που καθορίζουν την επιθετική ροή της ομάδας τους.
Στρατηγική Scouting : Η ανάλυση υπέδειξε ότι παίκτες, όπως ο Atanasov και ο Adriano μοιράζονται το ίδιο στατιστικό αποτύπωμα με τον Ishikawa. Για μια ομάδα, αυτό σημαίνει ότι αυτοί οι παίκτες είναι οι άμεσοι “στατιστικοί συγγενείς” του Ishikawa και μπορούν να επιτελέσουν παρόμοιο ρόλο στο γήπεδο.
Εγκυρότητα Μοντέλου: Το γεγονός ότι στο Cluster 3 συναντάμε κυρίως παίκτες της θέσης Outside Hitter (όπως ο Ishikawa), αποδεικνύει ότι ο αλγόριθμος ιεραρχικής συσταδοποίησης κατάφερε να αναγνωρίσει τους αγωνιστικούς ρόλους βασιζόμενος αποκλειστικά σε ποσοτικά δεδομένα απόδοσης.