<p style="text-align:justify;">PM이라면 데이터 분석에 꽤 많은 시간을 쏟으실 거예요. <a href="https://yozm.wishket.com/magazine/detail/1357/">이전 글</a>에서 어떻게 하면 분석 업무를 조금 더 효율적으로 할 수 있는지 알아보다, SQL과 파이썬을 배워야 한다는 사실까지 접하셨겠죠? 오늘은 파이썬이 PM의 빠른 업무에 도움이 되는 이유를, <strong>제가 실무에서 수행했던 데이터 업무로 예를 들어 엑셀과 1:1로 비교해볼게요.</strong></p><p style="text-align:justify;"> </p><p style="text-align:justify;"> </p><h3 style="text-align:justify;"><strong>1. PM은 개발자도 아닌데, 엑셀만 써도 되지 않을까?</strong></h3><p style="text-align:justify;">이 글을 쓰게 된 계기는 이전 글에 대한 의견 때문이었습니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image001.png" alt="엑셀 파이썬"></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">공감 가는 의견이었습니다. 저 역시 지금 당장 쓸 수 있는 툴 중에서 엑셀을 가장 빠르게 쓸 수 있으니까요. 새로운 걸 배우는 데는 시간이 오래 걸리죠. 파이썬을 실무에 얼마나 써먹을 수 있을지도 미지수고요. 그래서 제가 대신 정리했습니다. 파이썬이 엑셀에 비해 구체적으로 얼마나 더 효율적 일지 말이에요.</p><p style="text-align:justify;"> </p><p style="text-align:justify;">엑셀과 파이썬을 비교하기 위해, 지난주에 엑셀로 분석한 결과를 똑같이 만들 수 있는 파이썬 코드를 작성했습니다. <strong>정리하자면, 파이썬 코드를 짜는 데 익숙해지면 복잡한 데이터 분석도 1/3 수준으로 간소화할 수 있습니다.</strong> 분석 과정에 쓰인 아이템은 다음과 같습니다.</p><figure class="table"><table><tbody><tr><td><ul><li style="text-align:justify;">엑셀: 두 개의 피벗 테이블, 7개의 함수, 4개의 탭 (원본, 피벗 1, 피벗 2, 분석)</li><li style="text-align:justify;">파이썬: 코드 4줄 (4개의 함수, 탭 없음)</li></ul></td></tr></tbody></table></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">그럼 이제 엑셀과 파이썬을 차이를 실제 사례와 함께 더 자세하게 알아볼까요?</p><p style="text-align:justify;"> </p><p style="text-align:justify;"> </p><h3 style="text-align:justify;"><strong>2. 실제 업무로 보는 엑셀 vs. 파이썬</strong></h3><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image003.jpg" alt="엑셀 vs 파이썬"><figcaption>(출처: Unsplash)</figcaption></figure><p style="text-align:justify;"> </p><h4 style="text-align:justify;"><strong>1) 지난주에 정리한 데이터는...</strong></h4><p style="text-align:justify;">지난주에 저는 새로운 서비스를 기획하면서, B tv VOD 중 음원을 인식한 콘텐츠 데이터를 정리했습니다. 데이터를 정리하기 전에 스스로에게 던진 목표는 이러합니다.</p><figure class="table"><table><tbody><tr><td><p style="text-align:justify;">"<strong>(1) 한 콘텐츠 당 평균 앨범 수, (2) 콘텐츠 당 평균 음원 수, (3) 평균 앨범 당 음원 수</strong>를 알고 싶어. 그런데 <strong>장르 별로도 구분</strong>해서 봐야 해. 장르 별로 인식되는 음원의 성격이 다르거든.</p><p style="text-align:justify;"> </p><p style="text-align:justify;"><strong>단, 가장 먼저 콘텐츠 별로 데이터를 정리해야 해.</strong> 장르 별로 평균을 <전체 음원 개수> 나누기 <전체 콘텐츠 개수>로 계산하면 안 돼. 나누기 도 안 돼. 서로 다른 콘텐츠에 같은 배경음악이 쓰이기도 하잖아."</p></td></tr></tbody></table></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">목표를 정리한 후, 데이터 추출이 필요한 테이블과 필드·조건을 찾았습니다. 콘텐츠 DB에서 음원 정보가 한 건 이상 있는 콘텐츠와 해당 콘텐츠에 있는 모든 음원 정보를 csv 파일로 받은 후, 엑셀에서 다음과 같이 네 단계의 분석 과정을 거쳤습니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image005.png" alt="엑셀 피벗데이터"><figcaption>엑셀 데이터 정리 과정</figcaption></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">엑셀의 피벗 테이블 기능도 쓸만하지만, 몇 가지 한계가 있습니다.</p><p style="text-align:justify;"> </p><p style="text-align:justify;"><strong>먼저, unique 값을 바로 집계할 수 없습니다.</strong> 엑셀 2013 이상에서는 피벗 테이블 생성 시 체크 박스 선택을 통해 가능하지만, 그 외의 버전에서는 별도의 수식을 써야 합니다. 저는 엑셀에서 피벗 테이블을 두 번 사용하는 방식으로 앨범과 음원의 unique 개수를 집계했습니다.</p><p style="text-align:justify;"> </p><p style="text-align:justify;"><strong>둘째, 피벗 테이블을 선택하여 또 다른 피벗 테이블로 만들 수 없습니다.</strong> 피벗 테이블을 다시 피벗하기 위해서는 다른 곳에 일반 테이블로 복사 & 붙여넣기를 한 후에나 가능합니다. 따라서 분석이 복잡할수록 탭이 많아집니다. 각 탭이 어떤 과정을 수행하기 위해 생성되었는지 헷갈리기 시작합니다. 분석이 틀렸다는 사실을 깨달아도 어떤 탭으로 되돌아갈지 찾는 데 시간이 소요됩니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><a href="https://www.wishket.com/w/MvLohooMf5"><img src="https://yozm.wishket.com/media/news/1365/yozm-banner-center.png"></a></figure><p style="text-align:justify;"> </p><h4 style="text-align:justify;"><strong>2) 엑셀로 정리한 데이터를 파이썬 코드로 다시 정리하기</strong></h4><p style="text-align:justify;">엑셀로 정리한 결과를 똑같이 만드는 파이썬 코드를 짰고, 이제 각각의 프로세스를 비교해보겠습니다.</p><p style="text-align:justify;"> </p><p style="text-align:justify;"><strong>엑셀의 분석 과정 4가지를 두 개씩 잘라서 볼게요.</strong></p><p style="text-align:justify;">먼저, 엑셀에서는 음원 앨범과 음원 id의 unique count를 집계하기 위해 두 번의 피벗을 돌렸습니다. 같은 데이터를 추출하기 위해 파이썬으로는 pandas의 pivot_table 함수를 한 번 사용했습니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image007.png" alt="파이썬 코드"><figcaption>엑셀 vs. 파이썬 1</figcaption></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">집계 기준이 unique count이기 위해서 "aggfunc = pd.Series.nunique"를 적었고, 피벗 테이블에 추가 작업을 하기 위해 일반 테이블 (DataFrame) 형태로 변환하기 위해 마지막 줄의 코드를 작성했습니다. 구글에서 검색하면 한국어로도 정보가 잘 나옵니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image009.png" alt="파이썬 피벗테이블"></figure><p style="text-align:justify;"> </p><p style="text-align:justify;"><strong>두 번째 분석 과정입니다. 엑셀부터 볼게요.</strong></p><p style="text-align:justify;">피벗 테이블에 '앨범 당 음원' 열을 추가하기 위해 탭을 하나 더 만들어 복사했습니다. 그 후, D 열의 값을 C열의 값으로 나누어 E 열에 추가했습니다. 그 후 장르 별 1) 평균 앨범 수, 2) 평균 음원 수, 3) 평균 앨범 당 음원 수를 알기 위해 averageif 함수를 (물론 복붙이지만) 6번 사용했습니다.</p><p style="text-align:justify;"> </p><p style="text-align:justify;">파이썬으로는 단 두 줄의 코드로 같은 데이터를 얻을 수 있습니다. 게다가 기초 파이썬만 배워도 알 수 있는 쉬운 코드입니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image011.png" alt="파이썬 분석과정"><figcaption>엑셀 vs. 파이썬 2</figcaption></figure><p style="text-align:justify;"> </p><h4 style="text-align:justify;"><strong>3) 결론</strong></h4><p style="text-align:justify;">같은 결과를 만들기 위해 엑셀과 파이썬에 사용된 아이템입니다.</p><figure class="table"><table><tbody><tr><td><ul><li style="text-align:justify;">엑셀: 두 개의 피벗 테이블, 4개의 탭 (원본, 피벗 1, 피벗 2, 분석), 7개의 함수</li><li style="text-align:justify;">파이썬: 한 개의 피벗 테이블, 탭 없음, 4개의 함수</li></ul></td></tr></tbody></table></figure><p style="text-align:justify;"> </p><p style="text-align:justify;">사실 파이썬 기초 문법은 알더라도, 막상 업무에 적용하려면 코드 작성이 너무 오래 걸리죠. 다른 업무도 있는데 파이썬만 잡고 있을 수도 없고요. 저는 요즘 <a href="https://app.datacamp.com/learn">DataCamp</a>로 SQL과 Python 공부를 하고 있는데, 주말에 공부하면서 자주 분석하는 데이터 정리 코드를 짜 놓으려고 합니다. 그러면 주중에 데이터 분석이 급하게 필요할 때 필요한 코드를 복사해서 쓸 수 있겠죠?</p><p style="text-align:justify;"> </p><p style="text-align:justify;"> </p><h3 style="text-align:justify;"><strong>파이썬의 또 다른 장점</strong></h3><p style="text-align:justify;">이번에 느낀 파이썬의 장점 두 가지를 더 말씀드리고, 저는 이만 물러나겠습니다. 긴 글 읽어주셔서 감사합니다.</p><p style="text-align:justify;"> </p><h4 style="text-align:justify;"><strong>1) 무시할 수 없는 로딩 시간</strong></h4><p style="text-align:justify;">이번에 본 데이터는 40만 개가 넘는 행으로 구성되었습니다. 엑셀에서 데이터를 돌릴 때 로딩이 꽤 오래 걸렸습니다. 엑셀을 열 때 로딩, 피벗할 때 로딩, vlookup 해서 다른 테이블을 합칠 때도 로딩이 걸렸어요. 반면, 파이썬에서는 로딩에 소요된 시간은 다 합쳐도 몇 초 되지 않았습니다.</p><p style="text-align:justify;"> </p><h4 style="text-align:justify;"><strong>2) 빠른 테이블 머지 속도</strong></h4><p style="text-align:justify;">엑셀 vlookup 기능을 이번에 파이썬으로 처음 수행했습니다. 엑셀에서 vlookup 함수 사용 시 데이터가 많으면 로딩 시간도 오래 걸리고, 한 번에 한 열만 추가할 수 있죠. 파이썬에서는 두 테이블의 모든 테이블을 한 번에 합칠 수 있는 데다 로딩 시간도 거의 없습니다.</p><p style="text-align:justify;"> </p><figure class="image image_resized" style="width:100%;"><img src="https://yozm.wishket.com/media/news/1365/image013.png" alt="테이블 머지 속도"></figure><p style="text-align:justify;"> </p><figure class="table"><table><tbody><tr><td><p style="text-align:justify;"><strong><pandas merge 기능 관련 기록></strong></p><ul><li style="text-align:justify;">pandas의 merge 사용 시, 두 테이블의 key가 되는 열 이름만 같아도 바로 합칠 수 있음</li><li style="text-align:justify;">merge 사용 시 조심할 것: 결합하는 두 테이블에 key value가 2개 이상씩 있으면 중복 값이 발생함</li><li style="text-align:justify;">merge 전에 key value 기준으로 중복을 제거(drop_duplicate)해주거나, 결합 후에 중복을 제거해야 함</li></ul></td></tr></tbody></table></figure>