Example #1
0
        else:
            race_class = '特別'

        # print(race_class)

        # レース番号はURLから作る
        race_num = re.findall('racekey=[0-9]{6}([0-9][0-9])', member)
        race_num = race_num[0] + 'R'
        #print("{} {} {} {}".format(kaijou, race_num, cource, distance))

        tables = gtbl.get_tables(content)

        # Tab:基本->展開->外厩の順に取得
        df_race = pd.DataFrame()
        for table in tables:
            rows = ptbl.parse_table(table)
            if len(df_race) > 0:
                # 展開->外厩->競走馬詳細->調教->直前情報->レース結果 取得
                t_df = pd.DataFrame(rows[1:], columns=rows[0])

                # レース結果テーブルには'バイアス'列が2つ存在する為リネーム
                if (True == ('バイアス' in t_df.columns.values)):
                    col = t_df.columns.values  # 全体の列名を取得
                    col[18] = '直線バイアス'  # 一部を加工 ※[18]はマジックNo
                    col[20] = '脚質バイアス'  # 一部を加工 ※[20]はマジックNo
                    t_df.columns = col  # 加工した列名を戻す

                # データ結合
                cols_to_use = t_df.columns.difference(
                    df_race.columns)  # 同名列の衝突回避(df_raceデータを優先する)
                cols_to_use = list(cols_to_use.values)  # objectタイプ→リスト化
Example #2
0
def Yosou_csv_Gen(url1, url2, race_id):
    csv_name = '00_test01.csv'  # MachineLearning_RandomForest.pyの指定する文字列

    # 直展取得
    res2 = requests.get(url2)
    htstcd = res2.status_code
    # HTTPステータスコード 404
    if htstcd == 404:
        print("Yosou_csv_Gen >> まだ直前展開がありません...")
        return -1
    else:
        pass

    res2.encoding = res2.apparent_encoding
    content2 = res2.text

    # データシート取得
    res = requests.get(url1)
    # HTTPステータスコード 404
    if htstcd == 404:
        print("Yosou_csv_Gen >>障害レースかもね...")
        return -1
    else:
        pass

    tmpdate = re.findall('\/[0-9]{8}\/', url1)
    race_date = tmpdate[0].replace('/', '')

    res.encoding = res.apparent_encoding
    content = res.text

    tables = gtbl.get_tables(content)
    tcount = 0
    for dmy in tables:
        rows = ptbl.parse_table(dmy)
        if not rows[0]:  # パラメータの無いテーブルは先頭からっぽ
            continue
        else:
            tcount += 1
            pass
        #print("{}:{}".format(tcount, race_id))
        if tcount == race_id:
            print("race_id : {}R".format(race_id))

            # データフレームにパラメータテーブルの情報を格納
            df2 = pd.DataFrame(rows[1:], columns=rows[0])

            ## レース情報
            soup = BeautifulSoup(content, "lxml")
            race_str = soup.find_all("div", attrs={"class", "headding03"})
            race_tmp = re.split(' ', race_str[((race_id - 1) * 3)].text)
            tmpstr = race_tmp[0]  #
            kaijou = tmpstr[:2]
            race_num = tmpstr[2:]

            tmpstr = race_tmp[2]
            course = tmpstr[:1]
            distance = tmpstr[1:-1]

            df2['日付'] = race_date
            df2['会場'] = kaijou
            df2['レース'] = race_num
            df2['コース'] = course
            df2['距離'] = distance
            cols = list(df2.columns.values)
            cols = ['距離'] + [col for col in df2 if col != '距離']
            df2 = df2[cols]
            cols = list(df2.columns.values)
            cols = ['コース'] + [col for col in df2 if col != 'コース']
            df2 = df2[cols]
            cols = list(df2.columns.values)
            cols = ['レース'] + [col for col in df2 if col != 'レース']
            df2 = df2[cols]
            cols = list(df2.columns.values)
            cols = ['会場'] + [col for col in df2 if col != '会場']
            df2 = df2[cols]
            cols = list(df2.columns.values)
            cols = ['日付'] + [col for col in df2 if col != '日付']
            df2 = df2[cols]

            df2['先行力順位'] = df2["先行力"].rank(ascending=False, method='min')
            df2['追走力順位'] = df2["追走力"].rank(ascending=False, method='min')
            df2['持久力順位'] = df2["持久力"].rank(ascending=False, method='min')
            df2['持続力順位'] = df2["持続力"].rank(ascending=False, method='min')
            df2['瞬発力順位'] = df2["瞬発力"].rank(ascending=False, method='min')
            df2['ST指数順位'] = df2["ST指数"].rank(ascending=False, method='min')
            df2['仕上指数順位'] = df2["仕上指数"].rank(ascending=False, method='min')

            # 直前ファクター取得
            t_df = getyoku.get_tyokuten(url2)

            # データシートと重複する列を除外する
            t_df = t_df.drop(["馬番", "馬名", "騎手名", "ST指数", "仕上指数"], axis=1)
            # データシートのDFと直前展開のDFを結合
            df2 = pd.merge(df2, t_df, right_index=True, left_index=True)

            df2.to_csv(csv_name, encoding="shift_jis", index=False, mode="w")
            print("Success!! : {}".format(csv_name))

        else:
            # 目的のレースではない
            pass

    return 1
Example #3
0
    race_str = soup.find_all("div", attrs={"class", "headding03"})

    # table 要素を取得する
    # HTML 中のすべての table 要素が表として使われているとも
    # 限らないし、またそれが望んでいるものであるとも限らないので
    # このあたりのプロセスは関数としてまとめていない
    # ( = テーブルの選択自体はユーザーが行う)
    tables = gtbl.get_tables(content)
    #table = tables[8]
    #print(table)
    #for num in tables:
    #    print(num)
    hoge = 0
    ridx = 0  # 競馬ラボのレースindex
    for dmy in tables:
        rows = ptbl.parse_table(dmy)
        if not rows[0]:
            continue
        df2 = pd.DataFrame(rows[1:], columns=rows[0])
        ##ここから コース情報分割処理
        # レース情報に含まれる全角スペースを基準にして分割する
        #   0              1                  2            3
        #['中山1R', '3歳未勝利3歳(馬齢)', 'ダ1200m', '10:10発走']
        # ひとまず右記の形式で出力する。 例:中山, 1R, ダ, 1200
        # 0は会場名とレース番号を分ける
        # 2はコースと距離を分ける
        race_tmp = re.split(' ', race_str[hoge].text)
        print(race_tmp)

        # 東京と1R分割
        tmpstr = race_tmp[0]
Example #4
0
print(tl[0].text)

# table 要素を取得する
# HTML 中のすべての table 要素が表として使われているとも
# 限らないし、またそれが望んでいるものであるとも限らないので
# このあたりのプロセスは関数としてまとめていない
# ( = テーブルの選択自体はユーザーが行う)
tables = gtbl.get_tables(content)
#table = tables[8]
#print(table)
#for num in tables:
#    print(num)
fcnt = 1
hoge = 0
for dmy in tables:
    rows = ptbl.parse_table(dmy)
    if not rows[0]:
        continue

    df2 = pd.DataFrame(rows[1:], columns=rows[0])
    #print(course[hoge].text)
    # レース情報をDataFrameに追加
    df2['レース情報'] = course[hoge].text

    # DataFrame末尾に追加したレース情報を先頭に移動する
    cols = list(df2.columns.values)
    cols = ['レース情報']  + [col for col in df2 if col != 'レース情報']
    df2 = df2[cols]

    # for Debug
    # print(df2)