(Python) Ich habe 1 Million Hände analysiert ~ ① Handaggregation starten ~

Vielen Dank für das Surfen. Es ist pbird gelb.

Ich werde sofort ungefähr 1 Million Hände analysieren, die ich auf der berühmten Pokerseite "Poker Stars" gespielt habe. Dieses Mal haben wir die Starthände von Texas Holdem berechnet.

Die Starthand ist diejenige, die zufällig aus 52 Karten ohne Joker aus allen 54 Karten von Trump ausgeteilt wird.

Der Quellcode ist ebenfalls enthalten, verwenden Sie ihn also ebenfalls. Das Programmieren ist selbst ein Anfängerlevel, daher wäre ich Ihnen dankbar, wenn Sie mir einen Rat geben könnten.    ↓ 1 Million Hand Gesamtergebnis スクリーンショット 2020-08-02 17.39.05.png

Wenn die Handprotokolle aggregiert wurden, schien die Erscheinungsrate jeder Hand zu konvergieren. Die Erscheinungsrate jeder Hand finden Sie ** hier **. * Kommt bald.

PokerStars-Handlogs werden auf dem PC des Spielers gespeichert. Bitte lesen Sie ** hier **, wie Sie das Handprotokoll extrahieren. * Kommt bald.

Diese Protokolldaten sind praktisch, da die Daten sehr einfach zu verarbeiten sind.

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

・ ・ ・(Fortsetzung unten)

Unten ist der Quellcode. Das Einstellen des Werts von "Pfad" sollte funktionieren. Die Programmierung befindet sich noch auf Anfängerniveau. Bitte weisen Sie immer mehr darauf hin. Wenn Sie Fragen zum Inhalt des Codes haben, kontaktieren Sie uns bitte über DM usw. von Ihrem Qiita-Konto oder Twitter-Konto.

twitter:@pbirdyellow

pokermain.py


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

path='Schreiben Sie hier den Protokollpfad'
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) Ich habe 1 Million Hände analysiert ~ ① Handaggregation starten ~
(Python) Ich habe 1 Million Hände analysiert ~ Wie oft wird AA verteilt? ?? ~
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe Python gestartet