Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~

Einführung

Es gibt ein Stück namens POG im Pferderennen. Dies soll ein fiktiver Pferdebesitzer werden und um die Aktivität von eigenen Pferden konkurrieren. Im Allgemeinen wird das Preisgeld, das in der Zeit vom Debüt bis zum Derby gewonnen wurde, häufig als Aktivitätsindex verwendet.

Der Autor macht seit ungefähr 5 Jahren POG. Bisher habe ich irgendwie gute Pferde ausgewählt und mich auf Aomoto verlassen, das jedes Jahr im April veröffentlicht wird.

Die Ergebnisse sind jedoch brillant und bis Ende dieses Jahres haben nur 2 von 10 gewonnen.

Um diese Situation zu überwinden, in der die Schwellung nicht ansteigt, habe ich mich entschlossen, mein Herz in die Datenanalyse zu stecken. Der Autor verfügt jedoch nicht über die Fähigkeiten, das heutzutage beliebte maschinelle Lernen frei zu manipulieren. Daher besteht das unmittelbare Ziel hier darin, einen kausalen Zusammenhang zwischen den grundlegenden Informationen von Pferden (Stall, Erzeuger, Stammbaum) und den während der POG-Periode gewonnenen Preisen zu finden.

Was hier wichtig ist, ist der "Gewinnerpreis während der POG-Periode". Soweit ich weiß, veröffentlicht keine Website diese Informationen. Vielleicht gibt es Institutionen, die es gegen eine Gebühr anbieten, aber ich möchte es nicht in Situationen tun, in denen unklar ist, ob es die Kosten wert ist.

Aus diesem Grund haben wir uns hier entschlossen, grundlegende Informationen zu Pferden und Daten zur Rennhistorie von Netkeiba zu erhalten und den Preis während des POG-Zeitraums anhand der Daten zur Rennhistorie zu berechnen.

Die verwendete Sprache ist Python. Das ist nur etwas, an das ich gewöhnt bin.

Quellcode

Sammeln Sie Daten zu Pferden, die in den vier Jahren von 2010 bis 2013 geboren wurden. Hier werden gleichzeitig Daten im Wert von vier Jahren durch parallele Verarbeitung von vier Kernen erfasst. ~~ Es hängt von den Maschinenspezifikationen ab, aber mein MBA hat die Datenerfassung in ungefähr einer Stunde abgeschlossen. ~~

MakeUmaDB_151229.py


#!/usr/bin/env python
# encoding: utf-8

import urllib2 as ul
import pandas as pd
import os
import time
import datetime
from lxml import html
import multiprocessing as mp

__PROC__ = 4

def MakeDir(dname):
    if not os.path.exists(dname):
        os.mkdir(dname)
        print 'Make directory:%s' % dname
    else:
        print '%s is exist' % dname

    return 0

