brunch

You can make anything
by writing

C.S.Lewis

by 강원양 Jun 29. 2019

데이터로 보는 나의 구독자

파이썬(Python)을 활용한 데이터 수집 및 시각화 프로젝트 후기

최근 오랜 궁금증 끝에 Python을 6주간 배웠다. 그간 다양한 형태의 데이터 시각화 프로젝트를 진행하며, 여러 데이터를 접하고 활용해왔으나, 아무래도 개발 관련 지식과 능력이 부족하다 보니 데이터 자체를 핸들링하는 데 있어서 한계가 있다고 종종 느껴왔다. 생각해보니 많은 부분 개발자에게 의지하고 있던 부분이기도 하고, 또 직접 빠르게 해보고 싶다는 생각도 여러 차례 해왔던지라, 이번 기회에 데이터 활용 시 어려움을 겪었던 몇 가지 이슈들을 해결하기 위한 방법을 배우는 것을 최소한의 목표로 두고 수업을 들었다.


수업을 듣는 한편, 개인적으로 관심 있는 주제를 선정해 미니 프로젝트를 진행하는 기회가 주어졌다. 나는 몇 차례 브런치에서 본 글들을 참고로 하여 나의 브런치 구독자를 데이터로 살펴보기로 하였다. 프로젝트 진행을 위해 아래 글을 읽고 참고로 하였다. 이미 브런치 구독자 데이터를 활용한 분석 사례로, 데이터 수집 및 분석 가능한 범위가 어느 정도일지, 어떤 것들을 데이터로 확인할지 주제를 구체화하는데 도움이 되었다.




이번 글은 Python을 활용한 미니 프로젝트에 대한 내용과 후기를 다루고자 한다. 프로젝트는 데이터 기획 및 수집부터 시각화, 인사이트 도출까지 일반적인 데이터 분석의 프로세스를 따른다. 데이터 수집은 Python을 활용해 웹 크롤링으로 진행하였고, 데이터 분석 및 시각화에는 Python과 Tableau를 함께 활용하였다. 특히 시각화의 경우, 지금까지 직접 제작해본 경험이 없는 네트워크 시각화를 그려보는 것을 목표로 하였다.


데이터를 통해 확인하고 싶은 것은 크게 3가지이다.

1. 나를 구독하는 사람들은 어떤 사람들일까?

2. 내가 구독하고 있는 사람(관심작가)은 어떤 사람들일까?

3. 나와 나를 구독하는 사람들은 어떻게 연결되어 있을까?

(사실 이밖에도 데이터로 확인할 수 있고, 궁금한 것들은 끝도 없지만... 정해진 프로젝트 기간으로 인해.. 남은 궁금증은 다음으로 넘기기로 했다...!)



파이썬(Python)을 활용한 웹 크롤링


Python을 활용해 수집한 데이터는 크게 2가지이다. 하나는 나를 구독하는 사람(구독자)과 내가 구독을 한 사람(관심작가) 리스트이고, 다른 하나는 이들의 특징을 알 수 있는 프로필 정보이다.

(좌) 구독자/관심작가 리스트 데이터 수집 페이지, (우) 작가별 프로필 데이터 수집 페이지

두 가지 데이터를 수집하기 위해 각각의 웹 페이지에 접속하여 수집하고자 하는 요소를 크롤링했다.

· 구독자 리스트 웹 페이지 주소 : https://brunch.co.kr/@{아이디}/follower
· 관심작가 리스트 웹 페이지 주소 : https://brunch.co.kr/@{아이디}/following
· 작가별 프로필 웹 페이지 주소 : https://brunch.co.kr/@{아이디}#info

구독자, 관심작가, 프로필 데이터를 수집하는 브런치 웹 페이지의 주소는 '아이디' 정보 값만 다르고 같은 형식을 따르기 때문에, 1) 나의 구독자 리스트, 2) 나의 관심작가 리스트 3) 나이 프로필 데이터를 수집하는 코드를 짜고 크롤링 한 뒤, 나의 구독자 별 아이디 값을 활용해 동일 코드를 돌려서 원하는 데이터를 모두 수집할 수 있었다.

