Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα, ειναι εντελως ακυρος ο τιτλος που εβαλα αλλα δεν μπορουσα να σκεφτω κατι καλυτερο συγνωμη.

Ψαχνω την λογικη κι οχι τον κωδικα για ενα προβλημα μου. Εχω εναν πινακα που εχει διαφορους ποδοσφαιρικους αγωνες, ειναι της μορφης:

        HomeTeam   AwayTeam FTHG FTAG
1        Burnley    Swansea    0    1
2 Crystal Palace  West Brom    0    1
3        Everton  Tottenham    1    1
4           Hull  Leicester    2    1
5       Man City Sunderland    2    1
6  Middlesbrough      Stoke    1    1

και θελω να δημιουγησω εναν αλλο πινακα που να εχει την συχνοτητα εμφανισης του καθε σκορ

πχ το 0-0 εμφανιστηκηκε 22 φορες, το 1-0 18 φορες κοκ

ο νεος πινακας μου θελω να ειναι της μορφης:

   0 1 2 3 4 5 6 7 8 9 10
0  0 0 0 0 0 0 0 0 0 0  0
1  0 0 0 0 0 0 0 0 0 0  0
2  0 0 0 0 0 0 0 0 0 0  0
3  0 0 0 0 0 0 0 0 0 0  0
4  0 0 0 0 0 0 0 0 0 0  0
5  0 0 0 0 0 0 0 0 0 0  0
6  0 0 0 0 0 0 0 0 0 0  0
7  0 0 0 0 0 0 0 0 0 0  0
8  0 0 0 0 0 0 0 0 0 0  0
9  0 0 0 0 0 0 0 0 0 0  0
10 0 0 0 0 0 0 0 0 0 0  0

οπου αντι για μηδενικα θα ειναι οι συχνοτητες (τα rownames ειναι τα σκορ 0-10 του home, και τα colnames τα αντιστοιχα του away).

Επειδη οι πινακες μου δεν ειναι μεγαλοι, δεν με νοιαζει το optimization σε αυτο τον αλγοριθμο, αρκει να γινει η δουλεια.

Σκεφτηκω πως με καποιο τροπο θα τρεξω ολο τον αρχικο πινακα, και μαλιστα μια φορα και για καθε γραμμη, θα παιρνω το ζευγος

χ,ψ των σκορ (πχ το 0-1 στην πρωτη γραμμη) και θα το βαζω στον πινακα στην θεση χ+1, ψ+1, με την λογικη

score[i+1] = score[i+1] + 1, γι αυτο και προσπαθησα αρχικοποιώντας τον με μηδενικα. Αλλα απο εκει και περα σκαλωνω..

αν εχει κανεις καμια ιδεα θα ημουν ευγνωμων.

 

Δημοσ.

σε ποια γλωσσα θα το υλοποιησεις; καλα σκεφτεσαι και στεκει αυτο που λες αν ο πινακας με τα σκορ ξεκιναει απο το 1 και οχι απο το 0.

Δημοσ.

Καθώς διατρέχεις τις ομάδες, παίρνεις τις τιμές των στηλών FTHG και FTAG. Οι τιμές είναι η γραμμή και στήλη αντίστοιχα του δισδιάστατου πίνακα. Οπότε αυξάνεις το περιεχόμενο του δισδιάστατου πίνακα (σκορ) κατά 1.

score[FTHG][FTAG] = score[FTHG][FTAG] + 1

Δημοσ. (επεξεργασμένο)

Αν θες να δουλέψεις με πίνακες, δούλεψε με R καλύτερα.

Κάνε εισαγωγή το csv και μετά είναι 2 γραμμές δουλειά.

Αυτό που κάνω στο κάνει μονοδιάστατο πίνακα όμως με έτοιμα τα σκορ και τη συχνότητα:

Αφού διαβάσεις το csv σε  dataframe, έστω Πρωτάθλημα Ιταλία 2011-12:

my_results <- paste(italy_1112$FTHG,italy_1112$FTAG, sep = "-")
              
              table(my_results)

0-0 0-1 0-2 0-3 0-4 0-5 1-0 1-1 1-2 1-3 1-4 2-0 2-1 2-2 2-3 3-0 3-1 3-2 3-3 3-4 4-0 4-1 
 44  26  22   7   2   1  33  36  22  10   2  41  30  25   3  16  17   8   4   1   6   9 
4-2 4-3 4-4 5-0 5-1 5-2 5-3 5-4 6-1 6-3 
  4   1   2   1   2   1   1   1   1   1 

Συχνότητα εμφάνισης, πχ 1-3 = 10 φορές.

Επεξ/σία από Lanike71
Δημοσ. (επεξεργασμένο)

Καλημερα, ευχαριστω για τις απαντησεις. Τελικα σε R θα γινει, αλλα δεν ηθελα να περιορισω τις απαντησεις.

ευχαριστω καταρχην.

το σκεφτηκα αυτο με την table, αλλα το προβλημα μου ειναι πως θα μετρησει τα actual scores και στο 10-10 πχ δεν θα βαλει μηδεν. Ετσι δεν θα εχω ενα σταθερο array 1*121 στηλες, για να το γυρισω μετα σε πινακα.

αυτον τον πινακα θα τον δημιουργησω μετα και για αλλα αρχεια να κανω καποιες συγκρισεις, οποτε θελω να ναι τελικα ολοι ιδιοι ως προς τις διαστασεις.

 

 

Edit:

Νομιζω το βρηκα

 

for (i in 1:nrow(mydata)) {
  x =  mydata$FTHG
  y =  mydata$FTAG
  
  
  posX = x + 1
  posY = y + 1
  score[posX, posY] = score[posX, posY] + 1
}

 

Επεξ/σία από bahamut_zero
Δημοσ. (επεξεργασμένο)

Μία άλλη λύση εφόσον πας με python.

Βάλε όλα τα σκορ σε μία λίστα.

scores = [(0,1),(0,2),(0,4),(0,2),(0,0),(0,0),(0,0),(0,0)]#η σειρά δεν έχει σημασία μετά 
>>> from collections import Counter
>>> scor_count = Counter(scores)
>>> scor_count
Counter({(0, 0): 4, (0, 2): 2, (0, 1): 1, (0, 4): 1})

και από αυτό με λίγο κόπο παράγεις το τετράγωνο που θες.  score_square[j]=scor_count[(i,j)] θέλει λίγο δουλειά με τα i,j

Αν και προτείνω να το αφήσεις σαν Counter object έχει ωραία methods για να επεξεργασία στατιστικά κ.α

https://docs.python.org/3/library/collections.html?highlight=counter#collections.Counter

Επεξ/σία από k33theod
  • Like 2
Δημοσ.

Βασικά θες να ξέρεις και αυτά που δεν εμφανίζονται...Είσαι σίγουρος ότι σταματούν στα 10 γκολ οι ομάδες;

Επίσης, πρόσεξε να υπάρχουν γκολ στις στήλες, αλλιώς θα σου πετάξει error (παράδειγμα, ματς κερδισμένο στα χαρτιά).

Δημοσ.

Οχι, σε καποιο πρωταθλημα λογικα θα βρεθει τπτ περιεργο, αλλα θα δω αν το αντιμετωπισω τοτε.

θεωρητικα εχω μια καλη συγκιση στο 100% με αυτα τα 121.

Δημοσ.

Σε python με tuples και Counter (όπως ήδη προτάθηκε) είναι πολύ απλό και γρήγορο. Συν ότι δεν σε περιορίζει στον μέγιστο αριθμό γραμμών/στηλών και συν ότι δεν είναι ανάγκη να κρατάς καταχώρηση για γραμμές/στήλες που δεν έχεις κάτι. 

Δημοσ.

Αλγοριθμικά θα έκανα το εξής. Ας πούμε ότι οι πίνακες ονομάζονται
score  ο οποίος περιέχει Ν διαφορετικά match και τα στοιχεία που έδωσες παραπάνω, οπότε είναι μεγέθους score[N][4]
και scoreF( Πίνακας με τις συχνότητες εμφάνισης ) και έχει μέγεθος scoreF[10][10]

Και στους δύο πίνακες το πρώτο στοιχείο είναι το 1 ( όχι το 0 )

Η λογική  είναι να κάνουμε parsing τον πίνακα, να κοιτάμε στα fthg και τα ftag και αυτά στην ουσία θα μας δείχνουν το σημείο στο πίνακα που πρέπει να προσθέσουμε κατά 1
 

Για i = 1 μέχρι N
{
	fthg = score[i][3];
	ftha = score[i][4];
	
	scoreF[fthg][ftha] = scoreF[fthg][ftha] + 1;
}

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...