PUBG API 및 프로젝트

chaechae·2024년 6월 7일
1

PUBG BattleGround 

목록 보기
1/8
post-thumbnail

BattleGround 유저 경기 데이터를 수집하기 위해 필요한 PUBG API를 간단하게 정리해보려고 합니다. (자세한 내용은 Document에서 확인 하실 수 있습니다.)

MatchData

경기데이터를 가져오는 루트는 riot api와 비슷합니다! 가장 간단한 방법은 PlayerName 을 통해 최근 matchId를 가져올 수 있고 MatchId 별 경기 데이터를 가져오는 방식입니다. (API 발급은 필수!)

다만, 배틀그라운드의 경우 플랫폼이 kakao, steam, console 등 다양하기 때문에 이에 맞게 URL을 수정해주어야합니다. (저는 Steam을 기준으로 수집했습니다.)

경기 데이터를 불러오기 위해서는 크게 두가지 방법이 있는 것 같은데요🫠

  1. 유저의 아이디를 통해서 가져오기
    PlayerName -> MatchId -> MatchData(경기요약) -> telemetry (경기의 세부적인 로그 데이터)

  2. 시간별로 발생한 Sample 데이터
    파라미터를 보면 알 수 있듯이 filter[createdAt-start] 기간을 정해서 데이터를 수집할 수 있습니다. (최대 2주)


(두번째의 경우 데이터를 뜯어보니 실제 유저의 데이터가 아니라 Ai player 로 이루어진 경기인 것 같습니다. 😓)

API 요청수 제한

PUBG API 의 경우 1분에 10개의 요청수로 제한이 되어있습니다.
matchid 1000개를 구했다 치고 1000개의 경기데이터를 가져오려면 10개 데이터를 불러올 때마다 1분을 기다려야합니다. 그렇다면 각 단계별로 100분이 필요하니 약 200분이 걸리겠군요.
MatchId -> MatchData -> telemetry

꽤 많은 시간이 필요합니다;; 사실 정리하면서도 데이터를 수집중입니다.

시간별 세부 경기 로그 telemetry

RIOT API 에서 경기 결과 통계 데이터가 있고 그 경기 안에서 세부적인 로그들은 따로 URL를 통해 호출해야 하듯이 PUBG도 마찬가지였습니다.

MatchId 통해 MatchData 가져오면 MatchData(경기결과)의 attributes 키 안에 URL 값이 들어있음을 볼 수 있습니다.

{
  "type": "asset",
  "id": "1ad97f85-cf9b-11e7-b84e-0a586460f004",
  "attributes": { 
    "URL": "https://telemetry-cdn.pubg.com/pc-krjp/2018/01/01/0/0/1ad97f85-cf9b-11e7-b84e-0a586460f004-telemetry.json",
    "createdAt": "2018-01-01T00:00:00Z",
    "description": "",
    "name": "telemetry"
  }
},

해당 url를 통해 얻은 json을 pd.json_normalize 을 이용하여 dataframe 형태로 바꿔주면 아래와 같이 다양한 지표들을 편하게 볼 수 있는데요! 일단 보이는 변수만 무려 263개입니다;; 배틀로얄 FPS라 그런지 더 많은것 같네요.

확실히 평소에 많이 보았던 게임이기 때문에 변수 자체를 이해하는데 어렵지는 않았습니다만 해당 지표들이 어떨때 남는지 해석하는데 시간이 꽤 걸린 것 같습니다.

일단, 제가 생각하는 핵심 변수들을 위주로 어떻게 남겨지는지를 정리해보려고 합니다.

데이터가 남겨지는 형식

  • _D : 로그가 발생한 TIMESTAMP 입니다. (기본적으로 유저의 Position 위치의 경우 10초마다 남겨지고 있었습니다.)
  • _T : 유저가 어떤 행동을 했는지에 대한 변수입니다. (한 경기에서 발생한 _T는 아래와 같습니다.)

유저가 총을 사용하고, 데미지를 받고, 치유아이템을 사용하고, 아이템을 장착하고, DROP하고, 탈것을 이용하고, 수영하고 등 배틀그라운드에서 일어날 수 있는 모든 행동들이 기록되어있습니다. 겁나 디테일합니다 👍🏻

그리고 _T의 값에 따라 데이터가 남겨지는 형식 입니다. 대표적으로 아래와 같은 컬럼들이 형성되는데요!

  • Character_ : 참가자에 대한 정보 ( _T = Position, Heal 같이 다른 유저와의 상호작용이 아닌 각 플레이어에게 발생하는 이벤트의 경우)
    Attacker_ : 공격한 경우 남겨짐 (상호작용)
    Victim_ : 피해를 받은 경우 남겨짐 (상호작용)
    dBNO_ : 기절한 경우 남겨짐 (상호작용)
    Killer_ : Kill을 한 경우 남겨짐 (상호작용)
    Final_ ... : 마무리 한 경우 남겨짐? (Killer 와 Final의 차이점이 뭔지 잘 모르겠네요..!)