크롤링 중독에 빠지다...!
직접 작성한 코드를 실행시킨다. 알아서 크롬이 켜진다. 내가 작성해둔 웹 페이지가 뜨고, 화면이 자동으로 움직인다. 내가 원하는 형태로 데이터가 착착 수집된다. 자동으로 움직이는 화면을 왠지 모르게 자꾸만 보고 있게 된다.

회사에 입사하진 얼마 안 되었을 때, 개발자가 짜준 크롤링 코드를 돌리고, 뭔지도 모르는 상태로 검은색에 뜨는 텍스트를 하염없이 봤던 경험이 있다. 이번에도 그와 유사했다. 한 가지 다른 점이 있다면 내가 작성한 코드로 인해 자동으로 움직이는 화면이 더욱 신기하게 느껴졌던 것! 그러나 신기함도 잠깐, 곧 문제에 봉착했다. 그리고 또 문제에 봉착했다. 그때나, 지금이나 크롤링은 '잘 되고 있나, 정확하게 된 것인가?' 하는 마음으로 볼 필요가 있다는 것을 느꼈다. (물론 능력자라면... 능력자가 짠 코드라면, 굳이 그럴 필요가 없겠지만...!)


이번에 데이터를 수집하면서, 한 번 작성한 코드는 그대로 끝나지 않고 계속 수정되었다. 예를 들어 데이터 수집 당시 259명의 구독자를 갖고 있던 나의 구독자 리스트를 수집하는 코드는 잘 실행되어 완벽히 데이터를 수집할 수 있었지만, 몇 천명의 구독자를 갖고 있던 작가의 구독자 리스트는 제대로 수집하지 못했다. 또 화면이 로딩되는 시간을 고려치 않았던 코드는 전체 데이터 중 일부만 수집하는 문제를 발생시켰다. 또 작가별 프로필 정보로 수집하고자 하는 데이터 값의 형태가 일부의 경우 다를 수 있다는 점을 미리 예상치 못해서, 의도치 않게 데이터를 처음부터 다시 수집해야 하는 경우도 있었다. 이 밖에도 다 생각나지 않을 만큼... 여러 시행착오가 있었다.



판다스(Pandas)를 활용한 데이터 정제


웹 크롤링의 결과물인 데이터는 판다스(Pandas)를 활용해 시각화를 위해 필요한 형태로 정제했다. 물론 엑셀로 할 수 있는 부분도 있지만, 간결한 몇 줄의 코드로 빠르게 정제할 수 있다는 점이 매우 유용했다.

판다스(Pandas)를 활용한 데이터 통합

위 이미지상 코드는 다수의 엑셀 파일을 하나로 합치는 코드인데 다 합치 고나니 무려 행의 수가 57,903개였다. 만약 판다스 없이 파일을 합치고자 했다면, 엑셀 파일을 열고 복붙을 했을 텐데... 분명 느린 엑셀을 기다리느라 답답... 혹은 멈춰버리진 않을까 불안.. 했을 테다!


위 사례 외에도 판다스를 활용해 다양한 형태로 데이터를 정제하고 만들 수 있지만, 아직 배워야 할 부분이 많은 동시에 시각화 솔루션 tableau의 데이터 정제 기능이 익숙하다는 이유로 필요한 상황마다 판다스와 tableau를 적절히 활용했다.

시각화 솔루션 tableau에서도 데이터 조인, 필터, 파생변수 만들기 등을 할 수 있다.



태블로(Tableau)를 활용한 시각적 분석


데이터 인사이트, 앞서 데이터를 통해 알아보고 싶었던 궁금증의 답을 찾기 위해 시각화 솔루션 Tableau를 활용해 시각화 차트를 만들고 데이터를 탐색하고 인사이트를 도출해보았다. 이와 같이 시각화 차트를 기반으로 데이터 인사이트를 찾는 것을 시각적 분석이라고 말한다.

