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:その他)、年度が含まれる。
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')
とりあえず散布図を書いてみる。青は中長距離パート、赤はその他である。
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()
散布図行列を書いてほかの変数に対しても確認してみる
import seaborn as sns
sns.pairplot(df, height=1.5)
続いて相関関係を見る
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分以内の記録に対し、分析を行う。なお、この記録を出しているのは全員専門種目が中長距離である。
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()
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分以下の記録に対し、分析を行う。
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()
相関は
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の記録よりもとにかく牛丼を速く食べることが一番。時間があればほかにもいろいろ追記するかも?