Data Science – 6 – Ομαδοποίηση – πρώτη επαφή

Αφού έχουμε πλέον δημιουργήσει ένα νέο dataset με το όνομα Greekf.csv με στήλες (ΑΓΩΝΙΣΤΙΚΗ, ΓΗΠΕΔΟΥΧΟΣ, ΦΙΛΟΞΕΝΟΥΜΕΝΟΣ, ΣΚΟΡ_ΓΗΠ, ΣΚΟΡ_ΦΙΛ, ΣΚΟΡ_ΣΥΝ, ΑΠΟΤ, ΑΠΟΤ_ΑΡ) όπου στο ΑΠΟΤ το 1, Χ, 2 σύμβολίζεται με Α, Χ, Δ και στο ΑΠΟΤ_ΑΡ ΤΟ 1, Χ, 2 συμβολίζεται με 0, 1, 2, είναι ώρα να πάμε παρακάτω. Οι στήλες που φτιάξαμε σίγουρα θα είναι πολύ χρήσιμες. Ωστόσο πιθανόν στην πορεία να φτιάξουμε και άλλες στήλες, αυτό θα το αποφασίσουμε αργότερα ανάλογα με τις ανάγκες μας. Πιθανότατα θα χρειαστούμε τους βαθμούς κάθε ομάδας και τα γκολ, νίκες, ήττες, ισοπαλίες, εντός και εκτός έδρας και ίσως κάποιο δείκτη που να δείχνει την φόρμα στην οποία βρίσκεται η ομάδα τις τελευταίες αγωνιστικές.

Ξεκινάμε ένα νέο αρχείο Python και για να διαβάσουμε ολόκληρο το νέο μας αρχείο Greekf.csv σε ένα dataframe επαναλαμβάνουμε τις εντολές:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

data_filename = ‘Greekf.csv’

games = pd.read_csv(data_filename,encoding=’utf-8′)

Επειδή κατά την προηγούμενη αποθήκευση δεν έβαλα κάποια κωδικοποίηση στο αρχείο, το pandas μου το αποθήκευσε με κωδικοποίηση utf-8.

Ας εξετάσουμε πως μπορούμε να κάνουμε μια ομαδοποίηση των δεδομένων μας ως προς μια ή περισσότερες στήλες. Η ομαδοποίηση γίνεται με την εντολή groupby. Η τεκμηρίωση της εντολής βρίσκεται στο (https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html).

Μπορούμε για παράδειγμα να γκρουπάρουμε τα δεδομένα μας ανά αγωνιστική:

grouped = games.groupby(‘ΑΓΩΝΙΣΤΙΚΗ’)

for ΓΗΠΕΔΟΥΧΟΣ, ΦΙΛΟΞΕΝΟΥΜΕΝΟΣ in grouped:

print(ΓΗΠΕΔΟΥΧΟΣ)

print(ΦΙΛΟΞΕΝΟΥΜΕΝΟΣ)

Και να τυπώσουμε ανά αγωνιστική το dataset μας.

Μπορούμε επίσης να εφαρμόσουμε συναρτήσεις πάνω στο γκρουπ. Π.χ

grouped.mean() , θα πάρουμε αποτέλεσμα

ds6a

Στο αποτέλεσμα βλέπουμε συγκεντρωμένα στατιστικά για κάθε αγωνιστική. Είχαμε βρει σε προηγούμενο άρθρο τον μέσο όρο γκολ συγκεντρωτικά σε όλο το πρωτάθλημα, τώρα βλέπουμε τα αντίστοιχα νούμερα για κάθε αγωνιστική. Αντίστοιχα μπορούμε να βρούμε άθροισμα γκολ ανά αγωνιστική ή οτιδήποτε άλλο επιθυμούμε.

Θα μπορούσαμε να κάνουμε άλλη ομαδοποίηση και να πάρουμε τα ματς ανά ομάδα γηπεδούχο:

grouped = games.groupby(‘ΓΗΠΕΔΟΥΧΟΣ’)

for ΓΗΠΕΔΟΥΧΟΣ in grouped:

print(ΓΗΠΕΔΟΥΧΟΣ)

Όλα αυτά τα αποτελέσματα θα μπορούσαμε να τα αποθηκεύσουμε και σε νέα dataframes για περαιτέρω επεξεργασία.

Γίνεται επίσης ομαδοποίηση και κατά περισσότερες στήλες. Για παράδειγμα αν γράψουμε:

grouped = games.groupby([‘ΓΗΠΕΔΟΥΧΟΣ’, ‘ΣΚΟΡ_ΓΗΠ’])

for (ΓΗΠΕΔΟΥΧΟΣ, ΣΚΟΡ_ΓΗΠ) in grouped:

print(ΓΗΠΕΔΟΥΧΟΣ, ΣΚΟΡ_ΓΗΠ)

Θα πάρουμε ως αποτέλεσμα για κάθε μια ομάδα ως γηπεδούχο τα αποτελέσματα της ανά ΣΚΟΡ_ΓΗΠ, δηλαδή τα ματς που η ΑΕΚ έβαλε 0 γκολ, τα ματς που έβαλε 1 γκολ κοκ, μετά τα ματς που ο Απόλλων έβαλε ως γηπεδούχος 0 γκολ, μετά αυτά που έβαλε 1 γκολ κοκ, για όλες τις ομάδες. Αν λοιπόν έχουμε 12 ομάδες και όλες έχουν βάλει ως γηπεδούχοι από 0 ως 4 γκολ (δηλαδή 5 ομάδες), τότε θα πάρουμε ως αποτέλεσμα 5*12 = 60 διαφορετικές ομάδες σε κάθε μια από τις οποίες θα εμφανίζονται οι λεπτομέρειες, όλες δηλαδή οι στήλες των αντίστοιχων αγώνων.

ds6b

Μπορούμε και πάλι να εφαρμόσουμε συναρτήσεις, ας πάρουμε μέσους όρους.

grouped.mean() θα πάρουμε ως αποτέλεσμα:

ds6c

Κατηγορίες: data science. Προσθήκη στους σελιδοδείκτες.