매개변수 기능을 활용해 만든 인터랙티브 시각화 차트로 지표별 구독자의 특징 파악하기

데이터 수집 시점(6/7일) 기준 나를 구독하는 사람은 259명이었고, 구독자 259명의 특징을 4가지 지표(구독자 수, 관심작가 수, 글 수, 매거진 수)를 기준으로 살펴보았다.

4가지 지표를 기준으로 데이터를 살펴본 결과 평균적으로 90명의 구독자, 135명의 관심작가, 8개의 글, 0개의 매거진을 갖고 있음을 확인할 수 있었다. 그와 함께 위에서 본 시각화 차트로 알 수 있듯이 극단적인 값을 갖고 있는 경우가 있어, 중앙값을 살펴보거나, 아예 극단값을 제외한 평균값을 보는 등으로 데이터의 요약 통계 값을 확인하는 등의 방식으로 데이터를 탐색했다.

구독자의 브런치 이용 행태를 파악할 수 있는 시각화 차트

한편, 위 4가지 지표 외 구독자들의 이용 형태를 파악하기 위해 별도의 파생변수를 만들어서 살펴보기도 했다. 쉽게 말해 구독자를 분류하는 별도의 기준을 만든 것인데, 예를 들어 구독자를 '구독자 수 보다 관심작가가 많은 사람과 반대 경우의 사람'으로 나누거나, '작성한 글이 0개인 사람과 1개 이상인 사람'으로 나누는 등의 방식이다. 이를 통해 확인한 몇 가지 인사이트의 예는 아래와 같다.

· 관심작가보다 구독자가 많은 사람은 100% 글을 1개 이상 발행했다.
· 글을 1개도 작성하지 않은 사람은 모두 본인 프로필 상 태그 정보를 입력하지 않았다.
· 구독자 수가 0명인 사람 모두가 글을 1개도 발행하지 않았다.



파이썬으로 그리는 시각화 : 워드 클라우드, 네트워크 시각화


태블로를 활용한 데이터 탐색, 시각적 분석으로 '나의 구독자는 어떤 사람인지' 알아보았다면, 나머지 궁금증은 파이썬의 라이브러리 matplotlib, seaborn, network 등을 활용한 시각화로 확인하였다. (선생님의 도움으로... 뚝딱...!)


먼저 1) 나를 구독하고 있는 '구독자', 2) 내가 구독하고 있는 '관심작가', 그리고 3) '나와 나의 구독자가 구독하고 있는 관심작가'의 프로필 정보 중 '태그' 데이터를 활용해 특징을 찾아보았다.

작가 중 태그 정보를 갖고 있는 사람에 한해 태그의 빈도수 분석 결과

1), 2), 3)의 경우 모두 '기획자'가 가장 많은 것을 알 수 있다. 나를 구독하는 사람도, 내가 구독하는 사람도, 또 나와 구독자가 구독하는 사람도 '기획자'가 가장 많았다. 나를 구독하는 사람 중 마케터가 많다는 사실도 확인할 수 있다. 또 나와 나의 구독자가 '콘텐츠', 'IT', '글쓰기', '경영', '직장' 등의 태그 정보를 갖고 있는 작가를 구독하고 있음을 확인할 수 있었다.


이번 프로젝트를 진행하면서, 시각화 부분의 목표였던 네트워크 시각화도 해보았다. 이는 데이터로 확인하고 싶었던 마지막 궁금증으로 "우리가 어떻게 연결되어 있을까?"라는 다소 추상적인 부분을 데이터로 확인하는 것이 목적이었다.

이게 뭐람...! 블랙홀인가... 큰 점인가...!

