/mjlog

天鳳牌譜ログ解析スクリプト

Primary LanguagePythonMIT LicenseMIT

天鳳牌譜ログ解析スクリプト

使い方

  1. 牌譜ログを手に入れる
  2. 解析スクリプトにかける

Example

$ ./a.py -L mjlog_pf4-20_n15 -p 右折するひつじ
================================================================================
解析対象> 右折するひつじ
解析ログ> 試合数: 2778 / 局数: 28733
対戦卓  > 一般卓: 55 / 上級卓: 120 / 特上卓: 352 / 鳳凰卓: 2251
--------------------------------------------------------------------------------
【順位データ】
1位: 806 (29.014%) / 2位: 705 (25.378%) / 3位: 702 (25.270%) / 4位: 565 (20.338%)
  平均順位: 2.369 / 連対率: 54.392% / 飛び: 134 (4.824%)
  累積ポイント: 10896.0 / 平均ポイント: 3.922
--------------------------------------------------------------------------------
【和銃データ】
和了率: 21.839% (6275回) / 和了巡目: 11.383
  自摸和: 2442回 (38.916%) / 栄和: 3833回 (61.084%)
  和了時> 副露: 2907回 (46.327%) / 立直: 2415回 (38.486%) / ダマ: 953回 (15.187%)
  平均和了: 5736点 / 最大和了: 48000点
放銃率: 10.904% (3133回) / 放銃巡目: 11.389
  放銃時  > 副露: 1208回 (38.557%) / 立直: 472回 (15.065%) / 面前: 1453回 (46.377%)
  放銃相手> 副露: 1554回 (49.601%) / 立直: 1020回 (32.557%) / ダマ: 559回 (17.842%)
  放銃時向聴数: 0.71 / 放銃時聴牌: 1531回(48.867%)
  平均放銃: 4939点 / 最大放銃: 48000点
被自摸率: 25.215% (7245回)
  親: 1657回 (22.871%) / 平均支出: 3046点 / 最大支出: 16100点
  子: 5588回 (77.129%) / 平均支出: 2130点 / 最大支出: 16200点
--------------------------------------------------------------------------------
【立直データ】
立直率: 16.277% (4677回) / 立直巡目: 8.828
  先制: 3952回 (84.499%) / 追っかけ: 725回 (15.501%)
  立直後> 和了: 2415回 (51.636%) / 放銃: 472回 (10.092%) / 流局: 718回 (15.352%)
  立直収支: 3754点 / 立直収入: 8975点 / 立直支出: 5614点
--------------------------------------------------------------------------------
【副露データ】
副露率: 36.042% (10356回)
  副露後> 和了: 2907回 (28.071%) / 放銃: 1208回 (11.665%) / 流局: 1851回 (17.874%)
  副露収支: 285点 / 副露収入: 4904点 / 副露支出: 5081点
  裸: 42回 (0.406%)
  槓> 暗槓: 374回 / 加槓 244回 / 大明槓: 64回
--------------------------------------------------------------------------------
【流局データ】
流局率: 16.584% (4765回)
  聴牌: 1747回 (36.663%) / 不聴: 2707回 (56.810%)
  途中流局: 310回 (6.506%)
  流し満貫: 1回 (0.021%)
--------------------------------------------------------------------------------
【その他データ】
配牌時向聴数: 3.582
  聴牌: 0回 (0.000%)
  一向聴: 176回 (0.613%)
  二向聴: 2673回 (9.303%)
  三向聴: 10410回 (36.230%)
  四向聴: 11442回 (39.822%)
  五向聴: 3799回 (13.222%)
  六向聴: 233回 (0.811%)

秋刀魚だと動かないかも

mjlog on  feat/python3.11-and-poetry [?] is 📦 v0.1.0 via 🐍 v3.11.5 (mjlog-py3.11) on ☁️
❯ python ./a.py -L mjlog_pf3-20_n15 -p 藤井聡太
================================================================================
解析対象> 藤井聡太
解析ログ> 試合数: 0 / 局数: 0
対戦卓  > 一般卓: 0 / 上級卓: 0 / 特上卓: 0 / 鳳凰卓: 0
--------------------------------------------------------------------------------
【順位データ】
No Data
--------------------------------------------------------------------------------
【和銃データ】
No Data
--------------------------------------------------------------------------------
【立直データ】
No Data
--------------------------------------------------------------------------------
【副露データ】
No Data
--------------------------------------------------------------------------------
【流局データ】
No Data
--------------------------------------------------------------------------------
【その他データ】

