jupyter로 데이터를 스크래핑하여 간단한 분석을 수행

경마 데이터를 스크레이핑하여 데이터를 만든다는 것을 했습니다.
거기까지 데이터의 가공했으므로 참고가 된다고 생각합니다.
이번에 한 일은 현시점에서 이번 주 행해지는 엘리자베스 여왕배의 과거 데이터로부터 상관관계의 데이터를 취하는 것을 합니다.
그러나 내용은 거의 거의 데이터 형식입니다.
from bs4 import BeautifulSoup 
from urllib.request import urlopen
import pandas as pd 

#netkeibaからデータを抜き出す
html = urlopen("http://keibanojouhou.hoge/")
#html形式で抜いてます
soup = BeautifulSoup(html, "html5lib")

#過去レースデータURLを取得
urls=[]
for link in soup.find_all('a'):
    hrefs = link.get('href')
    if hrefs.find('/race/')!=-1:
        #今回のデータに不要なものを抜くための処理
        if hrefs[28:32] !='2017':
            urls.append(hrefs)

#urlからレースリンクの抽出

race_datas=pd.DataFrame()
counter = 1

for race_link in urls:

    race_html = urlopen(race_link)
    #該当URLのhtml形式の中からTable内のデータを取得します。     
    race_fetched_dataframes = pd.io.html.read_html(race_link)
    #今回は該当データの配列が0番に該当したのでそちらを取得します。
    race_data = race_fetched_dataframes[0]
    #データフレーム内に年の情報がなかったのでURL情報が取得し、年情報を作成します。
    race_data['year']= race_link[28:32]
    #jupyter内で作成したデータをCSV形式て出力します。
    race_data.to_csv('race_' + race_link[28:32] + '.csv',encoding='sjis')
    #別途抽出するデータを事前に縦方向に結合します。axisは行列方向を指定します。行(0),列(1)
    race_datas = pd.concat([race_datas,race_data],axis=0)
#結合したデータをCSVで出力します。
race_datas.to_csv('races.csv',encoding='sjis')
#ファイルを読み込む
df = pd.read_csv('races.csv',encoding='sjis')
#この時点のデータをチェックしてます。
df.head()

다양한

#列を限定します。
datas1 = df[['year', '0', '1', '2', '3', '4', '7', '10', '11', '12', '13', '14']]
datas1.head()
#ハイフンを抜き出し配列にします。
datas1['tuka'] = df['10'].str.split('-')
datas1.head()
#年齢と性別を分けます。今回は定型的な仕様だったためこんな感じで抜きました。
datas1['sex'] = df['4'].str[0:1]
datas1['age'] = df['4'].str[1:2]
datas1.head()
#馬体重を分ける
datas1['weight'] = df['14'].str[0:3]
datas1.head()
#文字型で認識されているので数値型に変換します。
datas2['rank'] = datas2['rank'].astype(float)
datas2['wakuban'] = datas2['wakuban'].astype(float)
datas2['umaren'] = datas2['umaren'].astype(float)
datas2['agari'] = datas2['agari'].astype(float)
datas2['ninki'] = datas2['ninki'].astype(float)
datas2['ozzu'] = datas2['ozzu'].dropna()
datas2['age'] = datas2['age'].astype(float)
datas2['weight'] = datas2['weight'].astype(float)
datas2.head()


#加工したデータで相関関係を確認します。
datas2.corr()


#グラフ化します
pd.scatter_matrix(datas2, figsize=(10,10))
plt.show()



위에서 2단째의 내용이 순위의 상관(자연히 말하면 값끼리 인과관계가 있는지 여부)입니다.
제일, 상관이 높았던 것이 인기와 새로운 발견은 없었습니다.
게다가 엘리제베스 여왕배는 도중부터 주행 거리가 바뀌거나 하기 때문에 그렇게 말하는 것도 가미해야 한다고 생각했습니다.

또, 다른 방법이나 모르게 날린 것도 있습니다(이번이라면 시간 수치의 것)
아시는 분 가르쳐 주시면 도움이됩니다.

물론 이번은 인기대로 구입하기로 하겠습니다.

좋은 웹페이지 즐겨찾기