Beispiel #1
0
    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)
Beispiel #2
0
 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
Beispiel #3
0
    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
Beispiel #4
0
 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
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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
Beispiel #8
0
 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)