def subMakeHorseDB(year):
    # Set Directory
    o_dname = 'horse_db'
    MakeDir(o_dname)

    # horse_prof
    prof_keys = [
        u'Pferdename',
        u'Geburtstag',
        u'Trainer',
        u'Pferdebesitzer',
        u'Produzent',
        u'Ursprung',
        u'Seri Transaktionspreis',
        u'Vater',
        u'Mutter',
        u'Mutter Vater',
        u'POG-Preis_halbe Periode',
        u'POG-Preis_Das ganze Jahr'
    ]

    # get Uma data from web site
    base_url = 'http://db.netkeiba.com/horse/'
    idx_from = 100000
    idx_to = 111000

    masta_d = {}
    for idx in range(idx_from, idx_to + 1):
        try:
            # get html from web
            time.sleep(10)
            s_idx = str(year)+str(idx).zfill(6)
            url = base_url + s_idx
            src_html = ul.urlopen(url).read()# get html from url
            root = html.fromstring(src_html)

            # show progress
            print 'idx: %s, (%d, %d/%d)' % (s_idx, year, idx, idx_to)

            # not found db
            if root.xpath('//title')[0].text.startswith(u'|'):
                #print 'DB not found'
                continue

            # html parse
            masta_d[s_idx] = {}

            for prof in prof_keys:
                if prof == u'Pferdename':
                    horse_name = root.xpath('//div[@class="horse_title"]')[0].text_content().split('\n')[1]
                    masta_d[s_idx][prof] = horse_name

                elif prof == u'Vater':
                    masta_d[s_idx][prof] = root.xpath('//td[@rowspan="2"][@class="b_ml"]')[0].text_content().split('\n')[1]

                elif prof == u'Mutter':
                    masta_d[s_idx][prof] = root.xpath('//td[@rowspan="2"][@class="b_fml"]')[0].text_content().split('\n')[1]
                elif prof == u'Mutter Vater':
                    masta_d[s_idx][prof] = root.xpath('//td[@class="b_ml"]')[2].text_content().split('\n')[1]
                elif prof == u'POG-Preis_halbe Periode' or prof == u'POG-Preis_Das ganze Jahr':
                    continue
                elif prof == u'Geburtstag':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[0].text_content()
                elif prof == u'Trainer':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[1].text_content()
                elif prof == u'Pferdebesitzer':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[2].text_content()
                elif prof == u'Produzent':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[3].text_content()
                elif prof == u'Ursprung':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[4].text_content()
                elif prof == u'Seri Transaktionspreis':
                    masta_d[s_idx][prof] = root.xpath('//table[@class="db_prof_table"]/tr/td')[5].text_content()

            # calc POG prize
            prize_all = 0.0
            prize_half = 0.0
            deadline_all = datetime.datetime.strptime('%d-07-01'%(year+3), '%Y-%m-%d')
            deadline_half = datetime.datetime.strptime('%d-01-01'%(year+3), '%Y-%m-%d')

            r_hist = root.xpath('//table[@class="db_h_race_results nk_tb_common"]')
            if len(r_hist) == 0:
                masta_d[s_idx][u'POG-Preis_halbe Periode'] = '%d' % prize_half
                masta_d[s_idx][u'POG-Preis_Das ganze Jahr'] = '%d' % prize_all
            else:
                r_hist_l = root.xpath('//table[@class="db_h_race_results nk_tb_common"]/tbody/tr')
                for race in r_hist_l:
                    r_date = datetime.datetime.strptime(race.text_content().split('\n')[1],'%Y/%m/%d')
                    try:
                        prize = float(race.text_content().split('\n')[-2].replace(',',''))
                    except:
                        prize = 0.0

                    if r_date < deadline_all:
                        prize_all += prize
                    if r_date < deadline_half:
                        prize_half += prize

                masta_d[s_idx][u'POG-Preis_halbe Periode'] = '%.2f' % prize_half
                masta_d[s_idx][u'POG-Preis_Das ganze Jahr'] = '%.2f' % prize_all
        except:
            pass

    # make data frame
    df = pd.DataFrame(masta_d).T
    o_df = pd.DataFrame()

    # sort columns
    for prof in prof_keys:
        o_df = pd.concat([o_df, df[prof]], axis=1)
    o_df.index.name = 'Index'

    o_fname = 'horse_prof_%d.csv' % year
    o_fpath = os.path.join(o_dname, o_fname)
    o_df.to_csv(o_fpath, encoding='utf-8')

def main():

    year_l = [2010, 2011, 2012, 2013]
    pool = mp.Pool(__PROC__)
    pool.map(subMakeHorseDB, year_l)

if __name__ == '__main__':
    main()
    raw_input('Press Enter to Exit¥n')

von jetzt an

Ich möchte das Gesetz des POG-Gewinns finden, indem ich die ausspuckende CSV-Datei knete.

Recommended Posts

Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Datenanalyse zur Verbesserung von POG 2 ~ Analyse mit Jupiter-Notebook ~
Datenanalyse zur Verbesserung von POG 3 ~ Regressionsanalyse ~
WEB-Scraping mit Python (für persönliche Notizen)
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Datenanalyse mit Python 2
Datenanalyse mit Python
[Python] Fluss vom Web-Scraping zur Datenanalyse
Web Scraping mit Python + JupyterLab
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
Web Scraping Anfänger mit Python
Python für die Datenanalyse Kapitel 3
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Web Scraping für Anfänger in Python (1)
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Web Scraping für Anfänger in Python (4) -1
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Scraping mit Python
Python-Visualisierungstool für die Datenanalyse
Scraping mit Python
Datenanalyse Python
Erste Schritte mit Python Web Scraping Practice
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
Vorbereitung zum Schaben mit Python [Schokoladengeschmack]
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Laden von Daten
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Extrahieren Sie mit Python Daten von einer Webseite
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Datenanalyse Übersicht Python
Scraping mit Python + PhantomJS
Sprachanalyse mit Python
Python-Datenanalysevorlage
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Sprachanalyse mit Python
Scraping von RSS mit Python
Datenerfassung von der Analytics-API mit dem Google API-Client für die Python Part 2-Webanwendung
Analysieren Sie preisgünstige Informationen zu Amazon-Geschenkgutscheinen mit Web Scraping & R mit Python
Web Scraping für Anfänger in Python (1) Verbesserte Version
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
Lesehinweis: Einführung in die Datenanalyse mit Python
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus