LoginSignup
19
14

More than 5 years have passed since last update.

初心者が大相撲力士の強さをPythonとRで分析してみた

Last updated at Posted at 2018-08-16

4274125792_272a84c644_o.jpg

photo by davidgsteadman

はじめに

2018年7月場所、御嶽海が初優勝を果たしました。
関脇の優勝は、2015年5月場所の照ノ富士以来3年ぶりです。
しかし、3横綱と新大関の栃ノ心が休場、残る大関の豪栄道が10勝、高安が9勝と、上位陣大崩れな中での優勝でした。

御嶽海は本当に強いんでしょうか?

今回、2001〜2018年の全取組結果をPythonでWebから取得し、RのBradleyTerry2というパッケージで各力士の強さを判定し、Pandasによってそれを可視化しました。

データの取得

日本相撲協会の公式サイトから、この記事を参考に、CSSセレクターを使用してサクっとデータを取得しようとしましたが、スムーズにいかず苦しみました。
Yahooのスポーツナビというサイトが、表形式で1日毎の取組結果を綺麗にまとめてくれていたので、この記事を参考に、padasのread_htmlメソッドを使用したところ、3行でサクッとデータ取得出来ました。


import pandas as pd
url = "https://sports.yahoo.co.jp/sumo/torikumi/stats/?bashoId=201807&day=1"
fetched_dataframes = pd.read_html(url)

強さ判定

力士の強さを判定するには色んな難しさがあります。
まず、幕内力士42人に対して1場所で各力士15回の取組しかありません。
全員と対戦するわけではないため、上位陣との取組が多い場所とそうでない場所では勝星に差が出てきます。
また、怪我等による休場があるため、1場所の対戦数が15回でない力士も出てきます。
そのため、単純に勝星の数が強さを表しているとは言えません。

そこで、今回はBradley-Terryモデルによって強さを判定してみます。
やっていることはこの記事と同じで、相撲以外にもサッカーテニス等で適用例があるようです。
Bradley-Terryモデルでは、弱い相手に勝つことよりも強い相手に勝つことが大きく評価されます。

Pythonで実装できればよかったですが、RにBradleyTerry2という便利なパッケージがあったので、それを使ってみました。


library("BradleyTerry2")

infile <- paste("input/", bashoId, ".csv", sep="")
data <- read.csv(infile)

bt_model <- BTm(
  outcome = cbind(e_win, w_win),
  player1 = e_rikishi, player2 = w_rikishi,
  data = data)
BTabilities(bt_model)

outfile <- paste("output/", bashoId, "_bt.csv", sep="")
write.csv(BTabilities(bt_model), outfile, quote=FALSE, row.names=TRUE)

データの分析

御嶽海を中心に

Pythonのデータ分析ライブラリであるPandasでデータ分析してみました。
2018年7月場所の結果は以下の通りです。
n_uwin、n_uloseは不戦勝と不戦敗の数を表してます。
取組数の極端に少ない力士は、強さがおかしな値になるため、取組が10回以下の力士は除いてます。

bt_ability bt_s.e. n_win n_lose n_uwin n_ulose n_kyujo rank
御嶽海 2.767772 0.720529 13 2 0 0 0 1
豊山 2.097115 0.716932 12 3 0 0 0 2
朝乃山 1.497341 0.681284 11 4 0 0 0 3
貴景勝 1.489691 0.614608 10 5 0 0 0 4
栃煌山 1.470620 0.683031 10 5 0 0 0 5
北勝富士 1.443543 0.711216 11 4 0 0 0 6
豪栄道 1.388622 0.607309 10 5 0 0 0 7
高安 1.256511 0.597866 9 6 0 0 0 8
魁聖 1.196074 0.600312 9 6 0 0 0 9
玉鷲 1.076712 0.629103 8 7 0 0 0 10
阿武咲 0.923356 0.696471 10 5 0 0 0 11
0.891801 0.608127 8 7 1 0 0 12
千代大龍 0.866630 0.647969 9 6 0 0 0 13
妙義龍 0.751707 0.663333 9 6 0 0 0 14
遠藤 0.728060 0.626082 8 7 0 0 0 15
逸ノ城 0.640806 0.585467 8 7 0 0 0 16
千代の国 0.426281 0.646826 6 7 2 1 2 17
佐田の海 0.364073 0.688471 8 7 0 0 0 18
碧山 0.312468 0.653265 8 7 0 0 0 19
琴奨菊 0.260233 0.739734 3 8 0 1 4 20
隠岐の海 0.203476 0.689940 8 7 1 0 0 21
竜電 0.125162 0.693777 8 7 0 0 0 22
阿炎 0.000000 0.000000 6 9 0 0 0 23
正代 -0.010341 0.626835 6 9 2 0 0 24
-0.053605 0.601713 6 9 0 0 0 25
宝富士 -0.070450 0.656463 7 8 0 0 0 26
石浦 -0.078456 0.698101 7 8 0 0 0 27
錦木 -0.356064 0.681586 6 9 0 0 0 28
大栄翔 -0.650818 0.682246 6 9 0 0 0 29
明生 -0.661536 0.720544 6 9 0 0 0 30
旭大星 -0.684246 0.680767 6 9 0 0 0 31
荒鷲 -0.702632 0.699892 5 10 0 0 0 32
千代丸 -0.765400 0.699635 5 10 0 0 0 33
大翔丸 -0.782858 0.662296 5 10 0 0 0 34
松鳳山 -1.026813 0.668050 3 12 0 0 0 35
千代翔馬 -1.280931 0.692523 4 11 0 1 0 36
琴恵光 -1.384529 0.735303 3 12 0 0 0 37
嘉風 -2.174686 0.734169 2 13 0 0 0 38

上位陣と対戦して8勝の玉鷲が、下位陣と対戦して10勝の阿武咲よりも、強いと評価されています。
勝星の数だけで強さを判定するよりも、適切に判定されているように思えます。

これだけでは、休場した横綱や大関との比較が出来ません。
2018年7月場所で三役以上の力士について、2018年1,3,5,7月場所のBradley-Terryモデルによる強さランクを、折れ線グラフで見てみます。

2018_rank_201807sanyaku.png

調子を落とす力士、休場する力士が多い中、御嶽海がランクを上げてきているのがわかります。

ただ、御嶽海は2018年7月場所が17回目の場所であり、まだまだ強くなる可能性を秘めています。
新入幕から17場所目までの成績を比べてみます。

2001-2018_rank_201807sanyaku17.png

わかりにくいので箱ひげ図を見てみます。

2001-2018_rank_box_201807sanyaku17.png

御嶽海は白鵬に次ぐ勢いで、駆け上がっているに見えます。
というか、白鵬が圧倒的ですね。

白鵬を中心に

前の図で白鵬が圧倒的だったので、2001年以降の横綱で比べてみます。
(幕内在位期間 朝青龍:2001年1月〜2010年1月、白鵬:2004年5月〜、日馬富士:2004年11月〜2017年11月、鶴竜:2006年11月〜、稀勢の里:2004年11月〜)

2001-2018_rank_heisei.png
2001-2018_rank_box_heissei.png

1958年に年6場所制が始まって以降、最速で横綱にまで昇進したドルジさんの強さが改めてわかります。
しかし、そのドルジさんが全盛期の中、新入幕から13場所で初優勝し、それから現在に至るまで安定してランク1位付近に居続ける白鵬の強さがやはり際立っています。

勝星も見てみます。

2001-2018_wins_box_heissei.png

白鵬は新入幕以降に11取組以上した場所で、負け越したことないんですね。

まとめ

御嶽海は強い。いずれ横綱になってもおかしくない。
しかし、朝青龍、白鵬に続く圧倒的な横綱になるのは難しそう。

コードは全てgithubにあります。プログラミング、相撲、ともに初心者なのでご教授いただけたらうれしいです。

19
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
14