개발/프로젝트

웹대시보드 프로젝트 - 1일차 데이터 선정 및 데이터의 밀림(shift) 수정

웅'jk 2022. 12. 14. 18:07

웹대시보드 프로젝트 1일차.

 

1. 데이터 주제 선정

 - 주제 : nba 경기 및 선수 스탯으로 웹대시보드 만들기.

 

2. 데이터 조회

https://www.kaggle.com/datasets/nathanlauga/nba-games?resource=download&select=teams.csv 

 

NBA games data

Dataset with all NBA games from 2004 season to dec 2020

www.kaggle.com

kaggle 에서 nba 데이터를 다운로드 

 

3. 주피터 노트북에서 데이터 확인하기

import pandas as pd

df_teams = pd.read_csv('data/teams.csv')
df_games = pd.read_csv('data/games.csv')
df_players = pd.read_csv('data/players.csv')
df_games_detail = pd.read_csv('data/games_details.csv',low_memory = False)

df_teams 의 데이터를 확인

내가 필요한 데이터만을 가져온다.

# teams 에 내가 필요한 데이터 추출
# team_id , ABBREVIATION, YEARFOUNDED,CITY,ARENA

df_teams = df_teams.loc[:,['TEAM_ID','ABBREVIATION','YEARFOUNDED','CITY','ARENA']]

 

df_games 데이터를 확인

필요한 데이터만 가져온다

# games 에 내가 필요한 데이터 추출
# GAME_DATE_EST,HOME_TEAM_ID,PTS_home,AST_home,REB_home,TEAM_ID_away,PTS_away,AST_away
# REB_away,HOME_TEAM_WINS

df_games = df_games.loc[:,['GAME_DATE_EST','GAME_ID','HOME_TEAM_ID','PTS_home','AST_home','REB_home','TEAM_ID_away','PTS_away','AST_away','REB_away','HOME_TEAM_WINS']]

 

df_players 확인

df_games_detail 확인

확인해보니 kaggle 들의 설명값과 데이터 값들이 무엇인가 이상함을 느꼇다.

컬럼 설명인데 comment 부분은 분명 플레이 타임이어야 하는데 값이 없고 min은 필드골 인데 시간이 들어와있다.

이를 해결하고자 

 

데이터를 분할한뒤 shift 함수로 한칸씩 땡기고 다시 합치는 방법을 사용하였다..

아마도 더 좋은 방법이 있을테지만 당장에는 이방법 밖에 떠오르지가 않았다.

 

# 문제 없는 데이터프레임
df_games_detail_1 = df_games_detail.loc[:,:'START_POSITION']
# 문제 있는 데이터프레임 짜른 뒤 수정
df_games_detail_2 = df_games_detail.loc[:,'COMMENT':].shift(-1,axis= 1)
# 짜른 두 코드를 합쳤다.
df_games_detail = pd.concat([df_games_detail_1,df_games_detail_2],axis=1)

 

이제 필요한 부분만 가져온다

df_games_detail = df_games_detail.loc[:,['GAME_ID', 'TEAM_ID','PLAYER_ID','PLAYER_NAME','START_POSITION',
                       'COMMENT','MIN', 'FG_PCT', 'FG3_PCT', 
                       'DREB', 'REB', 'AST', 'STL', 'BLK','TO']]

 

그리고 가져온 모든 데이터들의 컬럼을 내가 보여주고 싶은 컬럼명으로 변경한다.

rename ={ 'GAME_DATE_EST' : '경기날짜' ,'GAME_ID':'경기ID', 'HOME_TEAM_ID':'홈팀ID','PTS_home':'홈팀점수','AST_home':'홈팀어시','REB_home':'홈팀리바운드','TEAM_ID_away':'어웨이팀ID','PTS_away':'어웨이팀점수','AST_away':'어웨이팀어시','REB_away':'어웨이팀리바운드','HOME_TEAM_WINS':'홈팀승리여부'  }
df_games = df_games.rename(columns=rename)

rename_detail = { 'GAME_ID':'경기ID','TEAM_ID':'팀ID','PLAYER_ID':'선수ID','PLAYER_NAME':'선수명',
                 'START_POSITION':'포지션',
 'COMMENT':'출전시간','MIN':'2점슛', 'FG_PCT':'3점슛', 'FG3_PCT':'자유투',
 'DREB':'리바운드','REB':'어시스트','AST':'가로채기','STL':'블락','TO':'턴오버수'}
 df_games_detail = df_games_detail.rename(columns=rename_detail)
 
 rename_playes = { 'PLAYER_NAME':'선수명','TEAM_ID':'팀ID','PLAYER_ID':'선수ID','SEASON':'시즌' }
 df_players=df_players.rename(columns=rename_playes)
 
 rename_team = {'TEAM_ID':'팀ID','ABBREVIATION':'팀약어','YEARFOUNDED':'팀창설해',
              'CITY':'연고지','ARENA':'홈구장'}
 df_teams = df_teams.rename(columns=rename_team)