数据时代,经常需要将多种时序数据指标放在一起进行分析,但各个数据指标量级不一致,不方便放在一张趋势图中进行分析,解决方法是把各个指标数据归一化,对于时序数据[x1, x2...xn],可以使用归一化规则为xn = xn*100/avg(x)。
之前在某社交网络公司,对于feed流,需要对pv, click, reply, share, like等指标进行趋势分析,使用的解决方案是使用python连mysql获取数据并进行归一化运算,然后使用chartDirector图形库进行可视化展现。最终结果可视化展示结果如下:
利用R同样可以实现类似功能,代码如下:
xlab = "日期"; ylab = "pv click趋势"; main = "页面pv click周趋势图"; lty = c("dotted", "solid"); col=c("blue", "red"); data_desc = c("pv", "click"); pv=c(18000, 19000, 17000, 16000, 13000, 15000, 17000); click=c(144, 190, 150, 170, 133, 145, 189); dates = as.Date(c("2014-03-17", "2014-03-18", "2014-03-19", "2014-03-20", "2014-03-21", "2014-03-22", "2014-03-23")); #data <- read.delim("clipboard"); #pv=data[['pv']]; #click=data[['click']]; #dates = as.Date(data[['date']]); pv_trend = pv*100/mean(pv); click_trend = click*100/mean(click); max_value = max(pv_trend, click_trend); min_value = min(pv_trend, click_trend); ylim = c(min_value-20, max_value+40); trend_data = data.frame(pv=pv_trend, click=click_trend); trend = zoo(trend_data, dates); plot(trend, screen=1, lty=lty, main=main, ylim=ylim, xlab=xlab, col=col, ylab=ylab); legend(dates[1], max_value+40, data_desc, lty=lty, col=col);
效果如下: