def scale_df(self): print("scale_df") mmsc_columns = [ "距離", "頭数", "枠番", "休養後出走回数", "予想人気", "先行指数順位", "馬齢", "距離増減", "前走頭数" ] mmsc_dict_name = "sc_base_mmsc" stdsc_columns = [ "予想勝ち指数", "休養週数", "キャリア", "斤量比", "負担重量", "デフォルト得点", "得点V1", "得点V2", "得点V3", "fa_1_1", "fa_2_1", "fa_3_1", "fa_4_1", "fa_5_1", "fa_1_2", "fa_2_2", "fa_3_2", "fa_4_2", "fa_5_2", "fa_1_3", "fa_2_3", "fa_3_3", "fa_4_3", "fa_5_3", "fa_1_4", "fa_2_4", "fa_3_4", "fa_4_4", "fa_5_4", "fa_1_5", "fa_2_5", "fa_3_5", "fa_4_5", "fa_5_5" ] stdsc_dict_name = "sc_base_stdsc" self.base_df = mu.scale_df_for_fa(self.base_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, self.dict_folder) self.base_df.loc[:, "競走種別コード_h"] = self.base_df["競走種別コード"] self.base_df.loc[:, "場コード_h"] = self.base_df["場コード"] hash_track_columns = [ "主催者コード", "競走種別コード_h", "場コード_h", "競走条件コード", "トラックコード" ] hash_track_dict_name = "sc_base_hash_track" self.base_df = mu.hash_eoncoding(self.base_df, hash_track_columns, 10, hash_track_dict_name, self.dict_folder)
def _proc_scale_df_for_fa(self, raceuma_df): print("-- check! this is LBLoad class: " + sys._getframe().f_code.co_name) mmsc_columns = ["距離増減", "負担重量"] mmsc_dict_name = "sc_fa_mmsc" stdsc_columns = ["馬体重"] stdsc_dict_name = "sc_fa_stdsc" raceuma_df = mu.scale_df_for_fa(raceuma_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name,self.dict_folder) return raceuma_df
def factory_analyze_raceuma_result_df(self, race_df, input_raceuma_df, dict_folder): """ RaceUmaの因子分析を行うためのデータを取得 """ print("factory_analyze_raceuma_result_df") temp_df = pd.merge(input_raceuma_df, race_df, on="競走コード") X = temp_df[[ '競走コード', '馬番', '枠番', 'タイム指数', '単勝オッズ', '先行率', 'ペース偏差値', '距離増減', '斤量比', '追込率', '平均タイム', "距離", "頭数", "非根幹", "上り係数", "逃げ勝ち", "内勝ち", "外勝ち", "短縮勝ち", "延長勝ち", "人気勝ち", "1番人気", "3角先頭", "4角先頭", "上がり最速", "上がりタイム", "連闘", "休み明け", "大差負け", "展開脚質", "展開脚色" ]] mmsc_columns = ["頭数", "展開脚質", "展開脚色", "上がりタイム"] mmsc_dict_name = "sc_fa_race_mmsc" stdsc_columns = ["距離"] stdsc_dict_name = "sc_fa_race_stdsc" X = mu.scale_df_for_fa(X, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, dict_folder) X_fact = X.drop(["競走コード", "馬番"], axis=1).astype({ '非根幹': int, '逃げ勝ち': int, '内勝ち': int, '外勝ち': int, '短縮勝ち': int, '延長勝ち': int, '人気勝ち': int, '1番人気': int, '3角先頭': int, '4角先頭': int, '上がり最速': int, '休み明け': int, '連闘': int, '大差負け': int }) X_fact = X_fact.replace(np.inf, np.nan).fillna(X_fact.median()).fillna(0) X_fact.iloc[0] = X_fact.iloc[0] + 0.000001 dict_name = "fa_raceuma_result_df" filename = dict_folder + dict_name + '.pkl' if os.path.exists(filename): fa = mu.load_dict(dict_name, dict_folder) else: fa = FactorAnalyzer(n_factors=5, rotation='promax', impute='drop') fa.fit(X_fact) mu.save_dict(fa, dict_name, dict_folder) fa_np = fa.transform(X_fact) fa_df = pd.DataFrame(fa_np, columns=["fa_1", "fa_2", "fa_3", "fa_4", "fa_5"]) fa_df = pd.concat([X[["競走コード", "馬番"]], fa_df], axis=1) X_fact = pd.merge(input_raceuma_df, fa_df, on=["競走コード", "馬番"]) return X_fact
def _proc_scale_df_for_fa(self, raceuma_df): mmsc_columns = [ "コーナー順位4", "距離増減", "斤量比", "単勝人気", "確定着順", "騎手ランキング", "調教師ランキング", "負担重量" ] mmsc_dict_name = "sc_fa_mmsc" stdsc_columns = [ "タイム指数", "単勝オッズ", "着差", "ペース偏差値", "平均タイム", "休養週数", "馬体重", "馬体重増減", "デフォルト得点", "得点V1", "得点V2", "得点V3" ] stdsc_dict_name = "sc_fa_stdsc" raceuma_df = mu.scale_df_for_fa(raceuma_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, self.dict_folder) return raceuma_df
def _scale_df(self): print("scale_df") mmsc_columns = ["距離", "頭数", "枠番", "休養後出走回数", "先行指数順位", "馬齢", "距離増減"] mmsc_dict_name = "sc_base_mmsc" stdsc_columns = ["休養週数", "負担重量"] stdsc_dict_name = "sc_base_stdsc" self.base_df = mu.scale_df_for_fa(self.base_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, self.dict_folder) self.base_df.loc[:, "競走種別コード_h"] = self.base_df["競走種別コード"] self.base_df.loc[:, "場コード_h"] = self.base_df["場コード"] hash_track_columns = ["主催者コード", "競走種別コード_h", "場コード_h", "トラックコード"] hash_track_dict_name = "sc_base_hash_track" self.base_df = mu.hash_eoncoding(self.base_df, hash_track_columns, 10, hash_track_dict_name, self.dict_folder) hash_newtype1_columns = ["場コード", "非根幹", "頭数グループ", "性別コード", "騎手所属場コード", "見習区分", "テン乗り", "キャリア", "調教師所属場コード", "東西所属コード", "主催者コード_1", "距離_1", "場コード_1", "頭数_1", "ペース_1", "トラックコード_1", "ナイター_1", "季節_1", "非根幹_1", "距離グループ_1", "頭数グループ_1", "コース_1", "逃げ勝ち_1", "内勝ち_1", "外勝ち_1", "短縮勝ち_1", "延長勝ち_1", "人気勝ち_1", "枠番_1", "展開コード_1", "馬体重順位_1"] hash_newtype1_dict_name = "sc_base_hash_newtype1" self.base_df = mu.hash_eoncoding(self.base_df, hash_newtype1_columns, 30, hash_newtype1_dict_name, self.dict_folder)
def _scale_df(self): print("scale_df") mmsc_columns = [ "距離", "頭数", "枠番", "休養後出走回数", "予想人気", "先行指数順位", "馬齢", "距離増減", "前走頭数" ] mmsc_dict_name = "sc_base_mmsc" stdsc_columns = [ "予想勝ち指数", "休養週数", "キャリア", "斤量比", "負担重量", "デフォルト得点", "得点V1", "得点V2", "得点V3", "fa_1_1", "fa_2_1", "fa_3_1", "fa_4_1", "fa_5_1", "fa_1_2", "fa_2_2", "fa_3_2", "fa_4_2", "fa_5_2", "fa_1_3", "fa_2_3", "fa_3_3", "fa_4_3", "fa_5_3", "fa_1_4", "fa_2_4", "fa_3_4", "fa_4_4", "fa_5_4", "fa_1_5", "fa_2_5", "fa_3_5", "fa_4_5", "fa_5_5" ] stdsc_dict_name = "sc_base_stdsc" self.base_df = mu.scale_df_for_fa(self.base_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, self.dict_folder) self.base_df.loc[:, "競走種別コード_h"] = self.base_df["競走種別コード"] self.base_df.loc[:, "場コード_h"] = self.base_df["場コード"] hash_track_columns = [ "主催者コード", "競走種別コード_h", "場コード_h", "競走条件コード", "トラックコード" ] hash_track_dict_name = "sc_base_hash_track" self.base_df = mu.hash_eoncoding(self.base_df, hash_track_columns, 10, hash_track_dict_name, self.dict_folder) hash_newtype1_columns = [ "季節", "ナイター", "非根幹", "距離グループ", "頭数グループ", "性別コード", "予想展開" ] hash_newtype1_dict_name = "sc_base_hash_newtype1" self.base_df = mu.hash_eoncoding(self.base_df, hash_newtype1_columns, 10, hash_newtype1_dict_name, self.dict_folder) hash_newtype2_columns = [ "クラス変動", "騎手所属場コード", "見習区分", "テン乗り", "調教師所属場コード", "馬番グループ", "馬記号コード", "品種コード", "毛色コード", "東西所属コード" ] hash_newtype2_dict_name = "sc_base_hash_newtype2" self.base_df = mu.hash_eoncoding(self.base_df, hash_newtype2_columns, 20, hash_newtype2_dict_name, self.dict_folder)
def factory_analyze_raceuma_result_df(self, race_df, input_raceuma_df, dict_folder): """ RaceUmaの因子分析を行うためのデータを取得 """ print("-- check! this is BaseTransform class: " + sys._getframe().f_code.co_name) temp_df = pd.merge(input_raceuma_df, race_df, on="競走コード") X = temp_df[[ '競走コード', '馬番', 'タイム指数', '単勝オッズ', '先行率', 'ペース偏差値', '距離増減', '斤量比', '追込率', '平均タイム', "距離", "頭数", "非根幹", "上り係数", "逃げ勝ち", "内勝ち", "外勝ち", "短縮勝ち", "延長勝ち", "人気勝ち" ]] mmsc_columns = ["頭数"] mmsc_dict_name = "sc_fa_race_mmsc" stdsc_columns = ["距離"] stdsc_dict_name = "sc_fa_race_stdsc" X = mu.scale_df_for_fa(X, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, dict_folder) X_fact = X.drop(["競走コード", "馬番"], axis=1) X_fact = X_fact.replace(np.inf, np.nan).fillna(X_fact.median()).fillna(0) X_fact.iloc[0] = X_fact.iloc[0] + 0.000001 dict_name = "fa_raceuma_result_df" filename = dict_folder + dict_name + '.pkl' if os.path.exists(filename): fa = mu.load_dict(dict_name, dict_folder) else: fa = FactorAnalyzer(n_factors=3, rotation='promax', impute='drop') fa.fit(X_fact) mu.save_dict(fa, dict_name, dict_folder) fa_np = fa.transform(X_fact) fa_df = pd.DataFrame(fa_np, columns=["fa_1", "fa_2", "fa_3"]) fa_df = pd.concat([X[["競走コード", "馬番"]], fa_df], axis=1) X_fact = pd.merge(input_raceuma_df, fa_df, on=["競走コード", "馬番"]) return X_fact
def _scale_df(self): mmsc_columns = [ "距離", "競走番号", "頭数", "初出走頭数", "枠番", "予想タイム指数順位", "休養後出走回数", "予想人気", "先行指数順位", "馬齢", "距離増減", "前走着順", "前走人気", "前走頭数", "騎手ランキング", "調教師ランキング", "得点V1順位", "得点V2順位", "デフォルト得点順位", "得点V3順位" ] mmsc_dict_name = "sc_base_mmsc" stdsc_columns = [ "予想勝ち指数", "予想決着指数", "休養週数", "予想オッズ", "血統距離評価", "血統トラック評価", "血統成長力評価", "先行指数", "血統総合評価", "血統距離評価B", "血統トラック評価B", "血統成長力評価B", "血統総合評価B", "騎手評価", "調教師評価", "枠順評価", "脚質評価", "キャリア", "前走着差", "前走馬体重", "タイム指数上昇係数", "タイム指数回帰推定値", "タイム指数回帰標準偏差", "斤量比", "前走休養週数", "負担重量", "予想タイム指数", "デフォルト得点", "得点V1", "得点V2", "得点V3", "fa_1_1", "fa_2_1", "fa_3_1", "fa_1_2", "fa_2_2", "fa_3_2", "同場_max", "同場_mean", "同距離_max", "同距離_mean", "同根幹_max", "同根幹_mean", "同距離グループ_max", "同距離グループ_mean", "同馬番グループ_max", "同馬番グループ_mean" ] stdsc_dict_name = "sc_base_stdsc" self.base_df = mu.scale_df_for_fa(self.base_df, mmsc_columns, mmsc_dict_name, stdsc_columns, stdsc_dict_name, self.dict_folder) oh_columns = [ "月", "グレードコード", "クラス変動", "前走トラック種別コード", "月_1", "クラス変動_1", "月_2", "クラス変動_2" ] oh_dict_name = "sc_base_hash_month" self.base_df = mu.hash_eoncoding(self.base_df, oh_columns, 20, oh_dict_name, self.dict_folder) self.base_df.loc[:, "競走種別コード_h"] = self.base_df["競走種別コード"] self.base_df.loc[:, "場コード_h"] = self.base_df["場コード"] hash_track_columns = [ "トラック種別コード", "主催者コード", "競走種別コード_h", "場コード_h", "競走条件コード", "トラックコード", "混合" ] hash_track_dict_name = "sc_base_hash_track" self.base_df = mu.hash_eoncoding(self.base_df, hash_track_columns, 10, hash_track_dict_name, self.dict_folder) hash_kishu_columns = ["騎手コード", "騎手所属場コード", "見習区分", "テン乗り"] hash_kishu_dict_name = "sc_base_hash_kishu" self.base_df = mu.hash_eoncoding(self.base_df, hash_kishu_columns, 30, hash_kishu_dict_name, self.dict_folder) hash_chokyoshi_columns = ["調教師コード", "調教師所属場コード", "所属", "転厩", "東西所属コード"] hash_chokyoshi_dict_name = "sc_base_hash_chokyoshi" self.base_df = mu.hash_eoncoding(self.base_df, hash_chokyoshi_columns, 30, hash_chokyoshi_dict_name, self.dict_folder) hash_horse_columns = ["生産者コード", "繁殖登録番号1", "繁殖登録番号5", "馬主コード", "性別コード"] hash_horse_dict_name = "sc_base_hash_horse" self.base_df = mu.hash_eoncoding(self.base_df, hash_horse_columns, 30, hash_horse_dict_name, self.dict_folder) hash_prev1_columns = [ "騎手名_1", "ペース_1", "馬場状態コード_1", "競走種別コード_1", "展開コード_1", "騎手所属場コード_1", "テン乗り_1" ] hash_prev1_dict_name = "sc_base_hash_prev1" self.base_df = mu.hash_eoncoding(self.base_df, hash_prev1_columns, 10, hash_prev1_dict_name, self.dict_folder) hash_prev2_columns = [ "騎手名_2", "ペース_2", "馬場状態コード_2", "競走種別コード_2", "展開コード_2", "騎手所属場コード_2", "テン乗り_2" ] hash_prev2_dict_name = "sc_base_hash_prev2" self.base_df = mu.hash_eoncoding(self.base_df, hash_prev2_columns, 10, hash_prev2_dict_name, self.dict_folder) hash_newtype1_columns = [ "同場騎手_1", "同所属場_1", "同所属騎手_1", "同場騎手_2", "同所属場_2", "同所属騎手_2", "継続騎乗", "同場騎手", "同所属場", "同所属騎手" ] hash_newtype1_dict_name = "sc_base_hash_newtype1" self.base_df = mu.hash_eoncoding(self.base_df, hash_newtype1_columns, 20, hash_newtype1_dict_name, self.dict_folder) hash_newtype2_columns = [ "馬番グループ", "予想人気グループ", "予想展開", "非根幹", "距離グループ", "逃げ勝ち_1", "内勝ち_1", "外勝ち_1", "短縮勝ち_1", "延長勝ち_1", "人気勝ち_1", "逃げ勝ち_2", "内勝ち_2", "外勝ち_2", "短縮勝ち_2", "延長勝ち_2", "人気勝ち_2", "同主催者", "同場コード", "同根幹", "同距離グループ", "頭数差", "休み明け", "前走凡走", "前走激走", "前走逃げそびれ" ] hash_newtype2_dict_name = "sc_base_hash_newtype2" self.base_df = mu.hash_eoncoding(self.base_df, hash_newtype2_columns, 5, hash_newtype2_dict_name, self.dict_folder)