1.はじめに
1.1.背景
私はオンラインや対面で麻雀をプレイしたり、Mリーグを観戦したりすることを趣味としている。
Mリーグを観戦している中で、各フェーズにおける順位変動を見ていく中で、レギュラーシーズンの順位と最終順位の関係が、シーズンを通じてどのように推移しているのかについて興味を持つようになった。
例えば、レギュラーシーズン1位チームが最終的に何回優勝しているのか、各フェーズ間の得点のアドバンテージはどれだけあるのかについてといった内容である。
Mリーグでは長期間にわたってレギュラーシーズンが行われる一方で、セミファイナルおよびファイナルではポイント持ち越しルールが採用されている。
そのため、レギュラーシーズンの結果は後続フェーズにどの程度反映されているのか、また、各フェーズ間の順位にはどの程度相関があるのかに興味を持ち、実際の成績データを用いて分析を行うこととした。
1.2.本記事の目的
本記事では、麻雀ウォッチに掲載されているMリーグの成績データ(参考文献参照)をもとに、2019-20シーズン以降のデータを対象として分析を行う。
(現行の制度になっているのは2019-20シーズン以降のため)
また、本記事では単にMリーグの成績分析を行うだけでなく、Python(pandas)を用いたデータ分析学習の一環として、データ収集、加工、集計および可視化の実践例として整理することも目的としている。
具体的には、以下の観点について確認する。
- Pythonを用いたデータ集計・分析手法
- 各フェーズ間におけるポイントおよび順位の相関
なお、本記事は、Mリーグおよび現行制度の良し悪しを評価・批判することを目的とするものではなく、実際の成績データをもとに、各フェーズ間の関係性や傾向を分析することを目的としている。
2.Mリーグのレギュレーションについて
Mリーグでは、2019-20シーズンよりセミファイナル制度が導入されている。
レギュラーシーズン終了後、上位チームがセミファイナルへ進出し、各フェーズでは前フェーズ終了時点のポイントの50%を持ち越す形式が採用されている。
具体的には以下のとおりである。
- レギュラーシーズン終了時点のポイントの50%をセミファイナルへ持ち越す
- セミファイナル終了時点のポイントの50%をファイナルへ持ち越す
なお、端数が発生した場合は、ポイントが増加する方向へ調整される。
(成績データサイトの「繰越」欄に記載された点数より確認)
また、レギュラーシーズンは9月~3月の7か月で120半荘、セミファイナルは4月に20半荘、ファイナルは5月に16半荘戦う。
3.データ分析方法
3.1.データ収集
麻雀ウォッチの成績データをもとに、シーズンごとのチーム順位およびポイントを収集し、分析用データとして整理する。
データを入力する際のカラム構成は以下のとおりである。
なお、reg_end_rankカラム、reg_end_pointsカラム、semi_end_rankカラム、semi_end_pointsカラム、final_end_rankカラム、final_end_pointsカラムをfloat型にしているのは、セミファイナル未導入シーズンや途中敗退チームに対して欠損値(NaN)を扱うためである。
| カラム名 | 型 | 内容 | 備考 |
|---|---|---|---|
season |
int |
シーズン | 例: 2025-26シーズンは 2025 と表記 |
season_label |
str |
シーズンラベル | 例: 2025-26シーズンは 2025-26 と表記 |
team |
str |
チーム名 | 例: ドリブンズ、サクラナイツなど |
reg_end_rank |
float |
レギュラー終了時順位 | |
reg_end_points |
float |
レギュラー終了時ポイント | |
semi_end_rank |
float |
セミ終了時順位 | セミファイナルが存在しないシーズン、またはレギュラー敗退チームは欠損値(NaN) |
semi_end_points |
float |
セミ終了時ポイント | セミファイナルが存在しないシーズン、またはレギュラー敗退チームは欠損値(NaN) |
final_end_rank |
float |
最終順位 | セミファイナルまでに敗退したチームは欠損値(NaN) |
final_end_points |
float |
最終ポイント | セミファイナルまでに敗退したチームは欠損値(NaN) |
データ構造および入力例を図に示す。
なお今回はExcelにデータを入力している。

