3개의 최종 차트를 만들기까지
언론사에 다니지만 '속보'는 여전히 낯설다. 주로 긴 호흡을 가지고 기사를 작성하는 탐사보도 매체에서 일하고 있기도 하고, 하루 만에 준비해야 하는 기사보다는 최소 일주일은 두고 준비하는 기사에 많이 참여하기 때문이다. 물론 고위공직자 재산 같은 데이터가 공개되는 날이면 하루 만에 기사를 쓰곤 하지만 우리 데이터팀 선배들과 하는 작업이었다. 그런데 이번엔 다른 팀인 심인보 선배의 기사에 필요한 웹기사 그래픽을 하루 만에 만들어야 했다.
https://newstapa.org/article/bjz3e
사실 하루는 웹기사 그래픽을 제작하기에 꽤 충분한 시간이다. 다만 '속보'라면서 업무를 전달받았고, 꽤 많은 사람들이 볼 것 같은 김건희 여사 관련 기사라서 더 긴장이 됐다.
그래픽 의뢰서에는 3개의 그래픽이 텍스트로 표현되어 있었다.
- 2010년 1월 12일 김건희 여사 매수 주문 가격
- 2010년 1월 12일 도이치모터스 주식 거래 비중
- 도이치모터스 주식 거래량
이 자료만 보고 어떻게 시각화하면 좋을지 상상을 해봤다. 우선 그래픽 2는 주식 거래 비중을 표현해야 하니 파이 차트 하나면 좋겠고, 그래픽 3은 변화량보다는 절대적인 거래 액수가 중요하니 선 차트보다는 막대 차트를 사용하면 좋을 것 같았다.
속보라고 하니 마음이 급해서 가장 간단해 보이는 파이 차트부터 제작을 했다. 아직 기사 원고를 공유받지 못해서 기사의 내용은 정확하게 모르는 상황이었지만, 이전 기사의 내용을 고려하면 12일 전후로 김건희가 얼마나 많이 매수했는지 보여줄 필요가 있다고 생각했다.
그래픽 3은 날짜별 도이치모터스 주식 거래량을 보여주고, 그래픽 2는 특정 날짜의 김건희의 거래 비중을 보여준다. 날짜별로 김건희의 주식 거래 비중을 보여준다면, 그래픽 하나로 강조하고 싶은 내용을 충분히 전달할 수 있을 것 같았다. 기사를 쓴 인보 선배한테 연락해서, 13일의 김건희 주식 거래 비중까지 확인해서 누적 막대 차트로 다시 그려봤다.
물론 위와 같은 누적 막대 차트를 그리는 것이 항상 정답은 아니다. 기사에서 강조하는 바가 다르다면, 파이 차트와 막대 차트를 각각 사용할 수도 있다. 다만 이번 기사에서는 위와 같은 누적 막대 차트 하나를 활용하는 것이 내용을 강조하기에 적합했다.
이렇게 의뢰서에 있는 그래픽 2와 그래픽 3은 해결했고, 다음은 그래픽 1을 제작할 차례다. 의뢰서를 처음 봤을 땐 이 그래픽이 제일 난감했다.
2010년 1월 12일
김건희 여사 매수 주문 가격
10시 6분 2,375원 / 11시 16분 2,400원 / 12시 3분 2,445원
13시 30분 2,475원 / 14시 01분 2,495원 / 14시 50분 2,550원
매수 주문 가격이 상승하는 것을 보여줘야 하는데, 라인 그래프로 그리면 시간 간격이 일정하지 않아서 뭔가 어색할 것 같고, 표로 그리기엔 가격 상승세가 잘 보이지 않을 것 같고...
라인 그래프로 그려봤더니 상승세는 보이지만 뭔가 어색했다. 하지만 데이터가 틀린 것은 아니고... 나름의 해결 방안으로 도이치모터스 당시 주가를 같이 그려보기로 했다.
[한국거래소 > 정보데이터시스템]에서 '도이치모터스'를 검색하고, [빅차트]를 클릭해서 2010년 1월 12일 일자의 주가를 조회했다.
주가 데이터를 더 쉽게 구하는 방법도 있겠지만, 일단 나는 개발자도구의 Network 탭에서 json형태의 주가 데이터를 발견했다. Rstudio에서 json을 데이터프레임으로 변환하고, 김건희 매수 주문 가격 데이터와 동시에 그려봤다. (속보라니까 마음이 급해서 일러스트레이터 작업도 끝냈다.)
기사를 작성한 인보 선배가 바쁜 일정들을 다 끝내신 후에, 드디어 연락이 닿았다. 위의 누적 막대 차트는 너무 좋은데, 위의 라인 그래프는 김건희가 매수 주문을 6번만 한 것처럼 보인다고 하셨다. 김건희는 실제로 도이치모터스 주식을 12일 하루 동안 80회 정도 구매했고, 인보 선배는 그래픽 의뢰할 때 주요 매수 시점 6회만 언급한 것이었다. 또한 위 그래프에서 마지막 주문 가격이 2,550원인데 도이치모터스 종가는 2,510원이라서 어색해 보이는 것은 주문 가격과 체결 가격의 차이 때문이었다.
다시, 데이터 원본을 받아서 체결가 기준으로 그려보기로 했다. 선배는 체결시간, 체결가, 거래량 등이 들어있는 데이터를 주셨다. 차트를 만드는 코드를 미리 짜둔 덕분에 금방 만들어서 드린다고 했다. 정제하기에 큰 어려움 없는 데이터라서 빠르게 작업할 수 있었다.
또한 인보 선배는 체결량도 동시에 보여주면 좋겠다고 제안하셨다. 한국거래소의 [빅차트]에서 주가와 거래량 차트를 위아래로 나란히 배치한 방식을 참고했다. 차트에서 강조색으로 붉은색을 사용했는데, 인보 선배가 기사에서 내용 설명을 위해 거래량 데이터는 다른 색으로 표현해달라고 하셔서 거래량 차트에는 푸른색을 사용했다.
나란히 배치하긴 했지만 시간 단위는 살짝 달랐다. 예를 들어 주식 매수는 10시 6분 15초와 10시 6분 58초 등 초단위로 다른 거래가 체결됐다. 매수 체결을 시각화할 때는 초단위로 점을 찍었다. 반면에 거래량도 막대를 그리게 되면 막대가 너무 가늘어져서 그래프를 읽기 어려워질 것 같았다. 따라서 거래량은 분단위로 데이터를 정리해서 시각화했다. 2개의 그래프는 ggplot의 ggsave 함수를 이용해서 필요한 크기로 설정해서 출력하니, 일러스트레이터에서 마무리 작업을 수월하게 할 수 있었다.
그런데 끝이 아니었다. 만들어야 할 그래픽이 하나 더 생겼다. 아래 부분을 설명하는 그래픽이 필요하다고 하셨다. 차트 제목은 김건희 계좌 거래 중 시세조정성 거래 비율이다.
김건희 여사가 1월 12일에 직접 거래한 도이치모터스 주식 155,760주 가운데 검찰의 공소장 범죄 일람표에 포함된 거래는 모두 91,948주로 시세조종성 거래의 비율은 59.03%에 달한다. 참고로 김건희 여사가 직접 승인한 1월 13일의 거래 가운데 시세조종성 거래의 비율은 48.1%다.
인보 선배는 파이 차트 두 개를 그리는 아이디어를 내셨다.
이렇게 파이 차트 두 개를 나란히 배치해서 만들 수도 있겠지만, 최선은 아니라고 생각했다. 우선 1월 12일에 김건희는 약 15만 주를, 13일에는 10만 주를 거래했다. 두 날짜의 거래량이 1.5배 차이 난다. 위의 모습처럼 파이 차트를 그리면 날짜별 거래량 차이를 보여줄 수 없다. 12일의 59%와 13일의 48%를 거래량 기준으로 비교하면 91,948주와 48,100주로 2배 가까이 차이가 난다. 날짜별 거래량의 차이와 시세조종성 거래의 비율을 동시에 보여줄 수 있는 방법이 있을까? 이번에도 누적 막대 차트를 활용했다. 더 좋은 방법이 있을 수도 있지만, 내가 이때 생각한 최선은 누적 막대 차트였다.
시세조종성 거래의 비율은 텍스트로 강조해서 적었다. 색상은 기본적으로 붉은색을 사용했다. 시세조종성 거래가 아닌 경우, 비교적 옅은 색을 사용했다.
누적 막대 차트는 스프레드시트로, 체결 시간과 체결량을 보여주는 라인 차트와 막대 차트는 R로 그렸다. 내가 최대한 빠르고 편하게 차트를 만들 수 있는 툴을 활용했다. 이전에도 다른 팀 선배들의 웹기사 그래픽을 제작할 때도 R을 이용해서 차트를 만들곤 했다. 간혹 코드를 짜는 시간이 좀 오래 걸릴 때는 자기만족을 위해 R을 쓰는 것은 아닐까 하는 생각이 들기도 했다. 하지만 이번 차트를 만들 땐, R로 코드를 짜둔 덕분에 작업을 수월하게 할 수 있었다. 코드를 재활용하는 가치를 간만에 실감했다. 또한 체결 시간을 시각화할 때 도이치모터스 주가 데이터를 겹쳐서 그리려면 R을 활용하는 것이 훨씬 편리했다.
내가 짜둔 차트 코드들이 점점 쌓이기도 하고, 이전보다 차트를 제작할 때 고민하는 시간이 줄어든 덕분에 이번 속보에서 내 역할을 무사히 해낸 듯하다. 그래도 나중에 보면 볼수록 아쉬운 구석이 보이겠지만.