2016년 12월 14일 수요일

데이터 시각화 작업량

"보이는 작업량은 빙산의 일각에 대한 개인적인 보충 "

데이터 시각화 제작 과정을 잘 설명한 글이다. 다만 '04 인터렉티브 개발' 과정의 작업량이 가장 많다는 글쓴이의 의견에는 별로 동의하고 싶지 않다. (글쓴이는 주로 가공이 완료된 데이터를 가지고 작업하는 듯)


물론 '개발' 과정의 작업량이 미미하거나 쉽다는 뜻은 아니고, 원래 내가 하는 일이 제일 어렵고 힘든 법. 데이터가 없는 상태에서 시작해보자.

데이터 수집

박근혜 인물 관계도를 그려보자. 먼저 '데이터 수집'이 필요하다. 어디서 수집한담? 참고 사례가 SBS 뉴스이니 데이터도 SBS 뉴스에서 수집해보자.


구글 검색을 통해 '박근혜'라는 단어가 본문에 포함된, 10월 한 달 간의 SBS 뉴스 기사만을 골라냈다. 이제 기사를 하나씩 클릭하면서 내용을 복사하면 될까? 마부작침(磨斧作針)이라고, 마음을 비우고 묵묵히 복붙을 반복하다 보면 언젠간 끝나겠지만, 아무리 생각해도 사람이 할 짓이 아니다.


굴도 기계가 까준다는데, 원하는 뉴스 기사만 긁어오는 기계를 만들어보자. 먼저 원하는 뉴스 기사 URL만을 추출할 필요가 있다.

다음 그림은 검색 결과를 VIM으로 복사한 결과. ('autopagerize'라는 크롬 확장 도구를 설치하면 일일이 페이지를 옮겨 다니는 수고를 조금 덜 수 있음) 검색어 '^news\.sbs.*'는 'news.sbs'로 시작하는 문자열만을 검색해준다.


명령어 ':v/^news\.sbs.*/d'를 이용하면 'news.sbs'로 시작하는 문자열을 포함하지 않는 줄만을 찾아서 삭제해주며, 결과적으로 URL만 남는다.


URL 추출에 성공했다. 이제 저 URL에 일일이 접속해서 기사 내용을 긁어오면 된다. 누가? 커맨드 라인에서 웹 요청을 할 수 있는 curl이. 그런데 테스트삼아 기사 하나를 불러와봤더니 한글이 다 깨지네? 인코딩이 안 맞나 보다.


다음은 iconv를 이용해서 인코딩을 변환한 결과. (인코딩 문제만 없으면 'wget'을 이용해도 됨)


URL 정보를 'url.log' 파일로 저장한 후, 간단한 배치 파일을 만들어서 돌렸다.


데이터 가공 가공 가공

120여 개의 뉴스 기사 데이터 수집이 끝났다. 이제 데이터 가공(또는 정제)을 시작하자. 1차 목표는 기사 본문 추출. 그런데 본문이 여러 줄로 구성되어 있다. 한 줄이어야 추출이 쉬운데 어쩐다?  '<br/>' 태그를 이용한 단락 구분을 없애야 한다.


검색어 '\(<br/>\)\@<=\n'은 '<br/>' 태그로 시작하는 줄바꿈 문자를 검색해준다. 그리고 해당 줄바꿈 문자를 삭제하면 '<br/>' 태그를 이용한 단락 구분은 사라진다. 검색에 성공하면 삭제는 껌.


기사 본문을 한 줄로 만들었으니 제목 등 불필요한 데이터는 삭제하자. 명령어 '%s/<div class='main_text'/\r&/'는 제목과 본문을 본문 시작 태그인 '<div class='main_text'' 기준으로 분리해준다.


본문이 분리됐으니 본문을 제외한 나머지 데이터는 삭제.


명령어 ':%s/[^ 가-힝]/ /g'를 이용해서 본문 중 한글과 공백(띄어쓰기 유지해야 하니깐)을 제외한 나머지 데이터를 공백으로 변환.


이제 단어별로 정렬 후 인물에 해당하는 단어만을 추출하면 된다. 이후 작업 과정은 '텍스트 의미망 분석' 편 참고. 다음 그림은 가공이 끝난 데이터를 이용한 시각화 결과. 조잡하네. -_-


데이터가 너무 적나? 같은 기간 동안의 JTBC 뉴스 데이터를 이용한 시각화 결과는 다음과 같다. JTBC 이 악물었구나


단순히 기사에서 언급된 인물들의 관계도만을 보여주기 때문에 몇몇을 빼고는 관계의 의미까지 파악하기는 힘들다. 늘어나는 작업량과는 별개로, 관계의 의미를 보여주는 키워드도 포함하면 재밌겠다는 생각. 이런 데이터를 년 단위로 분석해서 변화를 살펴보면 더 재밌겠다는 생각.

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스