2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1500m牛丼を大真面目に(簡単に)分析する

Last updated at Posted at 2023-12-26

1500m牛丼とは

発端

1500m牛丼は2016年9月、YouTuberの東海オンエアによって公開された、新競技「1500m牛丼」で世界新記録達成!! を発端とする競技である。
東海オンエアメンバーの記録は以下の通りである。なお、てつや氏は牛丼を完食できず、いまだ競技である。

rank 名前 1500m 牛丼 合計
1 りょう 5'23 6'55 12'18
2 しばゆー 6'48 11'49 18'37
3 としみつ 7'57 13'18 21'25
- てつや 6'16 --- ---

弊部の取り組み

弊部活動では動画が公開された2016年から、年に1回のペースでレクリエーションの一環として実施されている。2019年までは長距離パートの恒例行事となっていたが、2020年から2021年までのコロナによる中断期間を経て、2022年、2023年は短距離パートやフィールドパートを含めて年末行事として行われた。特に本年2023年は50人以上が参加し盛大に(?)実施された。

分析してみた

記録が手元に残る2017年から2023年までの119記録に関して簡単に分析を行った。csvファイルは、1500mの記録、牛丼の記録、パート分類(1:中距離or長距離、2:その他)、年度が含まれる。

main.py
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.colors import ListedColormap
df = pd.read_csv('timenew.csv')
df['total'] = df['1500mSec'] + df['BeefBowlSec']
df['Year'] = df['Year'].astype('int')

とりあえず散布図を書いてみる。青は中長距離パート、赤はその他である。

main.py
df.plot.scatter(x='1500mSec', y='BeefBowlSec', c=df.part.values, cmap= "bwr")
x = np.linspace(0, 1500)

plt.xlim(0, 1500)
plt.ylim(0, 1500)

plt.show()

image.png

散布図行列を書いてほかの変数に対しても確認してみる

main.py
import seaborn as sns
sns.pairplot(df, height=1.5)

image.png

続いて相関関係を見る

main.py
pd.options.display.precision = 4 #出力桁数
df.corr()

結果は

1500mSec BeefBowlSec Year part total
1500mSec 1.0000 -0.0777 0.2644 0.6198 0.1597
BeefBowlSec -0.0777 1.0000 0.0519 -0.0677 0.9718
Year 0.2644 0.0519 1.0000 0.4704 0.1140
part 0.6198 -0.0677 0.4704 1.0000 0.0797
total 0.1597 0.9718 0.1140 0.0797 1.0000

1500mの記録(1500mSec)と牛丼の記録(BeefBowlSec)にもう少し相関があるかと考えていたが、ほぼ相関がみられなかった。逆に、牛丼と合計タイムには正の強い相関がみられる。

学内記録を出すためには

弊部の最高記録は7'17"である。そこで、8分以内の記録に対し、分析を行う。なお、この記録を出しているのは全員専門種目が中長距離である。

main.py
df_480=df[(df['total'] <= 480) ]
df_480.plot.scatter(x='1500mSec', y='BeefBowlSec')
x = np.linspace(0, 400)

#等値線(totaltime)を引く
for i in range(0,8): 
  y = -x + 400+i*20
  plt.plot(x, y,c="gray")

plt.xlim(0, 400)
plt.ylim(0, 400)

#一次近似
res = np.polyfit(df_480['1500mSec'], df_480['BeefBowlSec'], 1)
plt.plot(x, np.poly1d(res)(x))

plt.show()

結果は
image.png
相関関係を出すと

main.py
pd.options.display.precision = 4
df_480.corr()
1500mSec BeefBowlSec Year part total
1500mSec 1.0000 -0.7281 -0.3680 NaN -0.1823
BeefBowlSec -0.7281 1.0000 0.4323 NaN 0.8067
Year -0.3680 0.4323 1.0000 NaN 0.3028
part NaN NaN NaN NaN NaN
total -0.1823 0.8067 0.3028 NaN 1.0000

1500mの記録(1500mSec)と牛丼の記録(BeefBowlSec)の相関係数は-0.73となった。ある程度の記録を出そうと思うと、1500mを余力を持って走り、牛丼をいかに速く食べるかが求められそうである。

自己記録を目指すには

8分以上、12分以下の記録に対し、分析を行う。

main.py
df_720=df[(df['total'] <= 720) & (df['total'] >= 480)]
df_720.plot.scatter(x='1500mSec', y='BeefBowlSec',c=df_720.part.values, cmap= "bwr")
x = np.linspace(0, 500)

#Part=1,Part=2のそれぞれの中心を書く
centroids = df_720.groupby('part')[['1500mSec', 'BeefBowlSec']].mean()
plt.scatter(centroids['1500mSec'], centroids['BeefBowlSec'], marker='o', s=100,  c=['royalblue', 'orangered'])

#等値線(totaltime)を引く
for i in range(0,8):
  y = -x + 480+i*50
  plt.plot(x, y,c="gray")

plt.xlim(0, 500)
plt.ylim(0, 500)

#一時近似
res = np.polyfit(df_720['1500mSec'], df_720['BeefBowlSec'], 1)
plt.plot(x, np.poly1d(res)(x))

plt.show()

結果は
image.png

相関は

1500mSec BeefBowlSec Year part total
1500mSec 1.0000 -0.2758 0.2460 0.6443 0.3450
BeefBowlSec -0.2758 1.0000 -0.2561 -0.1286 0.8071
Year 0.2460 -0.2561 1.0000 0.5062 -0.0990
part 0.6443 -0.1286 0.5062 1.0000 0.2701
total 0.3450 0.8071 -0.0990 0.2701 1.0000

中長距離選手(Part=1)とその他競技選手(Part=2)で偏りが見られる。

まとめ

可視化を中心に行った。考察は特にしていないがが、1500mの記録よりもとにかく牛丼を速く食べることが一番。時間があればほかにもいろいろ追記するかも?

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?