본문 바로가기
AI/AI 부트캠프

[AI 부트캠프] DAY 30 - EDA 프로젝트 1

by HOHHOH 2023. 8. 29.

[오늘의 일지]

EDA 프로젝트 - 주제 정하기, 자료 수집(크롤링)

[상세 내용]

EDA 프로젝트

도메인 설정

- 이번 프로젝트는 EDA를 하는 과정으로서 어떤 도메인을 정하고 그 주제에 맞는 분석 주제를 따로 설정해서 여러 명이 조가 되어서 분석을 수행한느 것에 초점을 두었습니다. 프로젝트의 도메인을 정하는 방식은 설문조사를 통해서 이루어졌습니다. 여러 가지 선택지가 있었지만 저는 평소에 스포츠를 좋아하기도 하고 좋아하는 분야의 EDA를 접하면 흥미로움이 배가 되지 않을까 해서 고르게 되었습니다. 그렇게 스포츠를 선택한 4명이 조로 선정되었습니다. 사실 조은 저번주 금요일에 정해졌고 그때 어떤 내용의 EDA를 해볼지 주제까지 정했던 상황입니다. 처음에는 스포츠 중에서도 야구를 주제로 시작을 하려고 했으나 야구에 대해서 용어적인 측면에서 어려운 부분이 있어서 더 익숙한 축구를 하게 되었습니다. 제 입장에서는 축구가 훨씬 친숙하기 때문에 다행이라고 생각했습니다.

 

EDA 분석 주제 설정 

- 일단 어느 스포츠를 바라보더라도 다가가기 쉬운 부분이 연봉일 것입니다. 저희 조도 자연스럽게 연봉 쪽으로 주제를 정하게 되었고 연봉과 성적과의 관계에 대해 연관성이 있을 것이라고 생각이 되어서 선택하게 되었습니다. 그러면서 성적과 전성기 나이에 대한 분석까지 같이 해보기로 했습니다.

 

분석 대상에 대한 자료 모으기 (크롤링)

- 분석 주제가 정해졌으니 자료를 모아야 했기 때문에 다 같이 크롤링하기 위한 사이트를 찾았습니다. 사이트를 찾다 보니 축구라는 분야가 작은 분야가 아니기 때문에 특정 리그를 선정하게 되었고 그래도 가장 시장규모가 큰 EPL을 선택했습니다. 그렇게 자료 수집을 위한 사이트를 선정하고 4명이 각각 수집할 파트를 분배해서 각자 수행을 한 뒤에 자료를 모아서 전처리 과정 전까지 완료한 상태로 오늘의 과정을 마쳤습니다. 

import requests
import json
import csv
# 시즌별로 url에서 id가 달랐는데 의미없는 숫자여서 딕셔너리로 만들었습니다.
season = {2022:20934,2021:19793,2020:18685,2019:17590,2018:16368,2017:15151,2016:13796,2015:12496,2014:9155}

def crawl_defensive(season,num):
    url = f"""
            https://1xbet.whoscored.com/StatisticsFeed/1/GetPlayerStatistics?category=summary&subcategory=defensive&statsAccumulationType=0&isCurrent=true&playerId=&teamIds=&
            matchId=&stageId={season}&tournamentOptions=2&sortBy=Rating&sortAscending=&age=&ageComparisonType=&appearances=&appearancesComparisonType=&field=Overall&nationality=&
            positionOptions=&timeOfTheGameEnd=&timeOfTheGameStart=&isMinApp=false&page=&includeZeroValues=&numberOfPlayersToPick=600
            """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    response = requests.get(url, headers=headers)
    json_data = json.loads(response.text)
    player_stats = json_data["playerTableStats"]
    result_list = [['Name','Team','Age','Position','Apps','Mins','Tackles','Inter','Fouls','Offsides','Clear','Drb','Blocks','Rating']]
    for player_stat in player_stats:
        name = player_stat['name']
        team = player_stat['teamName']
        age = player_stat['age']
        position = player_stat['playedPositionsShort']
        apps = player_stat['apps']
        mins = player_stat['minsPlayed']
        tackles = player_stat['tacklePerGame']
        inter = player_stat['interceptionPerGame']
        fouls = player_stat['foulsPerGame']
        offsides = player_stat['offsideWonPerGame']
        clear = player_stat['clearancePerGame']
        drb = player_stat['wasDribbledPerGame']
        blocks = player_stat['outfielderBlockPerGame']
        rating = player_stat['rating']
        result_list.append([name,team,age,position,apps,mins,tackles,inter,fouls,offsides,clear,drb,blocks,rating])

    with open(f'1xbet_defensive_{num}.csv', 'a', encoding='utf-8-sig', newline='') as f: # CSV파일 만들때 빈칸 생기는 현상 newline으로 해결
        writer = csv.writer(f)
        writer.writerows(result_list)
   
for i in season.keys():
    crawl_defensive(season[i],i)

 

주제로 선정한 자료를 위한 사이트

- EPL 선수들의 시즌별 세부스탯 정보

https://understat.com/league/EPL

 

- EPL 선수들의 연봉정보

https://www.spotrac.com/epl/rankings/2022/

 

- EPL 선수들의 수비적인 것과 공격적인 세부스탯 정보

https://1xbet.whoscored.com/Regions/252/Tournaments/2/England-Premier-League

 

[마무리]

  오늘이 사실상 EDA 프로젝트의 첫날인데 저희 조는 다들 원하는 도메인을 선정하고 온 상태여서 그런지 대화도 잘 통하고 하루 만에 크롤링까지 순조롭게 이뤄진 거 같습니다. 전처리 과정이 훨씬 시간이 많이 소요되는 파트이기 때문에 아무래도 아직까지는 힘든 점은 없지만 제 입장에서는 뭔가 조별 프로젝트를 하고 있다는 과정 자체가 재밌는 상황으로 느껴져서 좋은 거 같습니다.

반응형

댓글