가령, _T = LogPlayerAttack의 경우 플레이어의 모든 공격 행동에 대한 이벤트 입니다.
attacker.zone attacker.type weapon.itemId weapon.stackCount weapon.category weapon.subCategory weapon.attachedItems

컬럼명 그대로 attacker의 위치, 공격 타입, 무기, 무기를 얼만큼 사용했는지, 무기 카테고리, 무기별 사용 누적 카운트 등 에 대한 정보입니다.

_T = LogPlayerTakeDamage 인 경우 아래와 같이 Attacker_Victim_에 대한 정보가 생성됩니다.

  • Attacker_의 체력, 좌표, 데미지 타입, 데미지 등

    물론, 데미지를 받았음에도 Attacker_name이 Nan 인 경우가 있습니다. 물속에 오래 있어서 받는 데미지, 자기장 같이 게임 시스템에 의해 데미지를 받는 경우가 이에 해당합니다.

  • Victim_ 피해를 받은 부위, 체력, 좌표 등

위에서 볼 수 있듯이 (공격과 관련된 이벤트 중에서) LogPlayerTakeDamage 인 경우, 어떤 총을 사용했는지 나와있지 않습니다. LogPlayerAttack(공격), LogPlayerKillV2 (확정킬)을 한 경우에만 사용된 아이템 정보를 볼 수 있었습니다.

정정합니다 !
LogPlayerTakeDamage 인 경우, damageCauserName 컬럼명에
LogPlayerAttack 인 경우, weapon.itemId컬럼명에
LogPlayerKillV2 인 경우, victimWeapon killerDamageInfo.~ 등과 같은 컬럼명에
아이템 정보가 들어있습니다.

이와 같이 _T 형태에 따라 남겨지는 컬럼이 다르기 때문에 어떤 타입에 어떤 데이터가 남겨지는지 확인하는데 꽤 시간이 필요했습니다.

일단, 데이터 수집 진행중..

일단 랜덤으로 유저의 이름을 가져와서 현재 1000개의 matchdata를 수집해 놓았습니다. 우연인지 실제로 solo 랭크가 적은지 모르겠지만 duo 와 squad 경기가 거의 90퍼를 차지하는군요 ㅎㅎ .. (solo type의 경기만 가져오고 싶었는데 방법을 못찾아서 무작정 수집했습니다..하하)

solo 타입에 해당하는 45경기만 저장해놓은 상태인데요. 45경기 기준 남겨진 데이터만 무려 1100190행 579MB 입니다 ㄷㄷ 실화냐

그래서 뭐 할거냐!?

주제: 총기 밸런스

분석 주제를 실제 배틀그라운드 패치노트를 통해서 해보면 좋겠다는 생각이 들었습니다 ㅎㅎ 일단 가장 최근인 29.1패치의 내용을 보시죠.

SCAR-L과 AKM의 경우, 낮은 사용성과 승률로 인해 상향이 필요하다는 의견

  • AKM : 피해량을 소폭 증가 (다른 AR에 비해 피해량이 강화)
  • SCAR-L : 낮은 연사 속도를 소폭 증가 + 수직/수평 반동 각 4%씩 감소
  • 판처파우스트에 장착 모션을 추가. 빠르게 줍거나 교체하여 발사할 수 없도록 조정
  • Mk12의 경우 현재 가장 범용적으로 사용되는 DMR 총기 -> 사운드 인지 어려움(소음기+라이트그립 장착시 OP) -> 사운드만 조정

그렇다면.. 실제로 개발자 분들의 패치의도에 맞게 유저들의 행동이 변화했는지 데이터로 분석해보고 싶다는 생각이 들었습니다. 가령 SCAR_L 과 AKM의 사용성과 승률이 낮다는데 위 패치를 통해 어떻게 변했는지 데이터로 확인해보면 재밌을것 같지 않나요 ㅎㅎ

비교 대상인 이전의 데이터가 있다면 더 좋았겠지만 시간이 지나서 아쉽게도 구할 수 없으니..
패치 이후의 데이터를 통해 총기와 관련된 지표들을 직접 계산하고 분석해 보려고 합니다.

남겨진 데이터를 보면 알 수 있듯이.. 엄청난 전처리가 필요할것 같습니다 ㅎㅎ

profile
다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글

관련 채용 정보