Rainbow Six Siege 시즌5 매치 데이터 분석 분석 목적 과거에 Rainbow Six Siege를 플레이하고 느낀점은 '신규 유저에게 진입장벽이 너무 높다' 였다. 꾸준한 업데이트를 통해 다양한 특수 능력을 가진 오퍼레이터나 외우기 벅찬 맵들이 추가됨에 따라 이 진입장벽은 더욱 더 높아진다고 느꼈다. 물론 몸으로 직접 부딪히며 게임을 수십~수백판 반복해서 오퍼레이터가 갖고 있는 능력들과 복잡한 맵들에 익숙해질 수는 있겠지만 그 전에 나가 떨어지는 뉴비들도 적잖이 많겠다고 생각했다. 수많은 선택지 중에서 어떤 오퍼레이터를, 그리고 어떤 무기를 들어야할지 고민하는 뉴비들에게 픽률과 승률 등을 기반으로 한 오퍼레이터 & 무장 추천이 가능하다면 리텐션을 조금 더 확보할 수 있지 않을까 생각하였다. 따라서 뉴비들을 위한 가이드에 활용할 수 있는 지표들을 몇가지 생각하여 분석해보았다.
2021. 03. 22 월요일 스팀 게임 동시 접속자 분석 사용 데이터 : Popularity of games on Steam (By Michal Bogacz) - from kaggle 분석 방향 : 게임별 동접자를 활용한 스팀 유저수 증가 추세와 동접자가 높은 인기 게임에 대한 분석 분석 과정 : 데이터 전처리(Big query) -> 분석 진행(Big query) -> 시각화(Da
2021. 03. 09 화요일 HackerRank SQL 코딩테스트 제목이 파란색으로 강조된 문제는 풀면서 개인적으로 흥미롭거나 재밌었다고 느낀 문제이다. Weather Observation Station 19 a는 북위 최소값 / b는 북위 최대값 / c는 경도 최소값 / d는 경도 최대값이다. 이 때, P1(a,c) 와 P2(b,d) 사이의 유클리드 거리를 소수점 4자리에서 반올림하여 구하기 유클리드 거리 구하는 공식 : $$\sqrt{(b-a)^2 + (d-c)^2}$$ Weather Observation Station 20 LAT_N의 중앙값을 소수점 4자리에서 반올림하여 구하기
2021. 03. 03 수요일 HackerRank SQL 코딩테스트 제목이 파란색으로 강조된 문제는 풀면서 개인적으로 흥미롭거나 재밌었다고 느낀 문제이다. Employee Names 직원의 이름을 오름차순으로 불러오기 Employee Salaries 월급이 $2000 이상이고 근무 개월이 10개월 미만인 직원의 이름을 id 오름차순으로 불러오기 Top Earners 가장 많은 총 임금(근무개월*월급)의 액수와 거기에 해당하는 임금을 받은 직원 수를 불러오기 Weather Observation Station 2 LATN의 총 합계와 LONGW의 총 합계를 소수점 2자리로 반올림하여 불러오기 Weather Observation Station 13 38.788 보다 크고 137.2345 보다 작은 LAT_N의 합계를 소수점 4자리로 반올림하여 불러오기 Weather Observation Sta
2021. 03. 03 수요일 HackerRank SQL 코딩테스트 제목이 파란색으로 강조된 문제는 풀면서 개인적으로 흥미롭거나 재밌었다고 느낀 문제이다. Revising the Select Query I 인구가 100000 보다 많은 미국 도시의 모든 데이터 조회하기 Revising the Select Query II 인구가 120000 보다 많은 미국의 도시 이름 조회하기 Select All CITY 테이블의 모든 데이터 조회하기 Select By ID ID가 1661인 도시의 모든 데이터 조회하기 Japanese Cities' Attributes 일본의 모든 도시 데이터 조회하기 Japanese Cities' Names 일본의 모든 도시 이름 조회하기 Weather Observation Station 1 모든 도시와 주 데이터 조회하기 <span style="c
프로그래머스 SQL 코딩 테스트 프로그래머스에서 제공하는 SQL 코딩 문제는 ANIMALINS 와 ANIMALOUTS라는 동물 보호소 데이터 테이블을 사용한다. ANIMALID, ANIMALTYPE, DATETIME, NAME, SEXUPONOUTCOME 는 각각 동물의 아이디, 생물 종, 보호 시작일(OUTS의 경우 입양일), 이름, 성별 및 중성화 여부를 나타낸다. 제목이 파란색으로 강조된 문제는 풀면서 개인적으로 흥미롭거나 재밌었다고 느낀 문제이다. SELECT 모든 레코드 조회하기 모든 데이터를 ID 순으로 조회하기 역순 정렬하기 모든 동물의 이름과 보호 시작일을 ID 역순으로 조회하기 아픈 동물 찾기 아픈 동물의 ID와 이름을 ID 순으로 조회하기 (INTAKE_CONDITION이 Sick 인 경우) 어린 동물 찾기 젊은 동물의 ID와 이름을 ID순으로 조회하기 (I
2021. 02. 24 수요일 프로그래머스에서 SQL 코딩 테스트 문제를 풀어보았다. 요즘 파이썬과 태블로에 집중하다보니 SQL에 소홀해진 것 같아서 배운 내용을 잊지 않기 위해 프로그래머스에서 제공하는 SQL 코딩 테스트 문제를 풀어보았다. 프로그래머스에서 제공하는 SQL 코딩 문제는 ANIMALINS 와 ANIMALOUTS라는 동물 보호소 데이터 테이블을 사용한다. ANIMALID, ANIMALTYPE, DATETIME, NAME, SEXUPONOUTCOME 는 각각 동물의 아이디, 생물 종, 보호 시작일(OUTS의 경우 입양일), 이름, 성별 및 중성화 여부를 나타낸다. SELECT 모든 레코드 조회하기 모든 데이터를 ID 순으로 조회하기 역순 정렬하기 모든 동물의 이름과 보호 시작일을 ID 역순으로 조회하기 아픈 동물 찾기 아픈 동물의 ID와 이름을 ID 순으로 조회하기 (INT
대시보드용 테이블 생성(퍼플팀) 대시보드용 테이블 생성(블루팀) CS별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 CS 평균 레벨별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 레벨 킬별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 킬 획득 골드별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 획득 골드 요소별 승리 상관계수
대시보드용 테이블 생성(퍼플팀) 대시보드용 테이블 생성(블루팀) CS별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 CS 평균 레벨별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 레벨 킬별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 킬 획득 골드별 경기 수 & 승리 수 승리 / 패배 / 전체 평균 획득 골드 요소별 승리 상관계수
2021. 01. 08 금요일 프로젝트 진행을 기획 2번안으로 결정하였다. 이전부터 다뤄보고 싶은 주제이기도 하고, 전에 다뤘던 주제와는 다른 내용이어서 결정하게 되었다. 다만 비지니스 상황에 대한 문제는 계속 고민해 보아야 할 것이다. Query를 몇가지 작성해보았다. 게임, 그리고 데이터의 특성상 하나의 gameid에 양 팀의 데이터가 모두 존재한다. 각 팀의 상황별 승률을 계산하는 것은 문제가 없지만, 팀 구분 없이 상황별 양팀 통합 승률을 구하는 것은 조금 복잡한 query가 될 것 같았다. 블루팀, 퍼플팀(레드팀) 각각의 데이터를 CTE로 구하고, 메인 쿼리에서 데이터를 합산하는 방법이 좋을 것 같다. 지금은 아직 기획을 검토하는 기간이고, 실제로 분석에 들어가는 것은 다음주 부터지만, 해당 내용에 맞는 query를 미리 작성해보았다. 평균 레벨별 경기수 & 승리수 평균 레벨별 승률을 구하기
2021. 01. 05 화요일 오피스아워를 진행하였다. 면접 인터뷰 질문 중 특정 비지니스 상황에 어떠한 해결책을 내놓을 것인지에 대한 답변을 생각해보았다. 예시의 비지니스 상황은 다음과 같다. 대상 기업은 이커머스. 특정 판매자들이 소비자의 주문 취소를 일방적으로 철회하는 상황. 이에 따라서 어떤 지표와 해결책을 제시할 것인가. 내가 생각한 답변은 다음과 같다. 판매자별 주문 취소와 취소 철회 비율을 확인하여 어떤 유형의 판매자가 철회 비율이 높은지 체크 또한 취소 철회가 다수 발생한 판매 업체에 경고를 주고, 지속적인 모니터링을 통해 이러한 행위가 반복될 시 제재를 가하고 그럼에도 같은 경우가 반복될 시 상품을 전부 블라인드 처리하고 판매를 중단시키는 3OUT제 도입. 이러한 비지니스 상황에 따른 해결책 제시는 먼저 상황에 대한 이해가 가장 중요하고, 그 다음은 어떠한 지표를 통해 상황을 모
2020. 12. 20 일요일 연습으로 제작한 대쉬보드를 바탕으로 페어분과 피드백을 진행하였다. 사실 이번주에 롤플레잉이 예정되어 있는지 몰랐었다. 이번주는 영상을 보고 그대로 따라 만드는 과정이어서 어떤 피드백을 하는 것일지 고민을 했었다. 제작한 대쉬보드의 지표가 똑같을 수 밖에 없기에 대쉬보드를 제작하는데 있어서 어려웠던 부분, 그리고 그 외에 DA 과정을 진행하면서 어려웠던 부분 등에 대해 이야기를 나누는 시간을 가졌다. Datacamp 복습을 진행하였다. Summarizing and aggregating numeric data 파트의 stddev(), corr() 등 잘 와닿지 않는 Syntax 위주로 복습하였다.
2020. 12. 18 금요일 Datacamp 복습을 진행하였다. 데이터를 Join, 결합하는 Syntax 중에 Join처럼 테이블의 Column을 확장하는 것이 아니라 Row를 확장하는 Syntax가 있었던 것 같은데 기억이 나지 않았다. 따라서 Datacamp의 예전 과정으로 돌아가서 찾아보았다. UNION : Query를 통해 불러온 데이터들을 결합한다(중복 데이터는 제거). 이 때 Join처럼 Column을 확장하는 것이 아닌 Row를 확장한다. 데이터를 세로로 이어붙인다고 볼 수 있다. 이어서 소개될 Syntax들 또한 UNION을 기초로 한다. UNION ALL : 중복 데이터를 포함한다. INTERSECT : 두 데이터의 교집합에 해당하는 데이터를 불러온다. EXCEPT : 첫번째 데이터 중에서 두번째 데이터에 해당하지 않는 데이터를 불러온다. (데이터1 - 데이터2 = EXCEPT)
2020. 12. 16 수요일 DataCamp 학습을 진행하였다. Summarizing and aggregating numeric data라는 파트이다. 표준편차를 구하는 stddev(~), 단위로 끊어주는 trunc(valuetotruncate, placestotruncate), 데이터 값을 범위에 따라 분류하는 generate_series(from, to, step), 상관관계를 계산하는 corr(~, ~), 중앙값 등 특정 백분위를 구하는 `percentile_disc(0.5) WITHIN GROUP (ORDER BY ~)`, 임시 테이블을 생성하는 CREATE TEMP TABLE table_name AS ~, 만약 해당 테이블이 이미 존재할 때 해당 테이블을 지울 때 사용하는 DROP TABLE IF EXISTS table_name, 데이터를 원하는 소수점 자리에서 반올림하여 나타내는`round(column_nam
2020. 12. 15 화요일 오피스아워를 진행하였다. 저번 프로젝트에서 스토리텔링이 정말 좋으셨던 두 명과 Query가 인상 깊었던 한 명을 말씀해주셨는데 스토리텔링은 다른 두 분, Query는 나를 말씀해주셨다. CTE를 활용하여 Query를 작성한 부분이 인상 깊었다고 하셨다. Programmers에서 저번에 풀었던 오랜 기간 보호한 동물(2)를 같이 풀어보았다. 나는 ORDER BY 에서 (o.DATETIME - i.DATETIME) DESC 로 계산했는데 TIMEDIFF도 사용할 수 있었다. 처음에는 나도 비슷한 방법으로 시도해 보았었는데 안되었던 것을 보니 내가 작성한 Query에 오류가 있었던 듯 하다. window function에 대해 같이 학습을 진행하였다. window function을 이해하는데 어려움이 있었는데, Datacamp에서 해당 내용을 직접 설명해주셔서 이해하기 한층 쉬웠다. 내일 Datacamp를 혼자 다
2020. 12. 14 월요일 Datacamp 학습을 진행하였다. 탐색적 데이터 분석에 대한 파트를 학습하였다. 데이터 테이블을 뜯어보고 활용하는 법을 학습하는 파트인 것 같다. JOIN의 활용과 NULL 값인 데이터를 확인하는 법, COALESCE 를 이용하여 NULL 값을 대체하고 표기하는 법, CAST 를 이용하여 데이터 타입별 차이를 알아보았다. COALESCE 에 대해 간단히 설명하자면, 위의 Query는 COALESCE 를 이용해 TABLE에 존재하는 1이라는 Column을 불러오지만, 1의 데이터가 NULL일 경우 2라는 Column을 불러오는 것이다. 둘 다 NULL일 경우에는 마지막에 지정한 값, 위 Query의 경우에는 missing으로 출력된다. (이 부분은 선택사항으로, 지정하지 않는다면 null로 출력된다.) |1|2| |:---:|:---:| |A|가 |B|나 ||다| | | | |
JOIN은 하나 이상의 테이블을 결합하여 원하는 결과를 불러오는데 사용한다. 두 테이블의 Row를 길게 이어붙인다고 생각하면 편하다. 따라서 결합 후 모든 Column을 불러오면 가로로 길어진 결과창을 볼 수 있을 것이다. JOIN의 종류로는 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN 등이 존재한다. 보통 FROM 으로 먼저 불러온 테이블을 LEFT, JOIN으로 나중에 불러온 테이블을 RIGHT로 구분한다. 추가하자면 하나의 테이블만 가지고 두번 불러와서 스스로 JOIN하는 것을 Self Join이라고 부르며, 따로 Syntax는 존재하지 않고 위에 나열한 Syntax를 사용한다. INNER JOIN INNER JOIN 은 두 테이블 중 양쪽 테이블 모두에 속하는 결과만을 불러오게 된다. Query 예제는 다음과 같다. 위의 예제를 보면 ON 을 이용한 것을 볼 수 있는
2020. 12. 11 금요일 시각화 내용을 조금 다듬었다. 여러 아이콘을 활용해 시각화에 도움을 주었다. 또한 결과를 요약한 페이지를 추가로 만들었다. Programmers 학습을 진행하였다. 프로젝트 진행하느라 우선순위에서 미루어 두었던 프로그래머스 학습을 몰아서 진행하였다. 동물 보호소에서 오랜 기간 보호한 동물(1), (2) 문제를 풀었다. 1번 문제는 아직 입양을 못 간 동물 중 가장 오랜기간 있었던 동물의 이름을 구하는 문제이다. WHERE ... NOT IN ... 을 활용하여 보호한 동물 목록에는 있지만 입양을 간 동물 목록에는 없는 ID를 구하는 방법으로 해결하였다. 2번 문제는 입양을 간 동물 중에서 보호 기간이 가장 길었던 동물의 이름을 구하는 문제이다. 입양 날짜와 보호 시작 날짜의 차를 ORDER BY를 통해 정렬하여 그 차이가 가장 큰 ID를 구하였다. 원
2020. 12. 10 목요일 지표를 통해 결론을 도출하였다. 하다보니 부족한 데이터가 많아서(전반적인 유저 데이터) 정확한 결론을 도출할 수는 없을 것 같았다. 따라서 리스크가 가장 적은 쪽으로 결론을 도출해보았다. 코스는 Wep Development, 수강료는 유료, 레벨은 All Levels로 결정하였다. 웹 개발이 수강생과 총 매출에서 압도적 1위를 차지했기 때문이다. 수강료를 내고 강의를 듣는 수강생이 거의 2배 이상을 차지했다. 이는 대가를 지불하고 퀄리티 높은 강의를 들으려 한다는 것을 의미한다. 따라서 어중간한 퀄리티의 무료 강의보다는 높은 퀄리티의 유료 강의를 제작하는 것이 맞다고 판단하였다. 레벨에서는 부족한 데이터가 많아 현재로서는 모든 레벨이 커버 가능한 All Levels가 바람직하다고 판단했다. 추가 확보해야할 데이터를 정리해보았다. 전반적인 유저 데이터 유저 리뷰 데이터를 통해 웹
2020. 12. 09 수요일 새로운 테이블에 대해 알아보았다. UDEMY Course 테이블에는 UDEMY의 강의에 대한 데이터가 담겨있다. 코스는 크게 4가지로 나뉜다. 웹 개발 비지니스 금융 그래픽 디자인 악기 강의의 제목, 수강생 수, 수강료 유무, 수강비, 등록일자, 레벨(난이도), 코스 등의 데이터가 담겨있다. 지표를 선정하였다. 이번 분석에서 도출해야할 결론은 다음과 같다. 가장 인기있는 코스 수강생 수 총 매출 차기 콘텐츠 선정 코스 수강료 유무 레벨 선정한 지표는 다음과 같다. 코스별 수강생 수 코스별 총 매출 코스별 유/무료 강의 비율 코스별 유료 강의 수강생 비율 난이도별 강의 비율 난이도별 수강생 비율 지표를 구하기 위한