废话不说先上图:
下图展示的是从2005.10.3-2006.9.29一年间50只股票的每日价格变动图。每一行代表一只股票的价格变动。
2005.10.3-2006.9.29一年间50只股票的每日价格变动下图是美国四个主要宏观经济指标的变化图,分别是国民失业率、制造商新订单、消费者信心指数和新房屋销售额。
美国四个主要宏观经济指标时间变化图是不是感觉很美,承载着许多信息解读却无从下手。不急,数据可视化的魅力就在于此,了解它,你就会发现在数据分析的路上又打开一扇窗户。
这些图被称作水平线图(horizon graph),在做多重时间序列分析(包括股票、产品销售、宏观经济研究等)时,需要考虑指标的时序性,相比较于Granger因果检验动态回归,水平线图监测到的领先指标的速度远远快于用统计方法揭示的结果,同时还极大减少了显示多重时间序列所需要的空间。除此之外,它们还有以下作用[3]:
1. 找出时间序列中的异常行为和主要的模式
2. 可以单独看每一组项目的变化趋势
3. 任意项目间对比解释
关于水平线图的解读,网上没有找到太多的相关信息。Stephen Few曾撰写过一篇文章,基于上面展示的50只股票股价走势图,对水平线图的产出做了一个简要的概述。下面是对它的简单称述,让大家能够在看图说话时心中有数。
1. 先做单一项目的时间序列,并确定一个中心值或定位原点划水平基准线贯穿整个时间序列。
2. 利用颜色的变化来让模式和异常行为显现出来。上升和下降分别用不同的颜色充填。同时,利用颜色的深浅表明上升或下降的幅度(通常来说,颜色越深变化幅度越大),并且将连续的颜色渐变离散化,根据项目的多少来确定离散色带多少(项目多,色带相对少),这样可以更快的区分出极值,关于离散色带取多少,Heer、Kong和Aggrawala(2009)曾有专门研究,附件可参考。
3. 将值的上升和下降显示在水平参考线的一边。这样虽然让下降趋势不直观,但是可以让更多的项目可以在垂向上对比。显然这个trade-off是否值得是可以依据实际情况来判断的。
4. 进一步将色带在更小的范围展示,达到最大化节约空间的目的。
整个过程可以如下图(援引自参考文献[1]):
源自 Heer、Kong和Aggrawala(2009) 的文献实现
R有两个包可以实现该功能,分别是latticeExtra的horizonplot()或是ggTimeSeries的ggplot_horizon()。其中,horizonplot()是需要time series的panel data,ggTimeSeries的input时data.frame
R实现方法当然,在科学上网的过程中,也发现某前端大神做出了d3版的水平线图 d3实现horizon graphs,功力目前有限,希望有朝一日能进阶。
参考资料:
[1]http://vis.berkeley.edu/papers/horizon/
[2]https://stackoverflow.com/questions/38022609/create-horizon-plot
[3]Stephen Few (2008). Time on the Horizon. Visual Business Intelligence Newsletter, June/July 2008
如有问题,欢迎随时交流。
微信:shxpdfl
网友评论