ラベル貼るよ 第24回 人工知能
ここからはpythonを使う。
使うといっても、前回、参考にさせてもらった電気予測のコードを入れ替えながらやる。
まず最初にこれ↓
import pandas as pd
import matplotlib
matplotlib.use('Agg') # -----(1)
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg') # -----(1)
import matplotlib.pyplot as plt
次にCSVの読込をします。
前回の記事で保存したbase.csv。これを読み込む。
電気のときはこうでした↓
#電力の読込
df_kw = pd.read_csv("juyo-2018.csv",encoding="Shift_JIS",skiprows=1)
df_kw = pd.read_csv("juyo-2018.csv",encoding="Shift_JIS",skiprows=1)
自分はUTF-8の文字コードで保存、さらに最初の行からカラム指定しているので、
#電力の読込
df_kw = pd.read_csv("base.csv",encoding="UTF-8")
df_kw = pd.read_csv("base.csv",encoding="UTF-8")
これで、df_kwの中身はこう↓
umaID,kishuID
0 2016104772 1077
1 2016103444 5339
0 2016104772 1077
1 2016103444 5339
で、次に過去のレースを読み込みたい。
電気予測では、岡山の気温読込に、こう書かれていた。↓
#岡山
df_temp_oka = read_temp("oka_data.csv")
ここで書かれているread_tempは、関数です。df_temp_oka = read_temp("oka_data.csv")
電気予測では、def read_temp(filename):と書かれているところ。
今回は、関数は使わないので
それに合わせると
#岡山
df_temp_oka = read_temp("kakou.csv",encoding="UTF-8")
これで、df_temp_okaの中身は、こう↓
df_temp_oka = read_temp("kakou.csv",encoding="UTF-8")
これで、df_temp_okaの中身は、こう↓
umaID raceID kishuID r_date r_place r_sihbada r_meter \
0 2016103444 1801020511 1025 2018-09-01 札幌 芝 1800
1 2016103444 1802020205 1025 2018-07-08 函館 芝 1800
2 2016103444 1802020501 1025 2018-07-21 函館 芝 1800
3 2016103444 1805050511 1025 2018-11-17 東京 芝 1800
4 2016103444 1806050911 1025 2018-12-28 中山 芝 2000
5 2016103444 1905021211 1025 2019-05-26 東京 芝 2400
6 2016103444 1906020411 1025 2019-03-03 中山 芝 2000
7 2016103444 1906030811 1025 2019-04-14 中山 芝 2000
8 2016103444 1906040511 1025 2019-09-16 中山 芝 2200
9 2016104772 1809050605 5495 2018-12-16 阪神 芝 2000
10 2016104772 1905020810 1077 2019-05-12 東京 芝 2000
11 2016104772 1906010306 1077 2019-01-12 中山 芝 1600
12 2016104772 1906020606 1075 2019-03-10 中山 芝 2000
13 2016104772 1906040511 1077 2019-09-16 中山 芝 2200
r_time
0 NaN
1 113.6
2 109.7
3 106.6
4 121.9
5 143.1
6 123.7
7 120.1
8 132.1
9 NaN
10 118.3
11 97.4
12 121.2
13 131.9
0 2016103444 1801020511 1025 2018-09-01 札幌 芝 1800
1 2016103444 1802020205 1025 2018-07-08 函館 芝 1800
2 2016103444 1802020501 1025 2018-07-21 函館 芝 1800
3 2016103444 1805050511 1025 2018-11-17 東京 芝 1800
4 2016103444 1806050911 1025 2018-12-28 中山 芝 2000
5 2016103444 1905021211 1025 2019-05-26 東京 芝 2400
6 2016103444 1906020411 1025 2019-03-03 中山 芝 2000
7 2016103444 1906030811 1025 2019-04-14 中山 芝 2000
8 2016103444 1906040511 1025 2019-09-16 中山 芝 2200
9 2016104772 1809050605 5495 2018-12-16 阪神 芝 2000
10 2016104772 1905020810 1077 2019-05-12 東京 芝 2000
11 2016104772 1906010306 1077 2019-01-12 中山 芝 1600
12 2016104772 1906020606 1075 2019-03-10 中山 芝 2000
13 2016104772 1906040511 1077 2019-09-16 中山 芝 2200
r_time
0 NaN
1 113.6
2 109.7
3 106.6
4 121.9
5 143.1
6 123.7
7 120.1
8 132.1
9 NaN
10 118.3
11 97.4
12 121.2
13 131.9
このとき、r_date(レース日)の2018-08-01という形式が日付なのか?はたまた人名のような文字なのか?はっきりさせておく必要がある。
なので、
df_temp_oka ['r_date'] = pd.to_datetime(df_temp_oka ['r_date'])
様式さえ合っていれば、エラーにはならない・・・・はず。
やっとメインのラベルですが、質的データをラベルします。
日付は、全部ラベルすると大変なので、年と月だけにして日は、捨てます。
まず年と月にします。
電気予測では
df["MONTH"] = df.DATETIME.map(lambda _: _.month)
こういう形で、月にしてました。
なので、年と月は、こうなります。
df_temp_oka["YEAR"] = df_temp_oka.r_date.map(lambda _: _.year)
df_temp_oka["MONTH"] = df_temp_oka.r_date.map(lambda _: _.month)
df_temp_oka["MONTH"] = df_temp_oka.r_date.map(lambda _: _.month)
これで中身は、こうなります。
umaID raceID kishuID r_date r_place r_sihbada r_meter \
0 2016103444 1801020511 1025 2018-09-01 札幌 芝 1800
1 2016103444 1802020205 1025 2018-07-08 函館 芝 1800
2 2016103444 1802020501 1025 2018-07-21 函館 芝 1800
3 2016103444 1805050511 1025 2018-11-17 東京 芝 1800
4 2016103444 1806050911 1025 2018-12-28 中山 芝 2000
5 2016103444 1905021211 1025 2019-05-26 東京 芝 2400
6 2016103444 1906020411 1025 2019-03-03 中山 芝 2000
7 2016103444 1906030811 1025 2019-04-14 中山 芝 2000
8 2016103444 1906040511 1025 2019-09-16 中山 芝 2200
9 2016104772 1809050605 5495 2018-12-16 阪神 芝 2000
10 2016104772 1905020810 1077 2019-05-12 東京 芝 2000
11 2016104772 1906010306 1077 2019-01-12 中山 芝 1600
12 2016104772 1906020606 1075 2019-03-10 中山 芝 2000
13 2016104772 1906040511 1077 2019-09-16 中山 芝 2200
r_time YEAR MONTH
0 NaN 2018 9
1 113.6 2018 7
2 109.7 2018 7
3 106.6 2018 11
4 121.9 2018 12
5 143.1 2019 5
6 123.7 2019 3
7 120.1 2019 4
8 132.1 2019 9
9 NaN 2018 12
10 118.3 2019 5
11 97.4 2019 1
12 121.2 2019 3
13 131.9 2019 9
0 2016103444 1801020511 1025 2018-09-01 札幌 芝 1800
1 2016103444 1802020205 1025 2018-07-08 函館 芝 1800
2 2016103444 1802020501 1025 2018-07-21 函館 芝 1800
3 2016103444 1805050511 1025 2018-11-17 東京 芝 1800
4 2016103444 1806050911 1025 2018-12-28 中山 芝 2000
5 2016103444 1905021211 1025 2019-05-26 東京 芝 2400
6 2016103444 1906020411 1025 2019-03-03 中山 芝 2000
7 2016103444 1906030811 1025 2019-04-14 中山 芝 2000
8 2016103444 1906040511 1025 2019-09-16 中山 芝 2200
9 2016104772 1809050605 5495 2018-12-16 阪神 芝 2000
10 2016104772 1905020810 1077 2019-05-12 東京 芝 2000
11 2016104772 1906010306 1077 2019-01-12 中山 芝 1600
12 2016104772 1906020606 1075 2019-03-10 中山 芝 2000
13 2016104772 1906040511 1077 2019-09-16 中山 芝 2200
r_time YEAR MONTH
0 NaN 2018 9
1 113.6 2018 7
2 109.7 2018 7
3 106.6 2018 11
4 121.9 2018 12
5 143.1 2019 5
6 123.7 2019 3
7 120.1 2019 4
8 132.1 2019 9
9 NaN 2018 12
10 118.3 2019 5
11 97.4 2019 1
12 121.2 2019 3
13 131.9 2019 9
ちなみにこの段階で、r_dateはいらないので削除してもらってもいいです。
削除の仕方はこうです。
del df_kw['r_date']
続いてデータで、不足している行は、削除します。
電気予測ではこうでした↓
# null値の削除
df = df.dropna()
df = df.dropna()
これに合わせると
# null値の削除
df_temp_oka = df_temp_oka.dropna()
df_temp_oka = df_temp_oka.dropna()
これで欠損データは、削除されます。
いよいよone-hotラベル作業です。
対象となるとone-hotラベルは、
- 馬ID
- レースID
- 騎手ID
- 開催場所
- 芝ダ
- 年
- 月
距離とタイムは、量的データだと思うので対象外にします。
one-hotラベルは、電気予測ではこうでした。↓
cols = ["MONTH","WEEK","HOUR"]
for col in cols:
df = df.join(pd.get_dummies(df[col], prefix=col))
for col in cols:
df = df.join(pd.get_dummies(df[col], prefix=col))
これに合わせるとこうなります↓
cols = ["umaID","raceID","kishuID","r_place","r_shibada","YEAR","MONTH"]
for col in cols:
df_temp_oka = df_temp_oka.join(pd.get_dummies(df_temp_oka[col], prefix=col))
for col in cols:
df_temp_oka = df_temp_oka.join(pd.get_dummies(df_temp_oka[col], prefix=col))
これでone-hotラベル貼りました。
df_temp_okaはこうなります。
umaID raceID kishuID r_place r_shibada r_meter r_time YEAR \
0 2016103444 1801020511 1025 札幌 芝 1800 NaN 2018
1 2016103444 1802020205 1025 函館 芝 1800 113.6 2018
2 2016103444 1802020501 1025 函館 芝 1800 109.7 2018
3 2016103444 1805050511 1025 東京 芝 1800 106.6 2018
4 2016103444 1806050911 1025 中山 芝 2000 121.9 2018
5 2016103444 1905021211 1025 東京 芝 2400 143.1 2019
6 2016103444 1906020411 1025 中山 芝 2000 123.7 2019
7 2016103444 1906030811 1025 中山 芝 2000 120.1 2019
8 2016103444 1906040511 1025 中山 芝 2200 132.1 2019
9 2016104772 1809050605 5495 阪神 芝 2000 NaN 2018
10 2016104772 1905020810 1077 東京 芝 2000 118.3 2019
11 2016104772 1906010306 1077 中山 芝 1600 97.4 2019
12 2016104772 1906020606 1075 中山 芝 2000 121.2 2019
13 2016104772 1906040511 1077 中山 芝 2200 131.9 2019
MONTH umaID_2016103444 ... YEAR_2018 YEAR_2019 MONTH_1 MONTH_3 \
0 9 1 ... 1 0 0 0
1 7 1 ... 1 0 0 0
2 7 1 ... 1 0 0 0
3 11 1 ... 1 0 0 0
4 12 1 ... 1 0 0 0
5 5 1 ... 0 1 0 0
6 3 1 ... 0 1 0 1
7 4 1 ... 0 1 0 0
8 9 1 ... 0 1 0 0
9 12 0 ... 1 0 0 0
10 5 0 ... 0 1 0 0
11 1 0 ... 0 1 1 0
12 3 0 ... 0 1 0 1
13 9 0 ... 0 1 0 0
MONTH_4 MONTH_5 MONTH_7 MONTH_9 MONTH_11 MONTH_12
0 0 0 0 1 0 0
1 0 0 1 0 0 0
2 0 0 1 0 0 0
3 0 0 0 0 1 0
4 0 0 0 0 0 1
5 0 1 0 0 0 0
6 0 0 0 0 0 0
7 1 0 0 0 0 0
8 0 0 0 1 0 0
9 0 0 0 0 0 1
10 0 1 0 0 0 0
11 0 0 0 0 0 0
12 0 0 0 0 0 0
13 0 0 0 1 0 0
[14 rows x 44 columns]
0 2016103444 1801020511 1025 札幌 芝 1800 NaN 2018
1 2016103444 1802020205 1025 函館 芝 1800 113.6 2018
2 2016103444 1802020501 1025 函館 芝 1800 109.7 2018
3 2016103444 1805050511 1025 東京 芝 1800 106.6 2018
4 2016103444 1806050911 1025 中山 芝 2000 121.9 2018
5 2016103444 1905021211 1025 東京 芝 2400 143.1 2019
6 2016103444 1906020411 1025 中山 芝 2000 123.7 2019
7 2016103444 1906030811 1025 中山 芝 2000 120.1 2019
8 2016103444 1906040511 1025 中山 芝 2200 132.1 2019
9 2016104772 1809050605 5495 阪神 芝 2000 NaN 2018
10 2016104772 1905020810 1077 東京 芝 2000 118.3 2019
11 2016104772 1906010306 1077 中山 芝 1600 97.4 2019
12 2016104772 1906020606 1075 中山 芝 2000 121.2 2019
13 2016104772 1906040511 1077 中山 芝 2200 131.9 2019
MONTH umaID_2016103444 ... YEAR_2018 YEAR_2019 MONTH_1 MONTH_3 \
0 9 1 ... 1 0 0 0
1 7 1 ... 1 0 0 0
2 7 1 ... 1 0 0 0
3 11 1 ... 1 0 0 0
4 12 1 ... 1 0 0 0
5 5 1 ... 0 1 0 0
6 3 1 ... 0 1 0 1
7 4 1 ... 0 1 0 0
8 9 1 ... 0 1 0 0
9 12 0 ... 1 0 0 0
10 5 0 ... 0 1 0 0
11 1 0 ... 0 1 1 0
12 3 0 ... 0 1 0 1
13 9 0 ... 0 1 0 0
MONTH_4 MONTH_5 MONTH_7 MONTH_9 MONTH_11 MONTH_12
0 0 0 0 1 0 0
1 0 0 1 0 0 0
2 0 0 1 0 0 0
3 0 0 0 0 1 0
4 0 0 0 0 0 1
5 0 1 0 0 0 0
6 0 0 0 0 0 0
7 1 0 0 0 0 0
8 0 0 0 1 0 0
9 0 0 0 0 0 1
10 0 1 0 0 0 0
11 0 0 0 0 0 0
12 0 0 0 0 0 0
13 0 0 0 1 0 0
[14 rows x 44 columns]
次、学習編
コメント
0 件のコメント :
コメントを投稿