(Python) J'ai analysé 1 million de mains ~ ① Début de l'agrégation des mains ~

Merci pour la navigation. Il est jaune pbird.

Immédiatement, je vais analyser environ 1 million de mains que j'ai jouées sur le célèbre site de poker "Poker Stars". Cette fois, nous avons calculé les mains de départ du Texas Holdem.

Une main de départ est l'une des 54 cartes de Trump qui sont distribuées au hasard sur 52 cartes à l'exclusion du joker.

Le code source est également inclus, veuillez donc l'utiliser également. La programmation est moi-même un niveau débutant, donc je vous serais reconnaissant si vous pouviez me donner quelques conseils.    ↓ 1 million de résultat total de main スクリーンショット 2020-08-02 17.39.05.png

Lorsque les journaux de main ont été agrégés, le taux d'apparition de chaque main semblait converger. Veuillez voir ** ici ** pour le taux d'apparition de chaque main. * Bientôt disponible.

Les handlogs PokerStars sont stockés sur le PC du joueur. Veuillez consulter ** ici ** pour savoir comment extraire le journal de la main. * Bientôt disponible.

Ces données de journal sont pratiques car il est très facile de traiter les données.

txt:HoldemManager2.2020-07-31-09-22-31.PS.Hand1-1000.txt


PokerStars Zoom Hand #155136535392:  Hold'em No Limit ($0.05/$0.10) - 2016/06/24 9:17:52 ET
Table 'Aludra' 6-max Seat #1 is the button
Seat 1: xxx ($8.18 in chips)
Seat 2: xxx ($9.90 in chips)
Seat 3: pbirdyellow ($10 in chips)
Seat 4: xxx ($17.30 in chips)
Seat 5: xxx ($21.93 in chips)
Seat 6: xxx ($10 in chips)
ccc: posts small blind $0.05
pbirdyellow: posts big blind $0.10
*** HOLE CARDS ***
Dealt to pbirdyellow [Qc Ad]
xxx: folds
xxx: folds
xxx: raises $0.15 to $0.25
xxx: folds
xxx: folds
pbirdyellow: raises $0.55 to $0.80
xxx: folds
Uncalled bet ($0.55) returned to pbirdyellow
pbirdyellow collected $0.55 from pot
pbirdyellow: doesn't show hand
*** SUMMARY ***
Total pot $0.55 | Rake $0
Seat 1: xxx (button) folded before Flop

・ ・ ・(Suite ci-dessous)

Voici le code source. La définition de la valeur de "chemin" devrait fonctionner. La programmation est toujours au niveau débutant, veuillez donc en indiquer de plus en plus. Si vous avez des questions sur le contenu du code, veuillez nous contacter par DM, etc. à partir de votre compte qiita ou de votre compte Twitter.

twitter:@pbirdyellow

pokermain.py


from holdcards import Holdcards 
from plotgraph import Plotgraph
import os
import glob

path='Écrivez le chemin du journal ici'
filelist = glob.glob(os.path.join(path,"*.txt"),recursive=True)
totcards = []
graphdata = []
for item in filelist:
    with open(item) as f:
        data = f.readlines()
        card = Holdcards()
        h_cards = card.find_holdcards(data)
        totcards += h_cards

cardscount = card.count_holdcards(totcards)
graph= Plotgraph()
graph.writegraph(cardscount,card.handlist,card.hands)

Holdcards.py



class Holdcards:
       def __init__(self):
              self.trump={"A":"14","K":"13","Q":"12","J":"11","T":"10","9":"9","8":"8","7":"7","6":"6","5":"5","4":"4","3":"3","2":"2"}
              self.r_trump={"14":"A","13":"K","12":"Q","11":"J","10":"T","9":"9","8":"8","7":"7","6":"6","5":"5","4":"4","3":"3","2":"2"}
              self.hands = 0
              self.handlist = []


       def find_holdcards(self,data):
              holdcards = []
              for item in data:
                     if 'Dealt to' in item:
                            item = item[-7:-2]
                            if item[1] == item[4]:
                                   if int(self.trump.get(item[0])) > int(self.trump.get(item[3])):
                                          item = item[0] + item[3] + 's'
                                   else:
                                          item = item[3] + item[0] + 's'
                            else:
                                   if int(self.trump.get(item[0])) > int(self.trump.get(item[3])):
                                          item = item[0] + item[3] + 'o'
                                   elif item[0] == item[3]:
                                          item = item[0] + item[3]
                                   else:
                                          item = item[3] + item[0] + 'o'
                            holdcards.append(item)
              return holdcards

       def count_holdcards(self,list):
              
              totlist = []
              i = 0
              while i < 13:
                     j=0
                     rowlist = []
                     rowhandlist = []
                     while j < 13:
                            if i < j:
                                   hand = (self.r_trump.get(str(14-i))+self.r_trump.get(str(14-j))+"s")
                                   count = list.count(hand)
                                   rowlist.append(count)
                            elif i == j:
                                   hand = (self.r_trump.get(str(14-i))+self.r_trump.get(str(14-j)))
                                   count = list.count(hand)
                                   rowlist.append(count)    
                            else:
                                   hand = (self.r_trump.get(str(14-j))+self.r_trump.get(str(14-i))+"o")
                                   count = list.count(hand)
                                   rowlist.append(count)                                                                  
                            self.hands += count
                            rowhandlist.append(hand)
                            j += 1
                     self.handlist.append(rowhandlist)
                     totlist.append(rowlist)
                     i += 1
              return totlist

Plotgraph.py


import numpy as np
import matplotlib.pyplot as plt

class Plotgraph:
       def __init__(self):
              pass

       def writegraph(self,graphlist,handlist,hands):

              column_labels = list('AKQJT98765432')
              row_labels = list('AKQJT98765432')
              data = np.array(graphlist)
              fig,ax = plt.subplots()
              heatmap = ax.pcolor(data, cmap=plt.cm.Blues)
              ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
              ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)
              ax.invert_yaxis()
              ax.xaxis.tick_top()
              ax.set_xticklabels(row_labels, minor=False)
              ax.set_yticklabels(column_labels, minor=False)
              i = 0
              while i < 13:
                     j = 0
                     while j < 13:
                            plt.text(0.25+j,0.75+i,str(handlist[i][j]))
                            j += 1
                     i += 1
              plt.title("totalhands = "+str(hands), y=-0.1)

              fig.colorbar(heatmap, ax=ax)
              plt.show()



Recommended Posts

(Python) J'ai analysé 1 million de mains ~ ① Début de l'agrégation des mains ~
(Python) J'ai analysé 1 million de mains ~ Combien de fois AA est-il distribué? ?? ~
(Python) J'ai essayé d'analyser 1 million de mains ~ J'ai essayé d'estimer le nombre d'AA ~
J'ai commencé Python