高知ファイナルって本当に荒れるのかデータ分析してみた

# そもそも高知ファイナルって何
- 駄馬がダバダバしてるレースのこと
  - 正確には…

>高知競馬独自の試みとして、多くの開催日での最終レースは「一発逆転ファイナルレース」の競走名で施行されており、指定されたクラス内にいる馬の中から記者選抜により出走馬が選抜されレースが行われている。ただし、選抜馬達は揃いも揃ってほかのレースなら買い目から真っ先に外される低迷馬ばかりが敢えて選ばれている。このため、「馬で予想しようにも決め手がまったくない」、「騎手で予想しようにも騎手の実力でもカバーできない馬ばかり」と難解を極め、結果、一発逆転可能な高配当が生まれやすいレースとなっており、2014年3月には三連単の配当が600万円を超える高知競馬史上最高配当をマークしたのもこのレースであった。

- 先日サイコロで出した目をワイドで購入し当たった
  - ８番人気と９番人気のワイド、普通なら買えない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/2f3ecab5-645f-500a-2540-17b4d69d8b0c.png)

- どうせ予想不可能なら、これを自動化する

## 過去5年分のデータをコキャッとする

- 5年分の高知ファイナルだけ557レースを抽出した、ちなみに全レースは6584レース存在する。

<details><summary>生Json(縦に長い！)</summary><div>


```json
{
    "racePlace": "高知",
    "raceNum": "12R",
    "raceName": "ファイナルレース",
    "raceInfo": {
        "umaban": [
            "10",
            "4",
            "9",
            "7",
            "6",
            "8",
            "3",
            "1",
            "2",
            "5",
            "12",
            "11"
        ],
        "wakuban": [
            "7",
            "4",
            "7",
            "6",
            "5",
            "6",
            "3",
            "1",
            "2",
            "5",
            "8",
            "8"
        ],
        "horseName": [
            "コスモナインボール",
            "マトラッセ",
            "スセソール",
            "ペイシャフラッシュ",
            "セイカメテオライト",
            "ヤマイチレジェンド",
            "ディライトラッシュ",
            "ヴィンチェーレ",
            "ヴィルダイヤ",
            "レイニーウェイ",
            "グローバルノヴェル",
            "レオタイザン"
        ],
        "horseAge": [
            "牡9",
            "牡6",
            "セ9",
            "牡4",
            "牡6",
            "牡9",
            "牡7",
            "牝4",
            "牝6",
            "牡4",
            "セ4",
            "牡5"
        ],
        "sekiryo": [
            "56.0",
            "56.0",
            "56.0",
            "56.0",
            "56.0",
            "56.0",
            "56.0",
            "54.0",
            "54.0",
            "56.0",
            "53.0",
            "56.0"
        ],
        "jockey": [
            "井上瑛太",
            "林謙佑",
            "倉兼育康",
            "上田将司",
            "嬉勝則",
            "山崎雅由",
            "西森将司",
            "妹尾浩一",
            "大澤誠志",
            "岡村卓弥",
            "▲岡遼太郎",
            "木村直輝"
        ],
        "raceTime": [
            "1:33.4",
            "1:33.5",
            "1:33.7",
            "1:33.8",
            "1:33.9",
            "1:34.0",
            "1:34.3",
            "1:34.6",
            "1:34.8",
            "1:34.9",
            "1:35.4",
            "1:35.4"
        ],
        "race3F": [
            "40.9",
            "40.1",
            "42.0",
            "41.6",
            "40.6",
            "40.9",
            "41.6",
            "42.6",
            "43.3",
            "42.0",
            "43.4",
            "43.8"
        ],
        "tyakusa": [
            "",
            "1/2",
            "3/4",
            "3/4",
            "1/2",
            "クビ",
            "1.1/2",
            "1.1/2",
            "1",
            "クビ",
            "2.1/2",
            "アタマ"
        ],
        "oddsNinki": [
            "9",
            "2",
            "10",
            "4",
            "3",
            "7",
            "12",
            "1",
            "8",
            "11",
            "6",
            "5"
        ],
        "oddsTansho": [
            "17.0",
            "5.2",
            "33.2",
            "7.3",
            "6.3",
            "12.6",
            "60.6",
            "4.2",
            "14.3",
            "39.6",
            "8.5",
            "7.4"
        ],
        "trainer": [
            "高知宗石大",
            "高知松木啓助",
            "高知西山裕貴",
            "高知川野勇馬",
            "高知田中譲二",
            "高知田中譲二",
            "高知川野勇馬",
            "高知打越勇児",
            "高知那俄性哲",
            "高知別府真司",
            "高知中西達也",
            "高知胡本友晴"
        ],
        "weight": [
            "494(+2)",
            "479(+2)",
            "480(+3)",
            "478(0)",
            "490(+3)",
            "524(+2)",
            "511(-3)",
            "433(-1)",
            "432(+1)",
            "450(+11)",
            "440(-2)",
            "539(-1)"
        ]
    },
    "raceStartTime": "20:50",
    "kyori": "ダ1400m (右)",
    "weather": "晴",
    "babaStatus": "重",
    "URL": "https://nar.netkeiba.com/race/shutuba_past.html?race_id=202154121212",
    "nowDate": "20211212",
    "racePayout": {
        "Tansho": 1700,
        "Fukusho": [
            340,
            210,
            710
        ],
        "Wakuren": 2890,
        "Umaren": 4650,
        "Wide": [
            1560,
            4910,
            2090
        ],
        "Umatan": 9570,
        "Fuku3": 27390,
        "Tan3": 216230
    },
    "horseData": [
        {
            "horseName": "ヴィンチェーレ",
            "number": "1",
            "fatherHorseName": "フェノーメノ",
            "fatherFatherHorseName": "ステイゴールド",
            "FFFatherHorseName": "サンデーサイレンスSunday Silence(米)",
            "FFMotherHorseName": "ゴールデンサッシュ",
            "fatherMotherHorseName": "ディラローシェDe Laroche(愛)",
            "FMFatherHorseName": "デインヒルDanehill(米)",
            "FMMotherHorseName": "Sea Port",
            "motherHourseName": "ケイティマイヒメ",
            "motherFatherhorseName": "コロナドズクエストCoronado's Quest(米)",
            "MFFatherhorseName": "フォーティナイナーForty Niner(米)",
            "MFMotherhorseName": "Laughing Look",
            "motherMotherhorseName": "ラスキンウォークRuskin Walk(英)",
            "MMFatherhorseName": "Machiavellian",
            "MMMotherhorseName": "Air Distingue"
        },
        {
            "horseName": "ヴィルダイヤ",
            "number": "2",
            "fatherHorseName": "タイムパラドックス",
            "fatherFatherHorseName": "ブライアンズタイムBrian's Time(米)",
            "FFFatherHorseName": "Roberto",
            "FFMotherHorseName": "Kelley's Day",
            "fatherMotherHorseName": "ジョリーザザJolie Zaza(愛)",
            "FMFatherHorseName": "Alzao",
            "FMMotherHorseName": "Bold Lady",
            "motherHourseName": "パッションメイト",
            "motherFatherhorseName": "アグネスタキオン",
            "MFFatherhorseName": "サンデーサイレンスSunday Silence(米)",
            "MFMotherhorseName": "アグネスフローラ",
            "motherMotherhorseName": "ゴールデンフォーチューンGolden Fortune(米)",
            "MMFatherhorseName": "Wild Again",
            "MMMotherhorseName": "Allouette"
        },
        {
            "horseName": "ディライトラッシュ",
            "number": "3",
            "fatherHorseName": "パーソナルラッシュ",
            "fatherFatherHorseName": "ワイルドラッシュWild Rush(米)",
            "FFFatherHorseName": "Wild Again",
            "FFMotherHorseName": "Rose Park",
            "fatherMotherHorseName": "パーソナリーPersonally(米)",
            "FMFatherHorseName": "Alydar",
            "FMMotherHorseName": "Distaff Leader",
            "motherHourseName": "チャランダ",
            "motherFatherhorseName": "シアトルダンサーIISeattle Dancer(米)",
            "MFFatherhorseName": "Nijinsky",
            "MFMotherhorseName": "My Charmer",
            "motherMotherhorseName": "ハセベルテックス",
            "MMFatherhorseName": "ピットカーンPitcairn(愛)",
            "MMMotherhorseName": "ハセマサル"
        },
        {
            "horseName": "マトラッセ",
            "number": "4",
            "fatherHorseName": "ロードカナロア",
            "fatherFatherHorseName": "キングカメハメハ",
            "FFFatherHorseName": "Kingmambo(米)",
            "FFMotherHorseName": "マンファスManfath(愛)",
            "fatherMotherHorseName": "レディブラッサム",
            "FMFatherHorseName": "Storm Cat(米)",
            "FMMotherHorseName": "サラトガデューSaratoga Dew(米)",
            "motherHourseName": "シンコウローズ",
            "motherFatherhorseName": "ブライアンズタイムBrian's Time(米)",
            "MFFatherhorseName": "Roberto",
            "MFMotherhorseName": "Kelley's Day",
            "motherMotherhorseName": "ピンクタートルPink Turtle(米)",
            "MMFatherhorseName": "Blushing Groom(仏)",
            "MMMotherhorseName": "Turtle Cove"
        },
        {
            "horseName": "レイニーウェイ",
            "number": "5",
            "fatherHorseName": "バトルプランBattle Plan(米)",
            "fatherFatherHorseName": "エンパイアメーカーEmpire Maker(米)",
            "FFFatherHorseName": "Unbridled",
            "FFMotherHorseName": "Toussaud",
            "fatherMotherHorseName": "Flanders",
            "FMFatherHorseName": "Seeking the Gold",
            "FMMotherHorseName": "Starlet Storm",
            "motherHourseName": "ダンシングママ",
            "motherFatherhorseName": "フレンチデピュティFrench Deputy(米)",
            "MFFatherhorseName": "Deputy Minister",
            "MFMotherhorseName": "Mitterand",
            "motherMotherhorseName": "トウジンシーワン",
            "MMFatherhorseName": "サンデーサイレンスSunday Silence(米)",
            "MMMotherhorseName": "トウジンシクレノン"
        },
        {
            "horseName": "セイカメテオライト",
            "number": "6",
            "fatherHorseName": "メイショウサムソン",
            "fatherFatherHorseName": "オペラハウスOpera House(英)",
            "FFFatherHorseName": "Sadler's Wells(米)",
            "FFMotherHorseName": "Colorspin",
            "fatherMotherHorseName": "マイヴィヴィアン",
            "FMFatherHorseName": "ダンシングブレーヴDancing Brave(米)",
            "FMMotherHorseName": "ウイルプリンセス",
            "motherHourseName": "ジョリーン",
            "motherFatherhorseName": "トワイニングTwining(米)",
            "MFFatherhorseName": "フォーティナイナーForty Niner(米)",
            "MFMotherhorseName": "Courtly Dee",
            "motherMotherhorseName": "マシェアーMashaaer(米)",
            "MMFatherhorseName": "Shadeed",
            "MMMotherhorseName": "Princess Sucree"
        },
        {
            "horseName": "ペイシャフラッシュ",
            "number": "7",
            "fatherHorseName": "エイシンフラッシュ",
            "fatherFatherHorseName": "キングズベストKing's Best(米)",
            "FFFatherHorseName": "Kingmambo(米)",
            "FFMotherHorseName": "Allegretta",
            "fatherMotherHorseName": "ムーンレディMoonlady(独)",
            "FMFatherHorseName": "プラティニPlatini(独)",
            "FMMotherHorseName": "Midnight Fever",
            "motherHourseName": "モーニングラン",
            "motherFatherhorseName": "マンハッタンカフェ",
            "MFFatherhorseName": "サンデーサイレンスSunday Silence(米)",
            "MFMotherhorseName": "サトルチェンジSubtle Change(愛)",
            "motherMotherhorseName": "ダイワラブリー",
            "MMFatherhorseName": "マルゼンスキー",
            "MMMotherhorseName": "ダイワダンサー"
        },
        {
            "horseName": "ヤマイチレジェンド",
            "number": "8",
            "fatherHorseName": "カネヒキリ",
            "fatherFatherHorseName": "フジキセキ",
            "FFFatherHorseName": "サンデーサイレンスSunday Silence(米)",
            "FFMotherHorseName": "ミルレーサーMillracer(米)",
            "fatherMotherHorseName": "ライフアウトゼアLife Out There(米)",
            "FMFatherHorseName": "Deputy Minister",
            "FMMotherHorseName": "Silver Valley",
            "motherHourseName": "メイケイキララ",
            "motherFatherhorseName": "タイキシャトル",
            "MFFatherhorseName": "Devil's Bag",
            "MFMotherhorseName": "ウェルシュマフィンWelsh Muffin(愛)",
            "motherMotherhorseName": "トップペンダント",
            "MMFatherhorseName": "リアルシャダイReal Shadai(米)",
            "MMMotherhorseName": "スプリーム"
        },
        {
            "horseName": "スセソール",
            "number": "9",
            "fatherHorseName": "パイロPyro(米)",
            "fatherFatherHorseName": "Pulpit",
            "FFFatherHorseName": "A.P. Indy",
            "FFMotherHorseName": "Preach",
            "fatherMotherHorseName": "Wild Vision",
            "FMFatherHorseName": "Wild Again",
            "FMMotherHorseName": "Carol's Wonder",
            "motherHourseName": "ユーロペ",
            "motherFatherhorseName": "ダンスインザダーク",
            "MFFatherhorseName": "サンデーサイレンスSunday Silence(米)",
            "MFMotherhorseName": "ダンシングキイ",
            "motherMotherhorseName": "ルナセレナータ",
            "MMFatherhorseName": "クリスタルグリッターズCrystal Glitters(米)",
            "MMMotherhorseName": "アローローゼット"
        },
        {
            "horseName": "コスモナインボール",
            "number": "10",
            "fatherHorseName": "ハイアーゲーム",
            "fatherFatherHorseName": "サンデーサイレンスSunday Silence(米)",
            "FFFatherHorseName": "Halo",
            "FFMotherHorseName": "Wishing Well",
            "fatherMotherHorseName": "ファンジカFanjica(愛)",
            "FMFatherHorseName": "Law Society",
            "FMMotherHorseName": "Florie",
            "motherHourseName": "シックスポケット",
            "motherFatherhorseName": "カリズマティックCharismatic(米)",
            "MFFatherhorseName": "Summer Squall",
            "MFMotherhorseName": "Bali Babe",
            "motherMotherhorseName": "ビトウィーンダンシーズBetween Dances(米)",
            "MMFatherhorseName": "Miswaki",
            "MMMotherhorseName": "Taba Dance"
        },
        {
            "horseName": "レオタイザン",
            "number": "11",
            "fatherHorseName": "アサクサキングス",
            "fatherFatherHorseName": "ホワイトマズルWhite Muzzle(英)",
            "FFFatherHorseName": "ダンシングブレーヴDancing Brave(米)",
            "FFMotherHorseName": "Fair of the Furze",
            "fatherMotherHorseName": "クルーピアスター",
            "FMFatherHorseName": "サンデーサイレンスSunday Silence(米)",
            "FMMotherHorseName": "クルーピアレディーCroupier Lady(米)",
            "motherHourseName": "アリアローズ",
            "motherFatherhorseName": "ローエングリン",
            "MFFatherhorseName": "シングスピールSingspiel(愛)",
            "MFMotherhorseName": "カーリングCarling(仏)",
            "motherMotherhorseName": "フロリアリア",
            "MMFatherhorseName": "マンハッタンカフェ",
            "MMMotherhorseName": "ケイシーCasey(英)"
        },
        {
            "horseName": "グローバルノヴェル",
            "number": "12",
            "fatherHorseName": "ノヴェリストNovellist(愛)",
            "fatherFatherHorseName": "Monsun",
            "FFFatherHorseName": "Konigsstuhl",
            "FFMotherHorseName": "Mosella",
            "fatherMotherHorseName": "Night Lagoon",
            "FMFatherHorseName": "Lagunas",
            "FMMotherHorseName": "Nenuphar",
            "motherHourseName": "グローバルハート",
            "motherFatherhorseName": "クロフネ",
            "MFFatherhorseName": "フレンチデピュティFrench Deputy(米)",
            "MFMotherhorseName": "ブルーアヴェニューBlue Avenue(米)",
            "motherMotherhorseName": "グローバルピース",
            "MMFatherhorseName": "サンデーサイレンスSunday Silence(米)",
            "MMMotherhorseName": "エミネントガール"
        }
    ]
}

```


</div></details>

### 払い戻しの平均値を出してみる
- そもそも本当に一発逆転できんのか〜？という疑問
    - なので、高知ファイナルと高知競馬全レースの平均値を抽出した　
    - 圧倒的です、さすが一発逆転がつくだけある

![payoutBattle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/e6792cd1-846a-5b88-fd45-ac19aa939a19.png)

#### 一応細かいデータ

- 高知全レース

|  形式  |  払い戻し  |
| ---- | ---- |
|単勝|651.60|
|複勝|233.44|
|枠連|1428.27|
|馬連|2489.12|
|ワイド|931.61|
|馬単|5148.26|
|三連複|6238.22|
|三連単|41547.15|


- 高知ファイナル

|  形式  |  払い戻し  |
| ---- | ---- |
|単勝|970.54|
|複勝|306.40|
|馬連|4296.34|
|ワイド|1489.31|
|馬単|8900.46|
|三連複|12538.99|
|三連単|84267.44|

- これ以降細かいデータmarkdownの表が面倒なので出すのやめた

### 馬番号の統計
- 高知ファイナルの上位3着の枠順で見る、1着の3枠の多さは一体…
  - 困ったら３を買うと良い材料にはならなさそうだが、3という数字は覚えておいて損はないかも

![final_umaban.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/388c8f56-be07-abb2-493f-ad565f903f94.png)