その他

4 麻のサンプルで試してみたんですが shanten.py で assertion error が出まくるのでライブラリの方にコメントアウトを入れました


        count_of_tiles = sum(tiles_34)

        # assert count_of_tiles <= 14, f"Too many tiles = {count_of_tiles}"

        self._remove_character_tiles(count_of_tiles)

mjlog on  feat/python3.11-and-poetry [!?] is 📦 v0.1.0 via 🐍 v3.11.5 (mjlog-py3.11) on ☁️
❯ python ./a.py -L mjlog_pf4-20_n15 -p 右折するひつじ --debug
略
DEBUG: RYUUKYOKU {'ba': '0,1', 'sc': '411,-10,228,-10,167,30,184,-10', 'hai2': '20,26,28,55,56,61,64,70,75,77,82,108,110'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG[最終形]: {0: ['109', '118', '121', '126', '133', '14', '31', '5', '73', '76', '79', '87', '94'], 1: ['122', '125', '128', '13', '130', '17', '2', '27', '35', '46', '49', '6', '65'], 2: ['103', '112', '115', '131', '134', '22', '37', '50', '53', '61', '80', '86', '9'], 3: ['10', '102', '104', '119', '16', '36', '4', '47', '51', '75', '92', '95', '97']}
DEBUG[最終形]: {0: ['45', '78', '81', '77', '58', '43', '52', '26', '74', '67'], 1: ['48', '131', '110', '84', '12', '90', '38', '31', '50', '89', '107', '93', '39'], 2: ['41', '70', '64', '55', '7', '90', '42', '124', '82', '60', '32', '116', '113'], 3: ['3', '117', '129', '59', '41', '127', '106', '19', '123', '34']}
DEBUG[最終形]: {0: ['73', '78', '79', '77', '5', '31', '-1', '81', '45', '121', '74'], 1: ['122', '65', '125', '84', '110', '90', '-1', '38', '17', '46', '89', '107', '93', '39'], 2: ['131', '-1', '134', '103', '22', '37', '41', '-1', '42', '50', '-1', '82', '60', '32', '124', '116'], 3: ['75', '36', '129', '59', '16', '127', '104', '19', '123', '34']}
DEBUG[最終形]: ['112', '115', '53', '61', '80', '86', '9', '70', '64', '55', '7', '90', '113']
DEBUG: {'ba': '1,1', 'hai': '3,4,10,92,95,97,102,106,116,117,119', 'm': '25071', 'machi': '116', 'ten': '30,2000,0', 'yaku': '12,1,52,1', 'doraHai': '33', 'who': '3', 'fromWho': '2', 'sc': '401,0,218,0,197,-23,174,33'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG: ['あまみ~', '奈落の王', '右折するひつじ', 'zhouyi']
DEBUG: {'reach': {0: False, 1: False, 2: False, 3: False}, 'naki': {0: False, 1: True, 2: True, 3: True}, 'oya': False}
DEBUG: AGARI {'ba': '1,1', 'hai': '3,4,10,92,95,97,102,106,116,117,119', 'm': '25071', 'machi': '116', 'ten': '30,2000,0', 'yaku': '12,1,52,1', 'doraHai': '33', 'who': '3', 'fromWho': '2', 'sc': '401,0,218,0,197,-23,174,33'}
DEBUG: ['あまみ~', '奈落の王', '右折するひつじ', 'zhouyi']
DEBUG: {'reach': {0: False, 1: False, 2: False, 3: False}, 'naki': {0: False, 1: False, 2: True, 3: True}, 'oya': True}
DEBUG: RYUUKYOKU {'ba': '0,0', 'sc': '401,-15,218,-15,174,15,207,15', 'hai2': '48,50,51,72,77,80,112', 'hai3': '12,16,20,49,54,81,82,83,85,87'}
DEBUG: ['あまみ~', '奈落の王', '右折するひつじ', 'zhouyi']
DEBUG: {'reach': {0: False, 1: False, 2: False, 3: False}, 'naki': {0: False, 1: False, 2: False, 3: False}, 'oya': True}
DEBUG: RYUUKYOKU {'type': 'yao9', 'ba': '1,0', 'sc': '386,0,203,0,189,0,222,0', 'hai0': '1,10,34,36,67,68,73,95,104,106,107,108,118,121'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG[最終形]: {0: ['0', '100', '106', '112', '27', '32', '38', '5', '55', '67', '71', '89', '90'], 1: ['104', '123', '124', '126', '128', '14', '51', '60', '66', '70', '80', '82', '95'], 2: ['118', '12', '135', '22', '37', '46', '47', '59', '69', '75', '83', '97', '99'], 3: ['1', '108', '119', '127', '13', '131', '133', '33', '34', '53', '68', '8', '94']}
DEBUG[最終形]: {0: ['44', '26', '102', '65', '40', '3'], 1: ['87', '11', '4', '127', '103', '19'], 2: ['107', '93', '35', '101', '114'], 3: ['129', '92', '128', '35', '85', '52', '55']}
DEBUG[最終形]: {0: ['112', '26', '102', '65', '55', '-1', '3'], 1: ['104', '128', '-1', '123', '51', '87', '19'], 2: ['118', '69', '35', '-1', '135', '114'], 3: ['68', '119', '108', '127', '-1', '133', '1', '85']}
DEBUG[最終形]: ['12', '22', '37', '46', '47', '59', '75', '83', '97', '99', '107', '93', '101']
DEBUG: {'ba': '2,0', 'hai': '8,13,19,92,94', 'm': '21065,13323,49226', 'machi': '19', 'ten': '30,2000,0', 'yaku': '19,1,54,1', 'doraHai': '130', 'who': '3', 'fromWho': '1', 'sc': '386,0,203,-26,189,0,222,26'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG: ['あまみ~', '奈落の王', '右折するひつじ', 'zhouyi']
DEBUG: {'reach': {0: False, 1: False, 2: False, 3: False}, 'naki': {0: False, 1: True, 2: False, 3: True}, 'oya': True}
DEBUG: AGARI {'ba': '2,0', 'hai': '8,13,19,92,94', 'm': '21065,13323,49226', 'machi': '19', 'ten': '30,2000,0', 'yaku': '19,1,54,1', 'doraHai': '130', 'who': '3', 'fromWho': '1', 'sc': '386,0,203,-26,189,0,222,26'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG[最終形]: {0: ['116', '117', '123', '127', '132', '20', '25', '39', '40', '60', '62', '81', '84'], 1: ['10', '106', '115', '26', '3', '4', '43', '44', '53', '63', '86', '90', '91'], 2: ['101', '107', '113', '119', '17', '22', '28', '47', '54', '72', '73', '95', '97'], 3: ['105', '12', '2', '23', '29', '50', '51', '64', '66', '70', '71', '89', '94']}
DEBUG[最終形]: {0: ['36', '18', '59', '52', '9', '128', '35', '55', '30', '57', '21'], 1: ['67', '76', '92', '103', '80', '15', '37', '112', '32', '133', '111'], 2: ['122', '74', '98', '19', '1', '42', '126', '93', '45', '110', '58'], 3: ['102', '99', '31', '85', '48', '5', '14', '75', '100', '68', '49']}
DEBUG[最終形]: {0: ['123', '39', '127', '62', '9', '128', '35', '55', '52', '40', '132'], 1: ['115', '106', '53', '26', '103', '3', '92', '112', '32', '133', '111'], 2: ['119', '113', '122', '28', '1', '54', '126', '107', '22', '110', '58'], 3: ['2', '70', '31', '64', '66', '71', '5', '105', '102', '23', '100']}
DEBUG[最終形]: ['101', '17', '47', '72', '73', '95', '97', '74', '98', '19', '42', '93', '45']
DEBUG: {'ba': '0,1', 'hai': '4,10,15,37,43,44,58,63,67,76,80,86,90,91', 'machi': '58', 'ten': '30,2000,0', 'yaku': '1,1,7,1,53,0', 'doraHai': '129', 'doraHaiUra': '124', 'who': '1', 'fromWho': '2', 'sc': '386,0,167,30,189,-20,248,0', 'owari': '386,48.0,197,-20.0,169,-33.0,248,5.0'}
DEBUG[GetPosition]: ['右折するひつじ'] ('あまみ~', '奈落の王', '右折するひつじ', 'zhouyi') 2
DEBUG: ['あまみ~', '奈落の王', '右折するひつじ', 'zhouyi']
DEBUG: {'reach': {0: False, 1: True, 2: False, 3: False}, 'naki': {0: False, 1: False, 2: False, 3: False}, 'oya': False}
DEBUG: AGARI {'ba': '0,1', 'hai': '4,10,15,37,43,44,58,63,67,76,80,86,90,91', 'machi': '58', 'ten': '30,2000,0', 'yaku': '1,1,7,1,53,0', 'doraHai': '129', 'doraHaiUra': '124', 'who': '1', 'fromWho': '2', 'sc': '386,0,167,30,189,-20,248,0', 'owari': '386,48.0,197,-20.0,169,-33.0,248,5.0'}
================================================================================
DEBUG: {'和了時': {'副露': 2892, '立直': 2401, 'ダマ': 950}, '放銃時': {'副露': 1195, '立直': 467, '面前': 1441}, '放銃相手': {'副露': 1541, '立直': 1009, 'ダマ': 553}}
解析対象> 右折するひつじ
解析ログ> 試合数: 2763 / 局数: 28576
対戦卓  > 一般卓: 55 / 上級卓: 120 / 特上卓: 349 / 鳳凰卓: 2239
--------------------------------------------------------------------------------
【順位データ】
1位: 801 (28.990%) / 2位: 705 (25.516%) / 3位: 697 (25.226%) / 4位: 560 (20.268%)
  平均順位: 2.368 / 連対率: 54.506% / 飛び: 132 (4.777%)
  累積ポイント: 10988.0 / 平均ポイント: 3.977
--------------------------------------------------------------------------------
【和銃データ】
和了率: 21.847% (6243回) / 和了巡目: 11.378
  自摸和: 2427回 (38.876%) / 栄和: 3816回 (61.124%)
  和了時> 副露: 2892回 (46.324%) / 立直: 2401回 (38.459%) / ダマ: 950回 (15.217%)
  平均和了: 5733点 / 最大和了: 48000点
放銃率: 10.859% (3103回) / 放銃巡目: 11.371
  放銃時  > 副露: 1195回 (38.511%) / 立直: 467回 (15.050%) / 面前: 1441回 (46.439%)
  放銃相手> 副露: 1541回 (49.662%) / 立直: 1009回 (32.517%) / ダマ: 553回 (17.821%)
  放銃時向聴数: 0.77 / 放銃時聴牌: 1524回(49.114%)
  平均放銃: 4932点 / 最大放銃: 48000点
被自摸率: 25.192% (7199回)
  親: 1650回 (22.920%) / 平均支出: 3046点 / 最大支出: 16100点
  子: 5549回 (77.080%) / 平均支出: 2131点 / 最大支出: 16200点
--------------------------------------------------------------------------------
【立直データ】
立直率: 16.262% (4647回) / 立直巡目: 8.830
  先制: 3930回 (84.571%) / 追っかけ: 717回 (15.429%)
  立直後> 和了: 2401回 (51.668%) / 放銃: 467回 (10.049%) / 流局: 715回 (15.386%)
  立直収支: 3755点 / 立直収入: 8966点 / 立直支出: 5603点
--------------------------------------------------------------------------------
【副露データ】
副露率: 36.037% (10298回)
  副露後> 和了: 2892回 (28.083%) / 放銃: 1195回 (11.604%) / 流局: 1844回 (17.906%)
  副露収支: 290点 / 副露収入: 4905点 / 副露支出: 5076点
  裸: 42回 (0.408%)
  槓> 暗槓: 364回 / 加槓 236回 / 大明槓: 64回
--------------------------------------------------------------------------------
【流局データ】
流局率: 16.605% (4745回)
  聴牌: 1739回 (36.649%) / 不聴: 2697回 (56.839%)
  途中流局: 308回 (6.491%)
  流し満貫: 1回 (0.021%)
--------------------------------------------------------------------------------
【その他データ】
配牌時向聴数: 3.582
  聴牌: 0回 (0.000%)
  一向聴: 175回 (0.612%)
  二向聴: 2660回 (9.309%)
  三向聴: 10347回 (36.209%)
  四向聴: 11382回 (39.831%)
  五向聴: 3779回 (13.224%)
  六向聴: 233回 (0.815%)