R
에는 다양한 웹의 데이터를 끌어와 분석을 할 수 있는 장점이 있다. 흥미롭게도 카카오톡의 홈페이지는 군더더기 없이 깔끔하게 웹 테이블을 구성해 놓고 있어 생각보다 빨리 시각화를 할 수 있었다.
군산에서 서울로 가는 무궁화호 기차 안에서 카카오톡 보이스톡 품질 관련 글을 읽고 생각이 나서 시각화 및 관련 글을 써봤다(애들이 좀 크니 예전처럼 기차에서 글을 보거나 블로깅을 하는것도 이젠 어느정도 가능해졌다.ㅋ).
suppressPackageStartupMessages({
library(XML)
library(data.table)
library(stringi)
library(lubridate)
library(ggvis)
library(ggplot2)
library(reshape2)
})
vtalks_raw <- readHTMLTable("http://www.kakao.com/services/talk/voices/data")
vtalks <- data.frame(data.table(vtalks_raw[[1]]))
accum <- data.frame(dt=c(), SKT=c(), KT=c(), LGU=c(),JAP=c(), US=c())
for(n in 1:nrow(vtalks)){
if(n %% 2 == 0){
accum <- rbind(accum, data.frame(dt=vtalks[n-1,]$V1, SKT=vtalks[n,]$V2, KT=vtalks[n,]$SKT,
LGU=vtalks[n,]$KT, JAP=vtalks[n,]$`LGU.`, US=vtalks[n,]$`Japan`))
}
}
dt_vtalks <- data.frame(
apply(accum, 2, function(x){
stri_trim_both(stri_replace_all_regex(x, "[ |%]",""))})
)
y <- year(Sys.Date())
chgdt <- function(dt){
ret <- paste0(dt,"/", y)
if('01/Jan' == dt){
y <<- y - 1
}
ret
}
dt_vtalks <- within(dt_vtalks, {
SKT<-as.numeric(as.character(SKT))
KT<-as.numeric(as.character(KT))
LGU<-as.numeric(as.character(LGU))
JAP<-as.numeric(as.character(JAP))
US<-as.numeric(as.character(US))
ymd<-dmy(sapply(dt, chgdt))
})
dt_vtalks_melts <- melt(dt_vtalks, id.vars = "ymd",measure.vars = c("SKT", "KT", "LGU", "JAP", "US"),
variable.name="service_provider",value.name = "loss_rate")
ggplot(dt_vtalks_melts, aes(ymd, loss_rate, colour=service_provider)) + geom_line() +
ggtitle("2012 ~ now")
ggplot(with(dt_vtalks_melts, dt_vtalks_melts[ymd >= ymd('2014-01-01'),]), aes(ymd, loss_rate, colour=service_provider)) + geom_line() +
ggtitle("2014 >= ")
웹에 있는 테이블을 가져와서 몇몇 전처리 이후 간단하게 시각화를 해보았다. 시각화 결과를 보면 통신 3사가 과거에 어느정도 제한을 걸다가 현재는 거의 mVoIP제한을 하지 않는 것과 같은 양상을 보이고 있다는 것을 볼 수 있다. 물론 이 결과는 앞으로 장기적으로 지켜봐야 될 거란 생각을 해본다.
카카오톡이 2012년 부터 손실율을 기록해 놓고 오픈해놓은 이유는 mVoIP 업체 입장에서 충분히 이해가 가나, 이 손실율이 어떤 방식으로 계산되는지 metric에 대한 부가 설명과 메타 데이터가 없다는 건 다소 실망스럽다. 물론 일반 사용자들에게 가장 쉽게 다가갈 수 있는 정보표현이라는데는 이견이 없으나 어짜피 모집단에 대한 샘플링 결과일 것이기 때문에 추정 평균값과 신뢰구간, 샘플링 방법과 같은 흡사 여론조사를 공표하는 정도의 신중함이 필요하지 않을까 하는 생각을 해본다. 왜냐면 이런 단편적인 정보는 사용자가 오해를 할 수 있는 부분이 충분히 있고, 이런 오해가 특정 회사 서비스 전체에 대한 오해/불신으로 이어질 수 있기 때문이다. 예를 들어 SKT의 손실율의 $\mu \pm 2\sigma$구간이 0을 포함하고 있었다면 과연 위에서 보고 있는 손실율이 의미가 있을까? 그리고 이런 결과를 기반으로 타사들과 절대 비교 및 기상도처럼 표현하는게 맞을까 하는건 생각해볼 문제이다.
그러나 그럼에도 불구하고 이런 좋은 포맷으로 오픈된 데이터는 필자와 같은 데이터 저널리즘을 신봉하는 입장에서는 재밋는 장난감과 같은 존재여서 여간 반가운 일이 아닐 수 없다. 사실 위 시각화보다 더 많은 분석을 해보았으나 제한된 데이터로 과도한 해석을 하지 않기 위해 이곳에 올리지는 않겠다.
카카오톡 보이스톡 데이터 시각화 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.