見出し画像

JRAレース結果【CSVファイル作成→MySQLインポート】③

本日はロバの日ですね!
エンプレス賞も開催されているようで、何か不穏で序盤から危険な開催となっておりました。
滅多に起きないカンパイ、1日2回もやっちまうの??
おーい、川崎競馬さん??絶対に運営アカンよー。
その内一回は危険スタート。
これは人為ミス、スターター発走判断がアカンでしょう、と。
(スタッフさんのご無事をお祈り致します。)
そして、交流戦では原君とか落馬。。。
(こちらもご無事をお祈り致します。)
もう、ユウガさんもこれじゃ激おこですよ、、これからの競馬開催大丈夫なん?
是非とも本当に無事な開催施行を祈ってやみません。

さて、、本題です。
すみません昨日1日中、脚質やペース、、ラップなどの検討を行っておりました。
それでですが、、カラムに入れる項目が大量になりました(苦笑)

以下となります。

create table jra_race_ms (
	race_d_id BIGINT(15) NOT NULL PRIMARY KEY comment '拡張レースID',
	Kaisai_Date DATE comment '日付',
	Kaisai TEXT comment '開催',
	Race_No INT(2) comment 'レース数',
	Race_Name TEXT comment 'レース名',
	Class TEXT comment 'クラス',
	Course_Type VARCHAR(4) comment 'コース種別',
	Distance INT(4) comment '距離',
	Orbiting_Direct VARCHAR(2) comment '周回',
	Race_Track VARCHAR(4) comment '馬場',
	Weather VARCHAR(4) comment '天気',
	Race_Course VARCHAR(6) comment 'コース',
	Barrier INT(2) comment '枠番',
	Horse_No VARCHAR(4) comment '馬番',
	Entries INT(2) comment '出走頭数',
	Horse_Name TEXT comment '馬名',
	Horse_Gender VARCHAR(4) comment '性別',
	Horse_Age INT(2) comment '馬齢',
	Jockey_Name TEXT comment '騎手名',
	Running_Ptn VARCHAR(6) comment '脚質',
	Assigned_Wei FLOAT(3,1) comment '斤量',
	Race_Time FLOAT(4,1) comment '走破タイム',
	SP_Val FLOAT(3,1) comment 'SP値',
	MPS_Val FLOAT(4,4) comment '1m進む秒数',
	G3F_Fin FLOAT(3,1) comment '上がり3F',
	G3F_Dif FLOAT(3,1) comment '上がり3F差',
	Order_Arrival INT(2) comment '着順',
	Length TEXT comment '着差',
	Len_Sec_Dif FLOAT(3,1) comment '秒着差',
	Furlong_Pass VARCHAR(15) comment '通過順',
	Win FLOAT(4,1) comment '単勝オッズ',
	OPR_Fault FLOAT(5,1) comment 'R結果の単勝断層',
	Horse_Pop INT(2) comment '人気',
	Weight INT(3) comment '馬体重',
	Inc_Dec INT(3) comment '馬体重増減',
	Lap_Tend VARCHAR(4) comment 'ラップ傾向',
	Pace VARCHAR(6) comment 'ペース',
	Settle VARCHAR(4) comment '決め手',
	Trainer TEXT comment '調教師名',
	Trainer_Aff TEXT comment '厩舎所属',
	Owner TEXT comment '馬主名',
	Prize_Money FLOAT(20,1) comment '賞金',
	race_id BIGINT(14) comment 'レースID',
	course_id INT(4) comment 'コースID',
	horse_id BIGINT(11) comment '馬ID',
	jockey_id VARCHAR(5) comment '騎手ID',
	trainer_id VARCHAR(5) comment '調教師ID',
	owner_id VARCHAR(7) comment '馬主ID'
)
default charset=utf8
comment='JRAレース用TBL';

DEFAULT NULLは止めました。
見慣れない情報が出ていますね、はい。
多少ゴニョゴニョして、データを結合して、、と。
脚質もプロットより培った方法論で登録できております。
これで馬の脚質別勝率や、騎手の脚質別勝率や複勝率なんかも算出可能となります。(何が得意か?とか)
以前に申した、「何を以て」というお題目はここに在ったりしました。

