スポーツくじでスコア合計の新しいくじが始まるみたいだけど、

## 背景
* スポーツくじは、日本スポーツ振興センター（JAPAN SPORT COUNCIL）が運営する業務の一つで、「スポーツ振興」のための資金を得るために販売しています。[日本スポーツ振興センター：スポーツ振興投票等業務](https://www.jpnsport.go.jp/corp/tabid/427/Default.aspx)
* スポーツくじで最高当選金6億円の「BIG」を超える「MEGA BIG」が今月から発売されます。
* 「BIG」は勝ち・分け・負けで14試合が対象で「MEGA BIG」はスコア合計で1点以下・2点・3点・4点以上で12試合が対象となります。

| 種別 | 対象試合 |投票種類 |確率|%|
|:-:|:-:|:-:|:-:|:-:|
| BIG  | 14  | 1,0,2  |1/4,782,969|0.00000020907|
| MEGA BIG  | 12  |1,2,3,4 |1/16,777,216|0.0000000596|

* 絶望的な「BIG」を超えて、形容する言葉すらない「MEGA BIG」です。

## 本題
* Jリーグの試合では、スコア合計はどんな分布になっているだろうか？
* J3リーグが始まった2014年から2019年までの6年間で6,130試合を対象にした。
* 内訳は、J1：1,836試合、J2：2,772試合、J3:1,522試合です。

## 処理の流れ
1) 2014年から2019年まで[Jleague Data Site](https://data.j-league.or.jp/SFTP01/)の日程・結果ページからデータを取得する
2) 1)で取得したCSVファイルを読み込み`DataFrame`を作成する。
3) さらにJ1・J2・J3のみの`DataFrame`を別途作成する。
4) `matplotlib`で4つのグラフを作成する。
5) 「スコア合計」を「MEGA BIG」の1点以下・2点・3点・4点以上に集計する。
6) その集計結果をグラフにする。

## コード
①2014年から2019年まで[Jleague Data Site](https://data.j-league.or.jp/SFTP01/)の日程・結果ページからデータを取得する

<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>年度</th>
      <th>大会</th>
      <th>節</th>
      <th>試合日</th>
      <th>K/O時刻</th>
      <th>ホーム</th>
      <th>スコア</th>
      <th>アウェイ</th>
      <th>スタジアム</th>
      <th>入場者</th>
      <th>TV放送</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2014</td>
      <td>Ｊ１</td>
      <td>第１節第１日</td>
      <td>03/01(土)</td>
      <td>14:04</td>
      <td>Ｃ大阪</td>
      <td>0-1</td>
      <td>広島</td>
      <td>ヤンマー</td>
      <td>37079</td>
      <td>スカパー！／スカパー！プレミアムサービス／ＮＨＫ総合</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2014</td>
      <td>Ｊ１</td>
      <td>第１節第１日</td>
      <td>03/01(土)</td>
      <td>14:04</td>
      <td>名古屋</td>
      <td>2-3</td>
      <td>清水</td>
      <td>豊田ス</td>
      <td>21657</td>
      <td>スカパー！／スカパー！プレミアムサービス／ＮＨＫ名古屋／ＮＨＫ静岡</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2014</td>
      <td>Ｊ１</td>
      <td>第１節第１日</td>
      <td>03/01(土)</td>
      <td>14:05</td>
      <td>鳥栖</td>
      <td>5-0</td>
      <td>徳島</td>
      <td>ベアスタ</td>
      <td>14296</td>
      <td>スカパー！／スカパー！プレミアムサービス／ＮＨＫ徳島／ＮＨＫ佐賀</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2014</td>
      <td>Ｊ１</td>
      <td>第１節第１日</td>
      <td>03/01(土)</td>
      <td>14:05</td>
      <td>甲府</td>
      <td>0-4</td>
      <td>鹿島</td>
      <td>国立</td>
      <td>13809</td>
      <td>スカパー！／スカパー！プレミアムサービス／ＮＨＫ甲府／ＮＨＫ水戸</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2014</td>
      <td>Ｊ１</td>
      <td>第１節第１日</td>
      <td>03/01(土)</td>
      <td>14:05</td>
      <td>仙台</td>
      <td>1-2</td>
      <td>新潟</td>
      <td>ユアスタ</td>
      <td>15852</td>
      <td>スカパー！／スカパー！プレミアムサービス／ＮＨＫ仙台／ＮＨＫ新潟</td>
    </tr>
  </tbody>
</table>
</div>

② ①で取得したCSVファイルを読み込み`DataFrame`を作成する。

```python
col_name = ['年度','大会','節','試合日','K/O時刻','ホーム','スコア','アウェイ','スタジアム','入場者','TV放送']
results = pd.DataFrame(index=[], columns=col_name)

for f in files:
    tmp_data = pd.read_csv(f, sep=',', encoding='utf-8')
    results = results.append(tmp_data, ignore_index=True, sort=False)
```

③さらにJ1・J2・J3のみ`DataFrame`を別途作成する。

```python
# J1・J2・J3のみデータのスコア合計
score_J1 = score_data[score_data['大会'] == 'Ｊ１']
idx_J1 = sorted(score_J1['スコア合計'].unique())
scoreJ1 = pd.DataFrame({'スコア合計':idx_J1, 'cnt':score_J1['スコア合計'].value_counts()}, index=idx_J1)
scoreJ1 = scoreJ1.reset_index().drop('index', axis=1)

score_J2 = score_data[score_data['大会'] == 'Ｊ２']
idx_J2 = sorted(score_J2['スコア合計'].unique())
scoreJ2 = pd.DataFrame({'スコア合計':idx_J2, 'cnt':score_J2['スコア合計'].value_counts()}, index=idx_J2)
scoreJ2 = scoreJ2.reset_index().drop('index', axis=1)

score_J3 = score_data[score_data['大会'] == 'Ｊ３']
idx_J3 = sorted(score_J3['スコア合計'].unique())
scoreJ3 = pd.DataFrame({'スコア合計':idx_J3, 'cnt':score_J3['スコア合計'].value_counts()}, index=idx_J3)
scoreJ3 = scoreJ3.reset_index().drop('index', axis=1)
```

④ `matplotlib`で4つのグラフを作成する。

```python
# J1・J2・J3・全体をグラフ化
fig = plt.figure(figsize=(16,9),dpi=144)
fig.subplots_adjust(hspace=0.4)

# オリジナルのグラフスタイル設定
plt.style.use("mystyle")
plt.rcParams["font.family"] = "IPAexGothic"

# グラフオブジェクトの格納用
axes = []
score_list = [scoreJ1['スコア合計'], scoreJ2['スコア合計'], scoreJ3['スコア合計'], score_all['スコア合計']]
cnt_list = [scoreJ1['cnt'], scoreJ2['cnt'], scoreJ3['cnt'], score_all['cnt']]
cat_list = ['J1', 'J2', 'J3', 'ALL']

# J1・J2・J3・ALLの4つのグラフをループで
for i in range(4):
    axes.append(fig.add_subplot(4,1,i+1))
    axes[i].bar(score_list[i], cnt_list[i])
    [axes[i].text(score_list[i][s], cnt_list[i][s]+25, str(score), size=12, color='r', ha='center') for s, score in enumerate(cnt_list[i])]
    axes[i].set_xticks(np.arange(0,16,1))
    axes[i].set_ylabel(cat_list[i])
    axes[i].set_ylim(0,1500)
    axes[i].text(15-1, 1500-200, 'n:'+str(sum(cnt_list[i])))

plt.xlabel('スコア合計')

txt1 = 'Jリーグで試合のスコア合計を可視化してみた。'
fig.text(.05, .9, txt1, fontsize=32, horizontalalignment="left")
txt2 = "引用元：JLeague Data Site"
fig.text(.9, .05, txt2, fontsize=14, horizontalalignment="right")

plt.savefig('./img/score.png')
plt.show()
```
<img width="1152" alt="score.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126042/7e64a3bd-efca-d39b-1652-37f5ddcf4549.png">

⑤「スコア合計」を「MEGA BIG」の1点以下・2点・3点・4点以上で「Mega」列を追加

```python
# MEGAのスコア分類にする
def mega(df):
    if df in (2, 3):
        return df
    elif df <= 1:
        return 1
    elif df >=4:
        return 4

score_data['Mega'] = score_data['スコア合計'].apply(mega)
```

⑥その集計結果をグラフにする。
<img width="554" alt="mega_plot.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126042/d164cf57-dd57-2a94-3962-2d0c76431b1d.png">

## まとめ
* どのリーグでも0点・1点・2点・3点の累積で全体の約75%となる。
* 0点・1点・2点・3点・4点以上の5種類とするより、出現率を平均化して、0点と1点を1として4種類としたのではないかと思われる？（推測）
* 技術的な共有は少なく、事実の共有が中心となりました。
* グラフで複数の描画を`for`にループや`内包表記`でコード量が少なくできた。
* スポーツくじは、残念ながらさらに**「見返りのない寄付」**色が強くなったという話。