[라인맨 포지션 평가] playDescription 데이터 전처리 및 가공

Eunsuh Kim·2023년 1월 14일
0

0. 배경 및 필요성

plays.csv 파일의 playDescription 열에서 패스 플레이 시 패스를 한 선수, 패스를 받은 선수, sack을 한 선수 등의 이름을 추출하는 방식으로 데이터를 가공했다.

이것을 한 이유는 라인맨 대 라인맨의 상대 전적을 파악할 때, 상대 전적과 선수의 여러 가지 스펙 간 어떤 연관성이 있는지 데이터를 통해 파악하고 주요 변수를 선정하기 위해서이다.
이때 playDescription은 포지션에서 상대 전적의 '결과' 즉 패스가 성공했는지 여부를 보여준다.

1. 방법


playDescription은 위와 같은 문자열 형식이었고 이 중 선수들의 이름을 뽑아서 포지션과 연결해 보는 것이 목표였다.
선수 이름 외 추출할 수 있는 다른 정보들은 같은 csv 파일의

  • gameClock (해당 플레이의 진행 시간)
  • playResult (패스 길이, yard)
  • passResult (패스의 성공 여부)
    와 같은 열에 이미 만들어져 있었다.

따라서 passFrom, passTo, sacked, scramble 등으로 playDescription의 문장 형식 종류를 나누어서 이름을 추출했다.

passFrom

for i in range(plays.shape[0]):
    if 'pass' in plays.loc[i, 'playDescription']:
        plays.loc[i,'passFrom'] = str(plays.loc[i, 'playDescription']).split('pass')[0].strip().split(' ')[-1]
    else:
        continue

passTo

for i in range(plays.shape[0]):
    if 'to' in plays.loc[i, 'playDescription']:
        plays.loc[i,'passTo'] = str(plays.loc[i, 'playDescription']).split('to')[1].strip().split(' ')[0].strip('.')
    else:
        continue

sacked

for i in range(plays.shape[0]):
    if 'sacked' in plays.loc[i, 'playDescription']:
        plays.loc[i,'sacked'] = str(plays.loc[i, 'playDescription']).split('sacked')[0].strip().split(' ')[-1]
    else:
        continue

scrambles

for i in range(plays.shape[0]):
    if 'scrambles' in plays.loc[i, 'playDescription']:
        plays.loc[i,'scrambles'] = str(plays.loc[i, 'playDescription']).split('scrambles')[0].strip().split(' ')[-1]
    else:
        continue

2. 문제

  • 동명이인 선수
  • 라인맨의 경우에는 패스를 받을 수 없다. playDescription에 나타난 대부분의 선수의 포지션은 라인맨이 아니었다.
profile
안녕하세요!

0개의 댓글