[개인 프로젝트] FC Online 공식 경기 분석 (5) - Snowflake analytics 테이블 생성

2024. 5. 30. 16:28·프로젝트 단위 공부/[개인 프로젝트] FC Online 공식 경기 분석

이전에 Snowflake에서 S3의 csv 파일을 가져와 데이터베이스에 저장하는 Worksheets를 작성하였다. 이번에는 Snowflake의 raw_data Schema에 존재하는 데이터를 가지고 analytics Schema에 생성할 데이터를 만들어볼 것이다.

 

[개인 프로젝트] FC Online 공식 경기 분석 (4) - Snowflake 기본 설정 및 COPY

이전에 S3 - Snowflake - Preset 인프라를 구성하고, 스크래핑 코드를 수정해 주었다. 이번에는 Snowflake에서 S3의 csv 파일을 가져와 데이터베이스로 저장할 수 있도록 Worksheets를 작성할 것이다. [개인

sanseo.tistory.com

Analytics Schema에 저장할 Table

승 / 패 / 무 여부에 따른 테이블 (match_detail)

컨트롤러 (Keyboard, pad) 수 비교

  • raw_data Schema의 match_detail Table 사용
  • matchResult (승 / 패 / 무)에 따른 controller (keyboard, pad) 수 비교 (count)

파울, 옐로카드, 레드카드 합 비교

  • raw_data Schema의 match_detail Table 사용
  • matchResult (승 / 패 / 무)에 따른 yellowCards, redCards, foul 합 비교 (sum)

드리블, 점유율 평균 비교

  • raw_data Schema의 match_detail Table 사용
  • matchResult (승 / 패 / 무)에 따른 dribble, possession 평균 비교 (avg)

코드

-- matchResult_with_match_detail
CREATE OR REPLACE TABLE fc_online.analytics.matchResult_with_match_detail AS
SELECT
    matchResult,
    COUNT(CASE WHEN controller = 'gamepad' THEN 1 END) AS gamepad_count,
    COUNT(CASE WHEN controller = 'keyboard' THEN 1 END) AS keyboard_count,
    SUM (yellowCards) AS total_yellow_cards,
    SUM (redCards) AS total_red_cards,
    SUM (foul) AS total_foul,
    ROUND(AVG (dribble), 1) AS avg_dribble,
    ROUND(AVG (possession), 1) AS avg_possession
FROM fc_online.raw_data.match_detail
GROUP BY matchResult;

결과 예시

승 / 패 / 무 여부에 따른 테이블 (shoot)

유효슛, 골, 페널티 킥 합 비교

  • match_detail과 shoot을 RIGHT JOIN (id 기준)
  • matchResult (승 / 패 / 무)에 따른 effectiveShootTotal, goalTotal, shootPenaltyKick 합 비교 (sum)

코드

-- matchResult_with_shoot
CREATE OR REPLACE TABLE fc_online.analytics.matchResult_with_shoot AS
SELECT
    matchResult,
    SUM (effectiveshoottotal) AS total_effective_shoot_total,
    SUM (goaltotal) AS total_goal_total,
    SUM (shootpenaltykick) AS total_shoot_penalty_kick
FROM fc_online.raw_data.shoot A
LEFT JOIN fc_online.raw_data.match_detail B ON A.id = B.id
GROUP BY B.matchresult;

결과 예시

승 / 패 / 무 여부에 따른 테이블 (pass)

패스 시도, 패스 성공, 패스 성공률 평균 비교

  • match_detail과 pass를 RIGHT JOIN (id 기준)
  • matchResult (승 / 패 / 무)에 따른 passTry, passSuccess, passSuccess / passTry 평균 비교 (avg)

코드

-- matchResult_with_pass
CREATE OR REPLACE TABLE fc_online.analytics.matchResult_with_pass AS
SELECT
    matchResult,
    ROUND(AVG (passTry), 1) AS avg_pass_try,
    ROUND(AVG (passSuccess), 1) AS avg_pass_success,
    ROUND(AVG(CASE WHEN passTry = 0 THEN 0 ELSE (passSuccess * 100) / passTry END), 1) AS avg_pass_success_rate
FROM fc_online.raw_data.pass A
LEFT JOIN fc_online.raw_data.match_detail B ON A.id = B.id
GROUP BY B.matchresult;

결과 예시

승 / 패 / 무 여부에 따른 테이블 (defence)

블락 시도, 블락 성공, 블락 성공률 평균 비교

  • match_detail과 defence를 RIGHT JOIN (id 기준)
  • matchResult (승 / 패 / 무)에 따른 blockTry, blockSuccess, blockSuccess / passTry 평균 비교 (avg)

태클 시도, 태클 성공, 태클 성공률 평균 비교

  • match_detail과 defence를 RIGHT JOIN (id 기준)
  • matchResult (승 / 패 / 무)에 따른 tackleTry, tackleSuccess, tackleSuccess / tackleTry 평균 비교 (avg)

코드

-- matchResult_with_defence
CREATE OR REPLACE TABLE fc_online.analytics.matchResult_with_defence AS
SELECT
    matchResult,
    ROUND(AVG (blocktry), 1) AS avg_block_try,
    ROUND(AVG (blocksuccess), 1) AS avg_block_success,
    ROUND(AVG(CASE WHEN blocktry = 0 THEN 0 ELSE (blocksuccess * 100) / blocktry END), 1) AS avg_block_success_rate,
    ROUND(AVG (tackletry), 1) AS avg_tackle_try,
    ROUND(AVG (tacklesuccess), 1) AS avg_tackle_success,
    ROUND(AVG(CASE WHEN tackletry = 0 THEN 0 ELSE (tacklesuccess * 100) / tackletry END), 1) AS avg_tackle_success_rate
FROM fc_online.raw_data.defence A
LEFT JOIN fc_online.raw_data.match_detail B ON A.id = B.id
GROUP BY B.matchresult;

결과 예시

지금까지 차트를 제외한 플로우는 모두 작업이 완료됐다. 따라서 다음부터 자동화를 진행해보려 한다. 먼저 EC2 - Crontab을 통해 EC2에서 python 파일을 주기적으로 실행하여 S3에 적재되도록 구성할 것이다.

 

[개인 프로젝트] FC Online 공식 경기 분석 (6) - EC2 / crontab 자동화 1

이전에 Snowflake의 analytics Schema의 테이블을 생성하는 작업을 하였다. 이번에는 작성했던 python 파일(S3 적재)이 한 시간마다 자동으로 실행될 수 있도록 EC2 인스턴스를 생성하고 Crontab 서비스를 실

sanseo.tistory.com

'프로젝트 단위 공부 > [개인 프로젝트] FC Online 공식 경기 분석' 카테고리의 다른 글

[개인 프로젝트] FC Online 공식 경기 분석 (7) - EC2 / crontab 자동화 2  (0) 2024.06.02
[개인 프로젝트] FC Online 공식 경기 분석 (6) - EC2 / crontab 자동화 1  (0) 2024.06.01
[개인 프로젝트] FC Online 공식 경기 분석 (4) - Snowflake 기본 설정 및 COPY  (0) 2024.05.29
[개인 프로젝트] FC Online 공식 경기 분석 (3) - 인프라 구성(S3, Snowflake, Preset)  (0) 2024.05.29
[개인 프로젝트] FC Online 공식 경기 분석 (2) - S3 버킷 생성 및 스크래핑 코드 작성  (0) 2024.05.28
'프로젝트 단위 공부/[개인 프로젝트] FC Online 공식 경기 분석' 카테고리의 다른 글
  • [개인 프로젝트] FC Online 공식 경기 분석 (7) - EC2 / crontab 자동화 2
  • [개인 프로젝트] FC Online 공식 경기 분석 (6) - EC2 / crontab 자동화 1
  • [개인 프로젝트] FC Online 공식 경기 분석 (4) - Snowflake 기본 설정 및 COPY
  • [개인 프로젝트] FC Online 공식 경기 분석 (3) - 인프라 구성(S3, Snowflake, Preset)
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[개인 프로젝트] FC Online 공식 경기 분석 (5) - Snowflake analytics 테이블 생성
상단으로

티스토리툴바