上記の形式で2018-19シーズンから2025-26シーズン(2026/5/20時点での最新シーズン)までのデータを収集した。
3.2.分析環境
本分析では、Python を用いてデータ分析を実施した。
使用した主な環境およびライブラリは以下のとおりである。
| 項目 | 内容 | 用途 |
|---|---|---|
| 言語 | Python 3.x | データ分析 |
| 実行環境 | Jupyter Notebook | コード実行、可視化 |
| ライブラリ | pandas | データ加工、集計 |
| ライブラリ | numpy | 回帰直線の算出 |
| ライブラリ | matplotlib | グラフ描画 |
| ライブラリ | japanize_matplotlib | 日本語ラベル表示 |
| ライブラリ | seaborn | 散布図・回帰直線の描画 |
| ライブラリ | sklearn.metrics | 決定係数(R²)の算出 |
本記事では、データ加工、集計および可視化を中心として実施し、以降で具体的な分析コードを示す。
3.3.分析内容
3.3.1.データ取込
最初に3.1.で収集したExcelデータの取り込みを行う。
import pandas as pd
df = pd.read_excel(
"mleague.xlsx",
sheet_name="data",
na_values=["","-","NA"],
dtype={
"season":int,
"season_label":str,
"team":str,
"reg_end_rank":float,
"reg_end_points":float,
"semi_end_rank":float,
"semi_end_points":float,
"final_end_rank":float,
"final_end_points":float,
}
)
上記のように、pandasのread_excel()を使って、ExcelファイルをDataFrameとして読み込むことができる。
なお、CSVファイルを使用する場合は、read_csv()を使用する。
read_excel()の第1引数の"mleague.xlsx"は読み込むExcelファイル名である。
(1)sheet_name
読み込み対象となるシート名を指定する。
今回は、dataシートを対象としている。
なお、指定が無い場合は、Excelファイルの先頭のシートが読み込まれる。
(2)na_values
欠損値として扱う値を指定する。
今回は空白、ハイフン(-)、NAを欠損値(NaN)として扱う。
na_values=["","-","NA"],
本記事では、セミファイナル未導入シーズンや途中敗退チームを表現するため、一部データに欠損値を使用している。
(3)dtype
読み込み時のデータ型を指定する。
今回は、3.1.で示した表のとおりデータ型を指定する。
ここでデータ型を指定することで、分析時の型崩れやデータ型の不整合を防止できる。
dtype={
"season": int,
...
}
3.3.2.DataFrameの確認
データ読込後、分析を行う前に DataFrame の内容および構造を確認する。
分析前にデータ構造を確認することで、読み込み時のカラムずれ、データ型の不整合、欠損値の設定漏れ、データ件数不足などの問題を事前に検知できる。
display(df.head())
df.info()
(1)display(df.head())
head() を使用することで、DataFrame の先頭5件を表示できる。
今回は以下を確認する。
- 想定どおりデータが読み込まれているか
- カラムずれが発生していないか
- 欠損値が正しく設定されているか
display(df.head())を実行した結果は以下のとおりである。
データの先頭5件は、2018-19シーズンのチームデータである。
2018-19シーズンはセミファイナル未導入シーズンのため、semi_end_rank および semi_end_points に NaN が設定されていることが確認できる。
また、一部チームでは final_end_rank および final_end_points が NaN となっており、ファイナル未進出チームに対する欠損値が反映されていることが確認できる。
なお、df.tail() を使用することで DataFrame の末尾5件を表示できる。
head() および tail() の括弧内に件数を指定することで、先頭および末尾から任意件数を表示できる。
(2)df.info()
info() を使用することで DataFrame の構造情報を確認できる。
主に以下を確認する。
- 行数
- カラム数
- データ型
- 欠損値件数
df.info()を実行した結果は以下のとおりである。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 67 entries, 0 to 66
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 season 67 non-null int64
1 season_label 67 non-null object
2 team 67 non-null object
3 reg_end_rank 67 non-null float64
4 reg_end_points 67 non-null float64
5 semi_end_rank 42 non-null float64
6 semi_end_points 42 non-null float64
7 final_end_rank 32 non-null float64
8 final_end_points 32 non-null float64
dtypes: float64(6), int64(1), object(2)
memory usage: 4.8+ KB
上記より以下のことが分かる。
-
RangeIndex: 67 entriesより、全67件のチームデータが存在していることが確認できる -
Dtype欄より、dtypeで設定したデータ型が全て正しく反映されている -
Non-Null Count欄より、semi_end_rankおよびsemi_end_pointsの件数が減少していることから、セミファイナル未導入シーズンやレギュラー敗退チームに起因する欠損値が反映されていることが確認できる - また、
final_end_rankおよびfinal_end_pointsの件数減少から、ファイナル未進出チームに対する欠損値が反映されていることが確認できる
以上より、データ読込および欠損値設定が想定どおり行われていることを確認できたため、以降で分析を実施する。
4.分析結果
4.1.レギュラーシーズン1位チームの最終成績
まず、下記のように2019-20シーズン以降のデータを抽出する。
以降では、この条件で抽出したデータdf_currentを使用して分析を行う。
df_current = df[df["season"] >= 2019]
このデータをもとに、下記より各年のレギュラーシーズン1位のチームを抽出する。
df_current[df_current["reg_end_rank"] == 1]
抽出した結果は以下のとおりである。
上記を見ると、現行の制度になった7シーズンのうち、レギュラーシーズン1位チームが最終的に優勝した回数は2回(約28.6%)であった。
次節以降で、各フェーズ間の傾向について分析を行う。
4.2.ポイント相関分析(ピアソン)
本節では、前フェーズ終了時点と次フェーズ終了時点のポイントの推移についての相関を分析する。
このために、前フェーズ終了時点のポイントと次フェーズ終了時点のポイントの相関を表す散布図を作成する。
具体的には、下記のようにplot_point_correlation関数を作成して、横軸のカラム・縦軸カラム・横軸のタイトル名・縦軸のタイトル名を引数として格納する。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
import seaborn as sns
from sklearn.metrics import r2_score
def plot_point_correlation(
x_col,
y_col,
x_title,
y_title
):
#(1)分析対象データの作成
df_plot = df_current[[x_col, y_col]].dropna()
#(2)実績値・件数の取得
x_data = df_plot[x_col]
y_data = df_plot[y_col]
n = len(df_plot)
#(3)回帰係数と予測値の算出
a, b = np.polyfit(x_data, y_data, 1)
y_pred = a * x_data + b
#(4)相関係数と決定係数の算出
corr = x_data.corr(y_data)
r2 = r2_score(y_data, y_pred)
#(5)散布図と回帰直線の描画
plt.figure(figsize=(8, 6))
sns.regplot(
x=x_data,
y=y_data
)
#(6)タイトル・軸ラベルの設定
plt.title(f"{x_title}終了時ポイントと{y_title}終了時ポイントの関係")
plt.xlabel(f"{x_title}終了時ポイント [pt]")
plt.ylabel(f"{y_title}終了時ポイント [pt]")
#(7)分析結果テキストの表示
plt.text(
0.02,
0.97,
f"件数:n={n:.0f}\n"
f"回帰式:y={a:.3f}x{b:+.3f}\n"
f"相関係数:R={corr:.3f}\n"
f"決定係数:R²={r2:.3f}",
transform=plt.gca().transAxes,
verticalalignment="top",
bbox={
"facecolor": "white",
"alpha": 0.8
}
)
#(8)グリッド表示とグラフ出力
plt.grid(True)
plt.show()
#(9)戻り値
return n, f"y={a:.3f}x{b:+.3f}", round(corr, 3), round(r2, 3)
(1)分析対象データの作成
df_plot = df_current[[x_col, y_col]].dropna()
df_current[[x_col, y_col]] で、DataFrameから分析対象となる2列のみを抽出している。
本分析では、前フェーズ終了時ポイントと次フェーズ終了時ポイントの両方を持つチームを分析対象とする。
レギュラー敗退チームやファイナル未進出チームは一部データが欠損値(NaN)となるため、dropna() を実行して該当データを除外している。
(2)実績値・件数の取得
x_data = df_plot[x_col]
y_data = df_plot[y_col]
n = len(df_plot)
df_plot[x_col] および df_plot[y_col] により、分析対象となる2列をそれぞれ横軸用データと縦軸用データに格納する。
また、len(df_plot) により分析対象データの件数を取得している。
この件数は後ほど散布図内に表示し、何件のデータを用いて分析を行ったかを確認できるようにしている。
(3)回帰係数と予測値の算出
a, b = np.polyfit(x_data, y_data, 1)
y_pred = a * x_data + b
np.polyfit() は、与えられたデータに対して最も当てはまりの良い回帰直線を求める関数である。
本分析では一次関数
y = ax + b
による回帰直線を求めるため、第3引数に 1 を指定している。
戻り値として、
- a:傾き
- b:切片
が取得できる。
例えば、
y = 0.123x + 45.678
であれば、レギュラー終了時ポイントが100pt増加した場合、セミファイナル終了時ポイントは平均的に約12.3pt増加することを意味する。
続いて、
y_pred = a * x_data + b
により、回帰直線から算出される予測値を求めている。
この予測値は後述する決定係数(R²)の計算に利用する。
(4)相関係数と決定係数の算出
corr = x_data.corr(y_data)
r2 = r2_score(y_data, y_pred)
x_data.corr(y_data)により、前フェーズ終了時のポイントと次フェーズ終了時のポイントの相関係数を計算している。
相関係数は2つの変数の関係性の強さを表す指標であり、1に近いほど強い正の相関、-1に近いほど強い負の相関を示す。
r2_score(y_data, y_pred)により、実績値と予測値をもとに決定係数(R²)を計算している。
決定係数は回帰直線が実績値をどの程度説明できているかを表す指標であり、1に近いほど説明力が高いことを示す。
(5)散布図と回帰直線の描画
plt.figure(figsize=(8, 6))
sns.regplot(
x=x_data,
y=y_data
)
figure(figsize=(8, 6))により、描画するグラフのサイズを横8インチ、縦6インチに設定している。
また、sns.regplot() により散布図と回帰直線を描画している。
さらに、回帰直線の周囲に表示される水色の帯は95%信頼区間を表しており、回帰直線の推定誤差の範囲を視覚的に確認できる。
(ci 引数により信頼区間を調整できる。デフォルトは95%であり、表示しない場合は ci=None を指定する。)
(6)タイトル・軸ラベルの設定
plt.title(f"{x_title}終了時ポイントと{y_title}終了時ポイントの関係")
plt.xlabel(f"{x_title}終了時のポイント [pt]")
plt.ylabel(f"{y_title}終了時のポイント [pt]")
title()により散布図のタイトルを設定している。
また、xlabel() および ylabel() により、それぞれ横軸および縦軸のラベルを設定している。
(7)分析結果テキストの表示
plt.text(
0.02,
0.97,
f"件数:n={n:.0f}\n"
f"回帰式:y={a:.3f}x{b:+.3f}\n"
f"相関係数:R={corr:.3f}\n"
f"決定係数:R²={r2:.3f}",
transform=plt.gca().transAxes,
verticalalignment="top",
bbox={
"facecolor": "white",
"alpha": 0.8
}
)
plt.text() により、分析結果をグラフ内に表示している。
第1引数0.02および第2引数0.97では、テキストの表示位置を指定している。
これはグラフ領域に対する相対座標を表しており、左上付近にテキストを配置している。
また、transform=plt.gca().transAxesを指定することで、グラフ領域を基準とした座標系を使用している。
この座標系では、(0,0)は左下、(1,1)は右上となるため、グラフサイズや軸範囲が変化しても表示位置を維持できる。
続いて、第3引数では表示するテキストを指定している。
f"件数:n={n:.0f}\n"
f"回帰式:y={a:.3f}x{b:+.3f}\n"
f"相関係数:R={corr:.3f}\n"
f"決定係数:R²={r2:.3f}"
により、件数・回帰式・相関係数・決定係数を改行しながら表示している。
さらに、verticalalignment="top"により、指定した座標を基準にテキストの上端を揃えている。
また、
bbox={
"facecolor": "white",
"alpha": 0.8
}
により、白色の背景付きテキストボックスを表示している。
これにより、散布図上に点が重なった場合でも分析結果を読み取りやすくしている。
(8)グリッド表示とグラフ出力
plt.grid(True)
plt.show()
grid(True)により散布図にグリッドを表示している。
また、show()により散布図を出力している。
(9)戻り値
return n, f"y={a:.3f}x{b:+.3f}", round(corr, 3), round(r2, 3)
後述する分析結果の一覧表で使用するため、件数、回帰式、相関係数、決定係数を戻り値として返している。
なお、散布図とまとめの表に使用するため桁数を小数第3位までの値に合わせている。
4.2.1.レギュラーシーズン→セミファイナルの結果
4.2.で作成した関数に以下のように引数を挿入して散布図を作成する。
reg_to_semi_n, reg_to_semi_formula, reg_to_semi_corr, reg_to_semi_r2 = plot_point_correlation(
"reg_end_points",
"semi_end_points",
"レギュラー",
"セミ"
)
散布図の作成結果は以下のとおりである。
この結果を見ると、相関係数は0.692とやや強い相関になっている。
また、決定係数は0.479となっていることから、セミファイナル終了時ポイントのばらつきのうち、約47.9%をレギュラーシーズン終了時ポイントで説明できる。
また、回帰式の傾きが0.604となっていることから、レギュラーシーズンのポイントが100pt高いチームは、セミファイナル終了時ポイントも平均的に約60.4pt高くなる傾向がある。
4.2.2.セミファイナル→ファイナルの結果
4.2.1.と同様の手順で、セミファイナル終了時ポイントとファイナル終了時ポイントの関係について分析を行った。
結果は以下のとおりである。
この結果を見ると、相関係数は0.300と弱い相関になっている。
また、決定係数は0.090となっていることから、ファイナル終了時ポイントのばらつきのうち、約9.0%をセミファイナル終了時ポイントで説明できる。
また、回帰式の傾きが0.265となっていることから、セミファイナルのポイントが100pt高いチームは、ファイナル終了時ポイントも平均的に約26.5pt高くなる傾向がある。
4.2.3.ポイント相関分析まとめ
レギュラー→セミおよびセミ→ファイナルの分析結果を比較するため、結果を下記のとおり一覧表にまとめた。
こちらを見ると、セミ→ファイナルの結果は、レギュラー→セミと比べて、回帰式の傾き、相関係数、決定係数がいずれも値が小さくなっている。
ここから読み取れる内容は以下のとおりである。
- レギュラー→セミでは一定の相関が見られる一方で、セミ→ファイナルでは相関が大幅に弱くなっている。
- 回帰式の傾きも小さくなっており、前フェーズのポイント優位が次フェーズへ引き継がれにくくなっている。
- 決定係数も0.479→0.090へ大きく低下しているため、セミ→ファイナルでは前フェーズ終了時ポイントによる説明力が低くなっている。
以上より、ポイントの観点で分析したところ、レギュラー→セミでは前フェーズの成績と次フェーズの成績に一定の関係が見られる一方で、セミ→ファイナルではその関係が大きく弱まる傾向が確認できた。
次節では、順位の観点から各フェーズ間の順位相関についての分析を行う。
4.3.順位相関分析(スピアマン)
本節では、前フェーズ終了時点と次フェーズ終了時点の順位の推移についての相関を分析する。
この分析では、スピアマンの相関分析を用いる。(参考文献参照)
分析を行うために、下記のようにplot_rank_correlation関数を作成して、横軸のカラム・縦軸カラムを引数として格納する。
def plot_rank_correlation(x_col, y_col):
# 分析対象データの作成
df_plot = df_current[[x_col, y_col]].dropna()
# 件数取得
n = len(df_plot)
# スピアマンの順位相関係数
corr = df_plot[[x_col, y_col]].corr(method="spearman").iloc[0, 1]
return n, round(corr, 3)
corr(method="spearman") により、スピアマン順位相関係数を算出している。
この相関係数は、データの値ではなく順位の相関を表す指標であり、本分析では各フェーズ終了時の順位の関係性を確認するために使用している。
また、corr() は相関行列を返すため、.iloc[0, 1] により分析対象の2列間の順位相関係数のみを取得している。
上記の関数を用いて、各フェーズ間の順位相関を分析した結果は下記のとおりとなった。
ここから読み取れる内容は以下のとおりである。
- レギュラー→セミでは順位相関係数が0.510となり、中程度の順位相関が見られる。
- セミ→ファイナルでは順位相関が-0.086となり、順位の関係性はほとんど見られない。
- 順位相関の観点からも、セミ→ファイナルでは前フェーズの成績優位が引き継がれにくいことが分かる。
ポイント相関分析ではセミ→ファイナルで相関が弱くなる傾向が見られたが、順位相関分析ではその傾向がさらに顕著となった。
5.考察
ここまで、レギュラー→セミおよびセミ→ファイナルについて、ポイントと順位の相関についてそれぞれ分析を行った。
本章では、これらの分析結果を総合的に整理し、前フェーズの成績が次フェーズへどの程度影響しているのかについて考察する。
まずはこれまでの分析結果のまとめを以下の表に示す。
ポイント相関の観点では、レギュラー→セミは相関係数0.692と、やや強い相関を示した一方で、セミ→ファイナルでは0.300と大きく低下した。
また、順位相関の観点では、レギュラー→セミは順位相関係数0.510と、中程度の相関だったのに対し、セミ→ファイナルでは-0.086となり、順位相関はほとんど見られなくなった。
これらの結果から、ポイントについてはファイナルまで一定の影響が残っているものの、その影響は限定的であることが分かる。一方で、順位についてはファイナルに進む段階で前フェーズとの関係性がほぼ失われている。
つまり、セミファイナルまでに築いた成績上の優位性は、ファイナル開始時点では大きく縮小していると考えられる。その結果、どのチームにも優勝の可能性が残りやすい構造になっている。
要因の一つとして、各フェーズでポイントの半分のみを持ち越す制度が挙げられる。単純計算では、レギュラーシーズン終了時点のポイントはファイナル開始時点で約25%まで圧縮されるため、上位チームと下位チームのポイント差はフェーズが進むにつれて縮小する。
さらに、ファイナルは全16半荘と試合数が少ないため、1半荘ごとの結果が順位に与える影響も大きい。こうした短期決戦の性質も、セミ→ファイナルにおける相関の低下に影響していると考えられる。
なお、本分析は現行制度となった2019-20シーズン以降の7シーズン分を対象としているため、サンプル数はまだ十分に多いとは言えない。今後シーズン数が増えることで、今回の分析結果とは異なる傾向が見られる可能性もある。
6.総括
本記事では、Mリーグの現行制度において、レギュラーシーズンの結果が後続フェーズにどの程度反映されているか、また、各フェーズ間のポイントおよび順位にはどの程度相関があるのかについて実際の成績データを用いて分析を行った。
データ分析の手法としては、Pythonを用いてデータ加工、集計および可視化を中心として分析を行った。
分析結果としては、まず現行制度となった2019-20シーズン以降の7シーズンのうち、レギュラーシーズン1位チームが最終的に優勝した回数は2回(約28.6%)であった。
次に、ポイント相関分析では、レギュラー→セミでは相関係数が0.692、セミ→ファイナルでは0.300となり、セミ→ファイナルでは相関が大きく低下した。
さらに、順位相関分析では、レギュラー→セミでは順位相関係数が0.510、セミ→ファイナルでは-0.086となり、セミ→ファイナルではフェーズ間の順位の相関がほとんど見られなかった。
以上の結果から、レギュラーシーズンでの上位チームの優位性はセミファイナルまでは一定程度引き継がれる一方で、ファイナルではポイント・順位どちらの観点で見ても、その優位性は大きく弱まることが確認できた。
この要因としては、各フェーズ間のポイントの半分のみを持ち越す制度により、ファイナルでは上位チームと下位チームの差がレギュラーシーズンと比べて大きく縮まったことが挙げられた。
それに加えて、ファイナルでは16半荘と試合数が少ないため、1半荘ごとの結果が順位に与える影響も大きいと考えられる。
なお、本分析は現行制度(2019-20〜2025-26)の7シーズンを対象としているため、今後シーズンを重ねていくことで、傾向が変化する可能性もある。
今回の分析を通じて、自分に関心のある分野から、Pythonを使った相関分析や回帰分析などのデータ分析手法を実際のデータを用いて学ぶことができた。
今後もこうして学んだ経験を発信することで、皆様の学習やスキルアップの一助になればと思っている。
参考文献
参考資料
- 森巧尚『Python2年生 データ分析のしくみ 第2版』
- Wes McKinney『Pythonによるデータ分析入門 第3版』
- スピアマンの順位相関係数(閲覧日:2026/5/27)
https://www.geeksforgeeks.org/data-science/spearmans-rank-correlation/
データ取得元
- 麻雀ウォッチ 成績データ(閲覧日:2026/5/18)
- 2018-19シーズン
https://mj-news.net/news/mleague/20221201194781 - 2019-20シーズン
https://mj-news.net/news/mleague/20221201194779 - 2020-21シーズン
https://mj-news.net/news/mleague/20221201194773 - 2021-22シーズン
https://mj-news.net/news/mleague/20221201194767 - 2022-23シーズン
https://mj-news.net/news/mleague/20221118192608 - 2023-24シーズン
https://mj-news.net/news/mleague/20230914208581 - 2024-25シーズン
https://mj-news.net/news/mleague/20240913228112 - 2025-26シーズン
https://mj-news.net/news/mleague/20250912244975
- 2018-19シーズン






