한국어
    • 한국어
    • ENGLISH
    • 日本語
    • 中文-繁體

    2016.12.16 Data Science

    IPython Notebook을 통한 데이터 분석 #2

    게임 운영 관리의 핵심은 데이터 분석이라 해도 과언이 아닙니다. 고객의 유형을 파악하고 그에 맞는 서비스를 제공하는 것이 핵심이기 때문이죠!

    때문에 엔씨소프트에서는 최신 데이터 분석 툴을 활용해 여러 데이터를 다각도로 분석하고 있습니다.

    그중 요즘 가장 각광받는 데이터 분석 툴이자, 엔씨소프트 데이터 분석 전문가들이 강추(!)하는  IPython Notebook의 활용 사례를 데이터분석팀 강병수 주임이 소개해 드리도록 하겠습니다~. ( ͡° ͜ʖ ͡°)


    지난 1편에서 설명드린 것처럼, IPython Notebook의 다양한 기능을 적재적소에 잘 활용하면 분석 결과 보고서를 매우 쉽게 만들 수 있습니다.

    Notebook을 사용하면 팀장님이 좋아하실만한 보고서가 뙇! ( °∀°)

    엔씨소프트 데이터분석팀에서는 정기적으로 각 게임별 데이터 모니터링을 통한 지표 보고서를 작성하는데, 이에 Notebook을 적극 활용하고 있죠.

    그중 가장 대표적인 것은 매주 고객들의 데이터를 분석해 플레이 유형별로 그룹화하는 ‘진성 유저 지표 보고서’ 입니다.

    가상의 보고서를 만드는 과정을 통해서,  Notebook 으로 보고서를 만드는 방법을 설명해 드리도록 하겠습니다.  #잘따라오세요 

    진성 유저, 지금부터 한번 분류해 보겠습니다 

    우선 진성 유저 분석 및 결과 도출 과정을 간단하게 알아볼까요?

    간단해 보이지 않는다구요? #그건_기분탓 

    위의 과정에서처럼, 데이터 분석 가장 마지막 단계에서 Notebook을 사용합니다. 그리고 이는 매주 자동으로(!) 실행되죠.

    이번 편에서는 보고서를 만드는 전체적인 과정을 다루고, 다음 편에서 보고서 생성 과정을 자동화하는 방법을 다루도록 하겠습니다.

    Step 1. 작업 공간 구성 및 데이터 준비

    첫 단계는 작업 공간을 구성하는 것입니다.

    우선 작업 공간을 게임별로 나누고, 추출 데이터는 날짜별로 분류할 수 있도록 폴더를 구성합니다.

    여기선 가상의 게임 A를 예로 들어서  진성 유저를 분석해 보도록 하죠.

    게임 A의 진성 지표 생성을 위한 공간 #쫄지마세요 #이제시작  #심호흡 

    data 폴더 내에는 hive에서 추출한 데이터가 날짜별로 저장됩니다 

    aggregation_by_seg_6group_99990120.csv는 그룹별 주간 접속 계정수를 집계한 데이터이며, char_info_level_99990120.csv는 그룹별 레벨 분포를 집계한 데이터입니다.

    이 밖에도 그룹별 주간 접속 계정수 등 다양한 데이터를 Hive를 통해 추출해 지표 보고서로 보여줍니다.

    위의 폴더에 저장된 그룹별 주간 접속 계정수

    진성 지표 보고서를 만들 때는 보고서뿐만 아니라, Hive에서 추출한 데이터를 보기 편하게 정리한 엑셀 파일도 제공합니다.

    data 폴더에 저장된 데이터를 정리한 엑셀 파일 

    위의 이미지처럼 엑셀 파일에 데이터를 삽입하는 것도 파이썬으로 자동화가 가능합니다. 이건 다음 편에서 다루도록 하겠습니다.

    이렇게 작업 공간 구성을 마쳤으면, 이제 Notebook을 실행해서 본격적으로 보고서를 만들어 보겠습니다.

    Step 2. 보고서 틀 구성

    우선  보고서를 통해 주기적으로 확인이 필요한 데이터가 무엇인지, 그리고 그 데이터를 어떻게 표현할지 설계를 해야 합니다.

    데이터 분석 전문가도 처음부터 코드를 짜라고 하면 막막한데요. 그래서 일단 개요부터 짜야 합니다.

    1편에서 소개한 마크다운(markdown)기능을 활용해서 소제목을 정리해서 적어보죠. 벌써 잊어버리신 건...아니겠죠!?

    보고서에 들어갈 내용을 마크다운으로 정리한 화면

    위의 화면처럼 소제목과 데이터를 어떤 식으로 표현하겠다는 메모를 적어두면, 어떤 함수가 필요한지 우주의 기운이 알아서 정해주...는 건 아니고 파이썬 문법 기초만 알면 문제없습니다.

    Step 3. 필요한 라이브러리 정의 및 데이터 불러오기

    어떤 식으로 보고서를 구성할지 설계가 끝나면, 필요한 파이썬 라이브러리를 Notebook 첫번째 셀에서 불러옵니다

    데이터 로딩에 필요한 라이브러리를 불러온 화면 

    이제 본격적으로 데이터를 불러볼까요?

    위 화면에서 ExcelFile() 이라는 함수로 엑셀파일을 불러오고, parse()라는 함수로 엑셀 파일에서 특정 시트의 데이터를 불러온 것을 확인할 수 있습니다.

    여기서는 불러온 데이터 중에 52주치 데이터만 지정하여 account_group_all이라는 변수에 저장했습니다.

    마지막으로는 tail()이라는 함수로 데이터의 끝부분을 출력해 데이터를 잘 가져왔는지 확인합니다.

    Step 4. 데이터 변환

    필요한 데이터를 불러왔으면, 원하는 형태로 데이터를 변형해야 합니다.

    단순 데이터 비교 연산을 하거나 피벗 및 그룹 연산을 통해 데이터를 변형하기도 합니다.

    위의 과정에서 생성한 최근 1년치 그룹별 계정수 데이터인 account_group_all를 활용해 그룹별 전주 대비 계정수 증감을 구해보겠습니다.

    데이터를 비교해 ‘전주 대비 그룹별 계정수 증감’을 구할 수 있습니다

    전주 대비 계정수 증감 데이터를 화살표를 추가해 더 상세하게 출력!

    위와 같은 표가 밋밋하면 표에 스타일을 적용하는 것도 가능합니다.

    여기서 셀의 시작 부분에 “%%HTML”이라는 명령어를 입력하면, 해당 셀에서는 HTML 언어를 그대로 사용할 수 있습니다.

    바로 다음 셀에서 css 스타일을 적용하니 데이터가 보다 직관적으로 보이네요 

    이렇게 정리된 표만 있으면 또 아쉽죠?

    ‘지난 주와 비교해서 XX그룹 계정이 증가했고, YY그룹 계정이 가장 많이 감소했다’와 같은 간단한 데이터 비교 코멘트를 삽입할 수도 있습니다.

    간단한 코멘트를 자동으로 출력! 코멘트를 조건에 맞게 출력할 수도 있습니다 ^ㅁ^

    이렇게 데이터를 비교해서 조건에 맞게 텍스트를 출력하면, 유용한 정보를 한눈에 보기 쉽게 제공하는 (팀장님이 좋아하는) 보고서를 만들 수 있습니다. #팀장님 #보고계시나요 

    Step 5. 데이터 시각화 및 자동 코멘트 작성

    앞서 표에 스타일을 적용하는 것처럼, HTML과 Javascript를 사용해 보고서 형태에 맞는 데이터 시각화를 적용하는 것도 가능합니다.

    보기 좋은 떡이 먹기도 좋은 것처럼, 보기 좋은 그래프가 데이터 분석에도 용이하다는 사실! >ㅁ<

    그룹별 계정수 데이터 12주치를 불러와서  데이터를 생성하고, 실행을 하면...

    한 눈에 들어오는 직관적인 그래프가 생성됩니다!

    그러나 위 그래프의 단점은 데이터를 많이 불러오면 x축이 길어지면서 데이터를 직관적으로 보기 어려워진다는 것입니다.

    따라서 데이터 기간을 선택해서 볼 수 있도록 커스터마이징을 해야 합니다. 이때 customChart.py라는 파일을 사용하죠.

    석달, 6개월, 1년 단위로 그룹별 계정수 변화를 분석하는 그래프를 생성할 수 있죠.

    기간 선택이 가능하도록 커스터마이징한 그래프

    Step 6. HTML파일로 결과물 저장

    보고서 내용 정리를 마치고 HTML 파일로 저장을 하면, 드디어(!) 보고서 생성 끝~~!!

    저장 버튼 누를 때가 가장 행복한 거...저만 그런 건 아니겠죠? 

    앗, 그런데 끝난 게 아니라는 거~ 위의 화면처럼 코드가 노출된 상태로 보고서를 공유하면 원하는 내용을 한눈에 파악하기가 힘듭니다.

    보고서의 마지막 부분에서 코드 소스는 감추고, 출력한 데이터와 그래프만 출력하도록 살짝 바꿔 볼까요~?

    저렇게 script언어를 추가해 주면, 코드를 자동으로 숨기는  ‘Code Hide/Show’ 버튼이 생성됩니다

    버튼을 누르면…

    모든 셀의 소스 코드가 숨김 상태로 변하고 데이터와 그래프만 보입니다!

    이 상태에서 다시 버튼을 누르면 원래대로 소스 코드가 보이죠~

    이렇게 코드를 보였다가 숨길 수 있으면, Notebook을 공유받은 사람이 다른 보고서를 만들 때 참고 자료로 활용할 수도 있습니다.

    지금까지 진성 유저 지표 보고서를 예로 들어서 Notebook을 통해 보고서를 만드는 과정을 단순화하여 소개해 드렸습니다.

    이 밖에도 엔씨소프트에서는 그룹별 레벨 및 직업 분포, 던전 입장수 등 더 다양한 콘텐츠 현황을 지표 보고서에 추가하여 공유하고 있습니다.

    다음 편에서는 분석을 통해 추출한 결과 데이터를 엑셀에 삽입하고, Notebook 생성 과정을 자동화하는 방법을 소개해 드리도록 하겠습니다.

    그럼 다음 시간에 만나요~!