- 参考までに普通のレース

![normal_umaban.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/62b2898d-dd55-15fc-7cbd-dd11348e74a7.png)

- 12頭フルで集まることがないにせよ、外枠不利であることは明確なようだ

### 上位3着の人気統計

- 高知ファイナルは荒れるというが、1着1番人気はデータが証明した

![final_odds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/70a07aca-dee9-3ce6-a465-b03ac2b2ca5f.png)

- 参考までに普通のレース
  - こっちでも思考停止で1着1番人気、2着2番人気でいい気がしてくる。やはり飛び込んでくる3着がポイントか

![normal_odds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/609d5216-9632-70fb-f57b-c2cfa38e8b6e.png)


## 結局どう買えばええねん

- 1番人気と2番人気をチラチラ見つつ、馬番3を忘れずに、天に祈り、馬連か三連複を買うのが一番コスパいい

## 推し買いもいいね

- シンデレラグレイ読んでオグリが脳にチラついたのでココヒメ買ったら当たった

https://twitter.com/umakanrenbot/status/1473444637159403522

### クソコード

- インタプリタで書いたものをコピーしたものだから結構ひどい

<details><summary>あなたはジメジメした石の裏をひっくり返してみる人ですね</summary><div>

- データ抽出

```python
def tmpDef(fireList):
    warukazu = len(fireList)
    tempList = []
    tempValue = 0
    for i in fireList[0].keys():
        for v in fireList:
            try:
                if isinstance(v[i], list):
                    sumValue = sum(v[i]) / len(v[i])
                    tempValue = tempValue + sumValue
                else:
                    tempValue = tempValue + int(v[i])
            except Exception as e:
                pass
        tempValue = tempValue / warukazu
        tempList.append(tempValue)
        tempValue = 0
    return tempList
client = MongoClient('localhost', 27017)
# データベース
db = client.umadb
# コレクション取得
dbcol = db.umacol5
funabashi = dbcol.find()
funabashiList = [i for i in funabashi]
fireList = []
iceList = []
ifPlace = "高知"
ifName = "ファイナル"
for i in funabashiList:
    # 全部
    if ifPlace in i['racePlace']:
        fireList.append(i['racePayout'])
    # ファイナル
    if ifPlace in i['racePlace'] and ifName in i['raceName']:
        iceList.append(i['racePayout'])
fireList = tmpDef(fireList)
iceList = tmpDef(iceList)
print(fireList)
print(iceList)
```

- グラフ作成

```python
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "IPAexMincho"
clm = ["払い戻し", "単勝", "複勝", "馬連", "ワイド", "馬単", "三連複", "三連単"]

raceData = [["全レース", 651.5978128797084, 233.43901883353536, 2489.1236330498177,
             931.6109761036867, 5148.262454434994, 6238.218408262454, 41547.14687120292],
            ["高知ファイナル", 970.5385996409336, 306.4033512866546, 4296.337522441651, 1489.3105924596045,
             8900.457809694793, 12538.99461400359, 84267.44165170557]]

df = pd.DataFrame(raceData, columns=clm)
df.plot(x="払い戻し", y=clm[1:7],
        kind="bar", figsize=(10, 6))
plt.title("高知全レース平均払戻vs高知ファイナル平均払戻")
plt.xticks(rotation=0)
plt.show()
```

</div></details>