tak's data blog
피파온라인4 이탈, 진성유저 분석_데이터프레임 생성 본문
피파4 api를 통해서 데이터를 불러오고 활용할만한 데이터를 수집하는 법을 작성하도록 하겠다.
아래는 실제 나의 닉네임이다. 닉네임을 입력하면 아래와 같이 json형태로 데이터가 구성되어 있음을 확인할 수 있다. 유저 고유의 accessid랑 level등이 존재한다. 피파온라인4와 같은 게임은 rpg게임과 다르게 부캐를 육성하는 사람들이 대다수이므로 레벨은 추후 분석에서 제외하고 진행할 예정이다.
우선 위의 accessId를 기준으로 유저의 매치정보, 상세정보, 게임 내 슛, 수비, 패스 등의 정보도 추가로 가져올 수 있다.
accessId를 통해 데이터를 불러오는 과정을 아래와 같이 함수로 정의하였다.
import json
import requests
import pandas as pd
import numpy as np
import datetime as dt
from tqdm.notebook import tqdm
#api_key ="본인이 발급받은 api_key"
#access = "유저 고유 식별자 accessid"
def user_df(api_key, access):
headers = {'Authorization' : api_key}
# 매치기록(공식경기: 50) 조회를 위한 파라미터
match_parameter = {'matchtype' : 50, 'offset' : 0, 'limit' : 100}
match_record_url = requests.get(f'https://api.nexon.co.kr/fifaonline4/v1.0/users/{access}/matches?',\
params=match_parameter, headers = headers)
match_record_parsed_data = match_record_url.json()
match_user = pd.DataFrame()
for i, m in tqdm(enumerate(match_record_parsed_data)):
matchid = match_record_parsed_data[i]
# 매치 상세정보 조회를 위한 코드
match_detail_url = requests.get(f'https://api.nexon.co.kr/fifaonline4/v1.0/matches/{matchid}', headers = headers)
match_detail_parsed_data = match_detail_url.json()
temp = pd.DataFrame(match_detail_parsed_data)
match_user = pd.concat([match_user, temp], axis = 0)
matchid = match_record_parsed_data[0]
match_detail_url = requests.get(f'https://api.nexon.co.kr/fifaonline4/v1.0/matches/{matchid}', headers = headers)
match_detail_parsed_data = match_detail_url.json()
# 매치 정보, 상세정보, 슛, 패스, 수비 등의 정보를 위한 데이터프레임 생성
match_Info = pd.DataFrame()
match_Detail = pd.DataFrame()
match_Shoot = pd.DataFrame()
match_Pass = pd.DataFrame()
match_Defence = pd.DataFrame()
# PlayerDTO를 활용해서 선수 정보도 추가 가능
# DTO 정보 리스트 형태로 만들기
li_accessId = [i.get('accessId') for i in match_user['matchInfo']]
li_nickname = [i.get('nickname') for i in match_user['matchInfo']]
li_matchDetail = [i.get('matchDetail') for i in match_user['matchInfo']]
li_shootDetail = [i.get('shoot') for i in match_user['matchInfo']]
li_passDetail = [i.get('pass') for i in match_user['matchInfo']]
li_defenceDetail = [i.get('defence') for i in match_user['matchInfo']]
match_Info = match_user.iloc[:, :2].reset_index(drop=True)
accessId_data = pd.DataFrame(li_accessId)
nickname_data = pd.DataFrame(li_nickname)
match_Detail = pd.DataFrame(li_matchDetail)
match_Shoot = pd.DataFrame(li_shootDetail)
match_Pass = pd.DataFrame(li_passDetail)
match_Defence = pd.DataFrame(li_defenceDetail)
accessId_data = accessId_data.rename(columns={0 : 'accessId'})
nickname_data = nickname_data.rename(columns={0 : 'nickname'})
user = pd.concat([match_Info, accessId_data, nickname_data, match_Detail,
match_Shoot, match_Pass, match_Defence], axis = 1)
return user
위의 코드를 실행하면 아래와 같은 데이터프레임 형태가 나온다.
매치기록의 수집이다 보니 동일한 유저가 여러번 나올 수 있는 문제가 있다. 그래서 유저 고유 accessid를 기준으로 데이터를 수집하고 경기기록(matchDate)간의 차이로 이탈 기간을 정한 후 나머지 중복된 행은 drop_duplicate를 통해 제거할 예정이다.
이렇게 하면 수많은 유저표본은 구하진 못하지만 이탈 기간 정의가 가능해진다.
위의 과정으로 데이터 수집이 완료되었고, 이탈에 따른 유저 플레이 형태를 살펴볼 예정이다.
'프로젝트 > 인과관계를 고려한 피파4 이탈분석' 카테고리의 다른 글
FC online - 복귀 보상에 따른 이질적 처치효과 추정 (0) | 2024.09.16 |
---|---|
피파온라인4 - 인과관계를 고려한 이탈 분석(PSM 매칭기법) (1) | 2022.08.04 |
피파온라인4 이탈, 진성유저 분석_이탈유저는 nextfield에 적응할까? (0) | 2022.07.05 |
피파온라인4 이탈 분석 정의 단계 (0) | 2022.06.23 |