我想使用条形图作为可视化,来描述每个日期运行多个应用程序之一的次数(为简单起见,将应用程序视为excel,word,powerpoint等。例如,on 3月15日,如果一个用户打开一次Excel,而Word两次打开,它将为Word显示两个高度,堆叠高度为一个excel等。
可视化显示一年的堆叠数据(365条),其中每个堆叠条对每个程序使用不同的颜色。有20个节目。数据堆叠 - 例如Word(如果描绘)总是在底部,然后是Excel等。
执行此操作的传统方法是使用外连接创建365行,以及20列(Word,Excel等),每天为每列创建一个整数值。这种技术有效,但对数据库计算密集(更不用说密集的SQL),我想知道是否有人知道处理这个问题的时间序列图表工具。 这是一个数据轮换问题:我想要按行提取数据,让图表产品组合条形图。它需要从数据中读取Data Series名称,并在遇到新值时创建新的Data Series。我实际上有数千个可能的程序,但每个图表不太可能需要描绘超过20个。
图表产品应该像这样工作: minDate = 20150101,maxDate = 20151231,interval = Day 然后数据是
20150315 "Word" 1
20150315 "Word" 1
20150315 "Excel" 1
20150316 "Powerpoint" 1
20150316 "Word" 1
或者,每行可以是每个程序每天的总数:
20150315 "Word" 2
20150315 "Excel" 1
20150316 "Powerpoint" 1
20150316 "Word" 1
我正在使用C3,带有火花和scala。我可以使用任何JavaScript库。
答案 0 :(得分:0)
您要问的是如何将数据从宽格式转换为长格式。在Spark中,您使用DataFrame.explode
。假设你有一些看起来像这样的东西:
+--------+----+-----+
| date|word|excel|
+--------+----+-----+
|20150101| 3| 4|
|20150102| 1| 2|
+--------+----+-----+
你可以用这个重塑它:
df.explode($"word", $"excel"){case row =>
Seq(("Word", row.getInt(0)), ("Excel", row.getInt(1)))
}.select($"date", $"_1" as "app", $"_2" as "count")
进入这个:
+--------+-----+-----+
| date| app|count|
+--------+-----+-----+
|20150101| word| 3|
|20150101|excel| 4|
|20150102| word| 1|
|20150102|excel| 2|
+--------+-----+-----+