앞서 언급하였듯이 내가 수집한 데이터의 전체 행 수는 거의 6만 개에 이르는 양이다. 이를 모두 네트워크 시각화로 표현하면, 너무 많은 노드와 선으로... 어떤 의미도 알 수 없는 검은색 점 하나를 그리게 된다. 따라서 전체 데이터 중 일부를 선택해서 시각화를 다시 그렸다. 데이터 선택의 기준은 '나의 구독자 중 글을 1개 이상 발행한 48명'으로 했다. 즉, 아래 시각화는 48명과 나와의 관계를 네트워크 시각화로 그린 것이다.

시각화 방법을 달리 한 네트워크 시각화 - 나와 48명의 작가 데이터 활용

3가지 네트워크 시각화 결과물은 모두 동일한 데이터를 활용하되, 네트워크 시각화의 방법을 조금씩 다르게 한 결과물이다. 가장 왼쪽의 시각화는 49명(나 + 구독자 48)의 관계를 모두 그린 것이고, 가운데 시각화는 왼쪽과 동일하되 시각적으로 좀 더 정리되어 보이도록 한 시각화(kamada_kawai 활용)이다. 가장 오른쪽의 경우 선을 최소화해서 그리는 동시에 가운데 시각화와 동일하게 kamada_kawai를 활용해 그린 시각화이다.

위 이미지상 가장 오른쪽 네트워크 시각화 결과물을 좀 더 자세히 살펴보면, 여러 노드가 연결되어 중심을 이루는 몇 명의 작가를 확인할 수 있다. 당연히 나의 구독자 데이터를 활용했기 때문에, 가장 하단의 중심점은 나이다. 그 외 나머지 4명의 작가는 데이터 기획, 분석, 개발 관련 글을 쓰고 계신 작가였고, 한 분은 스타트업 디자이너였다. 또 그중 3명은 현재 내가 구독하고 있지 않은 작가로, 이번 분석 계기로 "나 역시 좋아할 만한 글"을 발행하고 있을 것으로 생각하고, 구독했다!

다시 한번... 멋있어 보이는 시각화 말고, 인사이트를 위한 시각화!

직접 네트워크 시각화를 만들어보면서 느꼈던 가장 큰 인사이트는 '어떻게 하다 보니 네트워크 시각화를 그릴 순 있게 되었는데, 그 결과물을 해석하는 것이 쉽지 않다'는 것이었다. 분명 네트워크 시각화를 통해 여타의 시각화 유형으로는 발견하기 어려운 시각적 분석 결과를 찾을 수 있었지만, 보다 정확한 인사이트 도출을 위해서 깊이 있는 공부가 필요하다는 것을 알게 되었다.


또 다른 한편, 문득 '예쁘고 있어 보이는 시각화보다 데이터 인사이트를 얻기 위한 시각화'가 중요하다고 이야기해왔던 나 자신을 떠올리게 되었다. 어쩌면 나도 선생님께 '네트워크 시각화를 해보고 싶어요!'라고 이야기했을 때, 데이터 인사이트보다 있어 보이는 시각화를 해보고 싶다는 것으로부터 시작된 것은 아닌가 하는 생각이 들기도 했다. 이랬든 저랬든 알고 싶은 명확한 목적을 바탕으로 데이터를 활용하고 시각화를 만드는 게 중요하다!




이번 프로젝트를 통해 가장 좋았던 점은 그간 어렵고 힘들다고 생각했던, 뭔가 많은 것을 알고 있어야 할 수 있을 것이라고 생각했던 개발을 조금이나마 경험할 수 있었던 것이었다. 아무래도 개인적으로 궁금했던 점을 해결하기 위한 미니 프로젝트에 참여했던 것이 보다 빠르게 파이썬을 배울 수 있게 된 좋은 기회라고 생각한다. 역시 이번에도 '궁금하면, 뭐든 직접 해봐야 한다...!'는 것을 느꼈다! 이번에 한 프로젝트 외에도 개인적으로 또 회사 업무적으로 파이썬을 활용해보고 싶은 것들이 있는데, 앞으로 조금씩이라도 계속 시도하고 배움을 더 해나가고 싶다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari