PYTHON 11

4종류의 게이머가 존재한다고? - 3. Clustering 및 분석 결과

지난 게시글 보기 https://songmin9813.tistory.com/70(2. PCA) 지난 게시글에서 PCA를 이용하여 35개의 변수를 약 70%의 분산으로 표현할 수 있는 14개의 변수로 압축한 것으로 게시글을 마무리했다. 이번에는 이를 이용하여 비지도 학습 중 Clustering 기법인 K-Means Clustering을 적용해 보고 어떠한 결과가 나왔는지 소개하는 시간을 가져본다. 비지도 학습이요...? 이 얘기를 함에 앞서 지도 학습과 비지도 학습에 대한 개념을 간단히 살펴보고 넘어가 보도록 하자. 이 둘과 다른 강화 학습도 존재하다만, 통상적으로 머신 러닝 기법이라 하면 이 둘을 지칭하는 것이라 해도 무방할 것이다. 결과적으로 이 둘의 가장 큰 차이는 정답(=레이블, 종속 변수 등등)이..

4종류의 게이머가 존재한다고? - 2. PCA

지난 게시글 보기 https://songmin9813.tistory.com/69(1. 인사이트 및 전처리) 표준화를 진행한 이유를 차원 압축에 PCA(Principal Components Analysis : 주성분 분석)을 진행할 것이라는 언급을 마지막으로 했던 것 같다. 처음에는 유저들에게 중요하다고 생각했던 지표를 정성적으로 찾으려 했으나, 이를 분산값을 이용한 최적 PC를 찾아주는 분석법이 있어 이를 적용해보고자 한다. PCA는 다음과 같은 이유로 사용하였다. 1. 유저 데이터는 존재하지만 어떠한 값이 클러스터링에 중요한 데이터인지 모르기 때문 2. 비지도 학습(클러스터링)을 진행할 예정이기 때문 3. 변수가 많지만 각각이 설명하는 정도를 알고 싶기 때문 PCA를 사용한다면 다음과 같은 단점이 존재..

4종류의 게이머가 존재한다고? - 1. 인사이트 및 전처리

배틀그라운드의 유저 플레이 데이터 수집 프로세스를 만들어낸 입장에서 이를 활용한 기계학습도 해보고 싶어 진행해 보는 프로젝트이다. 필자가 알고 있는 게이머와 관련된 지식을 데이터적으로 확인 및 검증해 보는 시간을 가져보는 것이 좋은 것 같아 간단한 클러스터링을 포함한 검증의 시간을 가져보기로 한다. 시작하기에 앞서 Richard Bartle에 의해 정의된 게이머의 4가지 유형은 아래의 그림과 같다. 상기 지표에서 의미하는 바를 간단하게 설명하고, 이를 배틀그라운드 게임에 대입시켜 생각해보자. 1. Killers 활동적이고 플레이어 간의 상호작용을 중시하는 게이머. 주도적으로 다른 플레이어와 분쟁을 하고, 싸움과 관련된 콘텐츠를 즐기는 플레이어가 이에 해당한다. 1:1 대전게임인 철권이 대표적인 예로 뽑힐..

[Python/Analytic] 배틀그라운드 유저 데이터 분석 코드 공유

본 게시글은 필자가 배그 데이터 시각화 프로젝트를 진행하며 작성한 데이터 가공 코드를 자동화버전으로 재가공하여 배포하는 배포용 코드이다. Python으로 작성되었으며, 필자의 가공이 들어간 'phase', 'ai' 정보를 제외한 모든 정보는 아래의 PUBG Open API 사이트에서 확인해 볼 수도 있다. https://developer.pubg.com/(PUBG Open API) 개인 전용 토큰 키 발행 필수 해당 코드를 어떠한 생각으로 짰는지 궁금하다면 이전의 시리즈들을 참고하면 좋을 것 같다. https://songmin9813.tistory.com/43(1. 프로세스 수립) https://songmin9813.tistory.com/44(2. 데이터 인사이트 및 추출) https://songmin9..

배틀그라운드 유저 데이터 분석해보기 4. 데이터 추가 가공 및 시각화

완성된 프로젝트를 보고 계십니다. 분석 결과만을 보고 싶으시다면 아래의 URL에 접속해주세요. https://songmin9813.tistory.com/51(Steam 버전 배틀그라운드유저 분석해보기) 이전 내용과 이어집니다. https://songmin9813.tistory.com/49(3. 데이터 가공) 데이터 추가 가공 - AI 여부 파악하기 페이즈 별 생존 시간이라는 새로운 가공 데이터 외에도 여러 정보들을 살펴보고 있던 도중 흥미로운 정보를 하나 찾아냈다. 아래는 매치 별 유저에게서 뽑아낼 수 있는 정보의 예시를 JSON 형태로 표현하고 있다. { "DBNOs": 1, "assists": 0, "boosts": 0, "damageDealt": 67.100006, "deathType": "bypl..

배틀그라운드 유저 데이터 분석해보기 3. 데이터 가공(+팁)

완성된 프로젝트를 보고 계십니다. 분석 결과만을 보고 싶으시다면 아래의 URL에 접속해주세요. https://songmin9813.tistory.com/51(Steam 버전 배틀그라운드유저 분석해보기) 이전 내용과 이어집니다. https://songmin9813.tistory.com/44(2. 데이터 인사이트 및 추출) 사람마다 사용하거나 손에 익은 언어가 있다고는 하지만. 그리고 SQL을 능숙히 다루기 위해 시작한 프로젝트이기도 하다만. 결국 손에 맞는 Python을 먼저 찾게 되더라...ㅋㅋㅋ 지금 같은 경우에는 내가 원하는 데이터를 처음부터 다시 뽑고 나만의 데이터 마트를 만드는 것이 주된 목적이었기 때문에 SQL보다는 Python을 이용한 데이터 가공을 주된 목적으로 삼았다. SQL을 따로 배워서..

배틀그라운드 유저 데이터 분석해보기 2. 데이터 인사이트 및 추출

완성된 프로젝트를 보고 계십니다. 분석 결과만을 보고 싶으시다면 아래의 URL에 접속해주세요. https://songmin9813.tistory.com/51(Steam 버전 배틀그라운드유저 분석해보기) 이전 내용과 이어집니다. https://songmin9813.tistory.com/43(1. 프로세스 수립) 데이터 타입 및 추출 방법 PUBG 내 모든 데이터의 반환은 JSON을 통해 이루어지는 것을 확인했다. 몇 개의 예시 Execute를 통해 Request 되는 URL의 특징을 파악해 낼 수 있었고, 이를 코드에 담아 추출하는 과정을 담았다. 다만 인증 여부를 떠나 curl 형식으로 작성되어있는 항목이 많기에 request url을 직접 넣는 것보다 curl 코드를 request 형식으로 변환한 후 ..

배틀그라운드 유저 데이터 분석해보기 1. 프로세스 수립

완성된 프로젝트를 보고 계십니다. 분석 결과만을 보고 싶으시다면 아래의 URL에 접속해주세요. https://songmin9813.tistory.com/51(Steam 버전 배틀그라운드유저 분석해보기) 게임 데이터 시각화 프로젝트 시작합니다. 다사다난했던 2022년을 보내고 새로운 해를 맞이하면서 지금까지 관심 있게 보고 있던 항목에 대한 개인 프로젝트를 진행해보고자 한다. 대주제로는 'Open API가 존재하는 게임 데이터의 시각화 프로젝트', 그 첫 번째 프로젝트로 모바일로 자주 즐기곤 했던 '배틀그라운드'를 기준으로 데이터를 수집하고, 시각화하는 시간을 가져보고자 한다. 이번 프로젝트를 통해 얻고자 하는 것은 크게 두 가지이다. 1. PUBG Open API에서 가공할 수 있는 데이터의 확인 및 추..

도보에 따른 칼로리 소모량 분석해보기 3. 선형 회귀 분석(+분석 코드)

이전 내용과 이어집니다. https://songmin9813.tistory.com/40(2. 데이터 전처리) 독립 변수의 개수도 적고, 데이터의 상관관계 또한 우상향 그래프를 그리고 있기에 단순 선형 회귀 모델을 이용한 ML 모델을 만들어보고자 한다. 모델을 만듦에 있어서 독립 변수는 distance, steps로, 종속 변수는 calories로 둔 채 최소 자승법을 이용한 회귀 분석을 진행한다. 우상단 R-squared 값이 0.786으로 약 78% 설명력을 보이고 있지만, distance와 steps의 p-value 값이 충분한 신뢰도를 보이고 있지 않다. (각각 0.982, 0.582) 이는 각 값이 서로를 설명할 수 있는 다중 공선성 문제라 판단했기에 p-value가 가장 높은 distance 변..

도보에 따른 칼로리 소모량 분석해보기 2. 데이터 전처리

이전 내용과 이어집니다. https://songmin9813.tistory.com/39(1. 데이터 인사이트) 각 데이터는 ‘날짜’라는 동일한 값을 가지고 있음을 파악했기 때문에 이를 primary key로 삼아 join을 진행하여 하나의 테이블을 만드는 것이 도움이 될 것이라 판단했다. 이에 join 함수를 이용하여 세 개의 데이터를 한 번에 합치는 과정을 진행했고, 해당 데이터프레임 내 결측치가 존재하는지 info 함수를 통해 우선 확인하였다. 각 열은 167열로 이루어진 것을 확인할 수 있었고, 각 값에 대한 결측치는 존재하지 않는 것을 확인했다. 모두 join을 진행시키고 정규화 전 출력은 상기 그림과 같다. y축이 각 column 별로 제각각 존재했기에 column 별 정규화를 진행하여 그래프를..