게임 운영 관리의 핵심은 데이터 분석이라 해도 과언이 아닙니다. 고객의 유형을 파악하고 그에 맞는 서비스를 제공하는 것이 핵심이기 때문이죠!
때문에 엔씨소프트에서는 최신 데이터 분석 툴을 활용해 여러 데이터를 다각도로 분석하고 있습니다.
그중 요즘 가장 각광받는 데이터 분석 툴이자, 엔씨소프트 데이터 분석 전문가들이 강추(!)하는 IPython Notebook의 활용 사례를 데이터분석팀 강병수 주임이 소개해 드리도록 하겠습니다~. ( ͡° ͜ʖ ͡°)
2편에서 Notebook을 통해 보고서를 만드는 과정을 살펴보았습니다. 보고서 중에서는 매일 혹은 매주 작성해야 하는 것들이 있죠.
때문에 정기적인 보고서 업데이트를 위해 데이터를 삽입하고 실행하는 업무를 매일 혹은 매주 반복해야 합니다. #넘나_귀찮은것


버튼 하나로 보고서가 뙇! 나온다면 얼마나 좋을까 (´д`、)
사람이 하는 일이다 보니 반복적인 작업이 계속되면 데이터를 잘못 넣을 수도 있고, 업무의 효율성도 떨어지기 마련입니다.
그래서 반복적인 작업을 없애기 위해 데이터 삽입 및 Notebook 실행을 자동화할 수 있는 방법을 최대한 간단하게(!) 소개해 보겠습니다.
1. 엑셀에 데이터 삽입하기
우선 data라는 폴더에 일별 혹은 주별로 구분한 데이터를 저장합니다.
이제 추출한 데이터를 Notebook 보고서의 기반이 되는 엑셀 파일에 옮겨야 합니다.


이렇게 csv데이터를 엑셀에 추가해서 정리해 볼까요?
csv파일을 바로 활용해서 Notebook 보고서를 만들 수도 있지만, 엑셀 파일을 만들어서 Notebook 보고서와 함께 공유하면 공유받은 사람이 데이터를 수월하게 재활용할 수 있다는 장점이 있습니다.
엑셀파일과 csv파일을 열어서 ‘복붙’하는 방법도 있지만, openpyxl이라는 Python 라이브러리를 활용하면 이 과정이 굉장히 편리해집니다.
자, 이제 Notebook을 실행해서 openpyxl로 엑셀에 데이터를 삽입하는 과정을 간단하게(!) 살펴보도록 하겠습니다.
Step 1. 필요한 라이브러리 불러오기
Notebook을 실행하고 작업에 필요한 라이브러리들을 불러옵니다.


요렇게 라이브러리들을 소환해 보죠 #이리오너라
첫 번째 Cell에서 임포트한 라이브러리는 csv파일을 읽어오고 데이터를 알맞게 변형시키고, 두 번째 Cell의 openpyxl은 엑셀에 데이터를 삽입하는 일을 합니다.
Step 2. 데이터 삽입할 엑셀 파일 및 csv파일 불러오기
엑셀에 추가할 csv파일을 읽어오기 전에, 엑셀부터 읽어와서 어떤 Sheet에 데이터를 추가해야 하는지 확인해 봅니다.
load_workbook()이라는 함수를 활용해서 엑셀을 불러오고, get_sheet_names()으로 엑셀 파일 내에 있는 시트 이름을 확인해 보겠습니다.
시트명을 확인한 후, 데이터 삽입을 원하는 시트를 get_sheet_by_name()으로 불러옵니다.
엑셀 시트를 불러왔으면? 이제 그 시트에 넣을 데이터를 불러와야겠죠~?
data폴더 내 “99990120”폴더에 저장된 aggregation_by_seg_6group_99990120.csv 불러오기
Step 3. 엑셀에 데이터 삽입 및 서식 변경
여기까지 작업을 마친 뒤 액셀을 확인해 보겠습니다.
위와 같은 틀로 데이터가 정리되어 있을 텐데요.
이제 불러온 csv 데이터도 엑셀에 맞게 Pivot과 같은 Pandas 라이브러리 함수를 사용해서 적절하게 변형해 줍니다.


빨간색으로 표시된 부분을 보면 위의 엑셀 데이터 순서와 맞춰진 것을 확인할 수 있습니다
그럼 다음과 같이 엑셀에 데이터를 삽입합니다.
데이터가 중복으로 삽입되면 안 되기 때문에, if 조건문을 사용해서 현재 넣을 데이터가 존재하는지 ‘기간’ 데이터를 비교해서 확인한 후, 데이터를 엑셀에 삽입합니다.
삽입된 데이터를 엑셀에서 잠시 확인해 보면, 서식이 기존과 다른 것을 알 수 있습니다.


테두리가 없고 계정 비율은 백분율 형식으로 되어 있어 변경이 시급하다!
openpyxl의 style관련 함수를 사용하면 삽입된 서식까지 맞출 수 있습니다.


기존 서식을 추가한 행에 style함수를 사용해 서식 복사를 하고, save함수로 엑셀을 저장합니다
각 시트별로 위와 같은 과정을 거치면, 엑셀에 데이터를 삽입하는 것도 Notebook 파일 실행 한 번으로 쉽게 해결할 수 있습니다.
그렇다면 지금부터 이제 위의 과정과 지난 편에서 보았던 Notebook 보고서 생성 과정을 자동화하는 방법에 대해 알아보겠습니다.
2. Notebook 자동 실행 및 결과물 저장
엑셀에 데이터를 입력하고 Notebook 보고서를 만드는 과정까지 알아보았는데요, 마지막으로 Notebook을 자동 실행해서 결과물을 저장하는 방법에 대해 알아보겠습니다.
리눅스에서는 terminal창, 윈도우에서는 cmd창에서 runipy라는 Python 라이브러리를 통해 바로 Notebook을 실행할 수 있습니다.
위에서 진행한 엑셀 데이터 삽입 Notebook 파일명이 Create_excel.ipynb이면 아래와 같이 실행합니다.
보이는 화면과 같이 “runipy –o 노트북명.ipynb”를 입력하고 엔터를 치면, notebook이 실행이 됩니다. 여기서 –o는 Notebook 내 Output Cell을 저장해 주는 옵션입니다.
runipy 명령어 앞에 전달하고자 하는 변수를 입력하면, 그 변수가 Notebook 내로 전달되어 특정값을 지정할 수 있습니다.
이러한 방법으로 엑셀 데이터에 특정 날짜의 데이터를 삽입할 수 있습니다.
그 전에 Create_excel.ipynb에서 한 가지를 수정해야 됩니다!
앞에서 소개된 추가할 데이터를 불러오는 과정에서 datedata라는 변수를 사용해서 데이터가 저장된 위치와 파일 이름을 자동으로 변경될 수 있도록 수정합니다.
이 방법이 가능한 이유는 미리 csv파일을 날짜별로 분류해서 폴더를 만들었기 때문입니다.
그 다음에 아래 화면과 같이 “datedata=’날짜’ runipy –o 노트북명.ipynb”라고 입력하면 datedata라는 변수는 Notebook내로 전달이 되고 Notebook에서는 environ함수를 통해 값을 전달받습니다.


이렇게 실행하면, 자동적으로 특정 날짜(99990120)의 데이터가 엑셀에 삽입됩니다!
이처럼 엑셀 데이터를 삽입하는 Notebook 파일을 실행한 후, 보고서가 될 notebook 파일도 runipy로 실행하면 그 주의 현황을 보여주는 보고서가 완성됩니다!
이제 완성된 보고서를 공유하려면 HTML파일로 결과물을 저장해야 합니다. #끝날때까진_끝난게아니야
이 과정 역시 터미널창에서 명령어 한 줄로 해결할 수 있습니다.
Notebook 파일의 형식을 변경해서 저장해 주는 nbconvert 라이브러리를 사용하면 결과물이 그대로 저장되죠.


“노트북명.ipynb”를 실행하면 해당 Notebook 이름을 가진 HTML파일이 생성됩니다
Notebook 자동 실행 및 결과물 저장 명령어는 이처럼 간단합니다.
위의 과정을 리눅스나 윈도우 스케줄러에 등록해 놓으면, 엑셀에 데이터를 정리하고 보고서를 만드는 작업을 모두 자동화할 수 있죠.
지금까지 3편에 걸쳐서 IPython(Juypter) Notebook이라는 툴에 대해 알아보았습니다.
처음엔 다소 익숙하지 않게 느껴질 수 있지만, 보고서 생성 작업은 틀만 한 번 잡아놓으면 다양한 업무에 활용할 수 있으니 데이터 분석이나 Python에 관심이 있으신 분들은 도전해보시기 바랍니다!