| race_d_id     | Kaisai_Date | Kaisai       | Race_No | Race_Name | Class     | Course_Type | Distance | Orbiting_Direct | Race_Track | Weather | Race_Course | Barrier | Horse_No | Entries | Horse_Name         | Horse_Gender | Horse_Age | Jockey_Name | Running_Ptn | Assigned_Wei | Race_Time | SP_Val | MPS_Val | G3F_Fin | G3F_Dif | Order_Arrival | Length | Len_Sec_Dif | Furlong_Pass | Win  | OPR_Fault | Horse_Pop | Weight | Inc_Dec | Lap_Tend | Pace   | Settle | Trainer  | Trainer_Aff | Owner              | Prize_Money | race_id      | course_id | horse_id   | jockey_id | trainer_id | owner_id |
+---------------+-------------+--------------+---------+-----------+-----------+-------------+----------+-----------------+------------+---------+-------------+---------+----------+---------+--------------------+--------------+-----------+-------------+-------------+--------------+-----------+--------+---------+---------+---------+---------------+--------+-------------+--------------+------+-----------+-----------+--------+---------+----------+--------+--------+----------+-------------+--------------------+-------------+--------------+-----------+------------+-----------+------------+----------+
| xxxxxxx    | 2018-07-28  | 1回札幌1日目 |       1 | 2歳未勝利 | 2歳未勝利 ||     1800 || 良         || 札幌        |       1 | 1        |       6 | コントラチェック   ||         2 | ルメール    | 逃げ        |         54.0 |     110.1 |   58.9 |  0.0612 |    35.2 |    -0.9 |             1 |        |        -1.2 | 1-1-1-1      |  1.1 |       6.9 |         1 |    458 |       4 | 後傾     | スロー | 稍瞬発 | 藤沢和雄 | 美浦        | キャロットファーム |       500.0 | 201801010101 |         1 | 2016104880 | 5339      | 0386       | 486800   |
| xxxxxxx    | 2018-07-28  | 1回札幌1日目 |       1 | 2歳未勝利 | 2歳未勝利 | 芝          |     1800 | 右              || 晴      | 札幌        |       2 | 2        |       6 | ロングファイナリー | 牡           |         2 | 古川吉洋    | 差し        |         54.0 |     114.0 |   56.8 |  0.0633 |    38.0 |     0.0 |             6 | 3      |         0.5 | 6-5-4-5      | 50.8 |      50.8 |         6 |    468 |     -12 | 後傾     | スロー | 稍瞬発 | 高橋亮   | 栗東        | 中井敏雄           |         0.0 | 201801010101 |         1 | 2016102801 | 1015      | 1136       | 602002   |

このゴニョゴニョですが、ラップ傾向などは「3-3ラップ」を基準に算出しております。
後はスピード指数、1m/secなどなど今までのプロットに準拠したものも導入しました。
想定ラップ用のテーブル準備をしており、これも算出方法の検討をしている最中ですね。
上手く機械学習も合わせれば何か良いことがありそうな予感ですw
モデリングとか私なんかにゃハードル高くて、、スゲーむずいのですけどね。。。(´;ω;`)

前置きが長くなりましたが、既にテーブルにインポートされているのが判ると思います。
それではインポート方法をご説明致します<(_ _)>

CSVデータの準備とローカルファイルの許可

インポート前に、先ずはカラムと項目が合っているか?や、キャラセットはUTF8となっているか?改行コードはLFに合わせているか??などなど最終確認を行ってください。

それから、見出しの様にオマジナイをします。
コマンドプロンプトなどターミナルから以下の方法でログイン致します。

mysql -u root -p local_infile=on;

ローカルファイル(PC内のCSVデータ)を許可してログインしないとエラーが発生します。
又、これだけでは終わりません。

select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)

0だから許可していないよ~となっています。
なので、、、

set persist local_infile=1;

SET文で許可します。

select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
|              1 |
+----------------+
1 row in set (0.01 sec)

これで許可されたので、インポート準備完了です。

LOADDATA施行

さて、LOADDATAを実行してCSVファイルを取り込みます。

LOAD DATA
    LOCAL INFILE 'C:/PATH/XXXX.csv'
    INTO TABLE TABLE名
    CHARACTER SET utf8
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
;

インポートすべきファイルのディレクトリPATHは間違いのなきよう。
はい、、、本当にこれだけです!
4.6万件程度ならあっという間にインポートが終わってしまいます!w
そりゃ、数十万件とか一挙にインポートするのは流石にお勧め致しません。ですが、とてもじゃないけどフレーム化する時間を考えたら、物凄い速さで登録が出来て且つ、積もっていく訳ですね。

本当に入っているの???って思いますが、入っています。

select * from TABLE名 limit 100;
select * from TABLE名 ORDER BY ID DESC LIMIT 100;

ご注意ですが、select * from TABLE名とはしないでください。
あくまでも件数を絞って下さいませ、全てを抽出すると時間が掛かります。
上記のようなコマンドを使って下さいませ<(_ _)>

select count(ID) from TABLE名;
+------------------+
| count(ID)     |
+------------------+
|            91928 |
+------------------+
1 row in set (0.23 sec)

2018と2019年を入れているのでこんな感じでしょう。
そんなこんなで大元のデータインポート編は終わりますが、次回もなにかしらで続きます!!
それでは!!!

この記事が気に入ったらサポートをしてみませんか?