背景介绍
一些多轮迭代的程序,像机器学习程序等等,它会在运行时会打出很多状态信息,我们通过分析打印出来的log,判断程序的性能指标。然而,由于log数据太多,信息太大,靠眼睛看往往很难掌握系统的状态变化情况,如每轮迭代的输出是如何随迭代次数变化的,各轮迭代的时间变化等等。
要是能把这些状态信息打印出来,用图形显示,这会大大的减少痛苦!!breeze-viz就是用来干这件事的。
您可能会问,为什么不适用MATLAB等比较专业的绘图软件来绘图呢?这是因为我们要做的工作是集文本处理和数据绘图于一体。专业绘图软件适合于使用向量、矩阵等数据结构绘图,然而,我们面对的是如自然语言一样的log文本。在自然语言处理方面,Scala、Python等现在语言使用十分方便。若您是搞Spark,使用Scala再合适不过了!!
breeze-viz介绍
breeze-viz是git开源项目scalanlp/breeze的一部分,它能在java/scala语言环境绘制x-y点图,统计图,二维矩阵灰度图。breeze项目现在用途很广泛,Spark MLlib很多机器学习算法建立在breeze之上。breeze中最主要的是它的breeze数学库,包括向量、矩阵等基本数据结构,各种数学函数、分布,数学常用算法等等。
现在我们介绍viz能够绘制的3类图形
点、线图
它用2个breeze vector变量分别表示横坐标点和竖坐标点,在x-y轴上绘制出点。同一图上可同时绘制 . + - 3种形状的点,用以对比不同竖坐标数据。
统计图
它可以将离散数据集中的数据分布在每个区间里的个数统计出来,表示一种区间统计信息。viz用scala Array存储数据,通过指定区间个数和数据的跨度自动划分区间长度。
二维矩阵图
它能将矩阵里面的数据按值的相对大小以灰度形式显示,上图便是元素随机赋值的矩阵的表示效果,是不是特别像80年度信号不好的黑白电视。
项目搭建
一般听到项目搭建就会头大,其实viz的搭建很简单,就是下载一些必备的jar包。
https://github.com/scalanlp/breeze-viz 是breeze-viz的项目地址, 它依赖breeze库等其他的许多项目,编译起来有点儿复杂,因而,我们下载jar包来搭建我们自己的绘图程序。
http://mvnrepository.com/ maven仓库网址,它是全天下各种jar包依赖存储和管理的地方 ,我们的jar都在这里下载
http://mvnrepository.com/artifact/org.scalanlp/breeze-viz_2.10/0.12 这是breeze-viz jar包下载的地方,breeze-viz_2.10/0.12适配scala 2.10,推荐scala 2.10.4
http://pan.baidu.com/s/1i4cZis9 如果你懒得自己找jar包,这里是已经下载好了的jar包,适配scala 2.10
https://github.com/tanglizhe1105/BreezeDrawing 这里的GitHUB上已经打好的项目
breeze-viz
我们下载breeze-viz jar包后还有下载它的全部Compile Dependencies(scala runtime/compiler除外),就在maven breeze-viz网页下面,因为运行的时候需要这些jar Dependencies。
breeze
breeze本身就是breeze-viz的Compile Dependencies之一,然而它自己过于强大,也依赖一些其他的项目如:shapeless_2.11、breeze-macros_2.11、spire_2.11等等。
当然,缺失什么依赖运行程序是会包报告的,如:
Error:scalac: error while loading DenseVector, Missing dependency ‘bad symbolic reference. A signature in DenseVector.class refers to term macros
in package breeze which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling DenseVector.class.’, required by C:\Users\Administrator\IdeaProjects\Drawing\lib\breeze_2.10-0.12.jar(breeze/linalg/DenseVector.class)
缺失的便是macros,你就去breeze的Compile Dependencies里下载它的依赖macros。
下载其他依赖…
创建绘图工程
import我们下载的jar包,执行下面的Test程序,看看是不是有什么依赖缺失,缺失就把它下载。
运行Test程序,你就能看到breeze-viz介绍里面的绘图效果了。
大功告成!!
import breeze.linalg.{DenseMatrix => BDM, DenseVector => BDV, linspace}
import breeze.plot._
/**
* Created by Administrator on 2016/1/13.
*/
object Test {
def main(args: Array[String]) {
val a = new BDV[Int](1 to 3 toArray)
val b = new BDM[Int](3, 3, 1 to 9 toArray)
val f = Figure()
val p = f.subplot(0)
val x = linspace(0.0, 1.0)
p += plot(x, x :^ 2.0)
p += plot(x, x :^ 3.0, '.')
p.xlabel = "x axis"
p.ylabel = "y axis"
f.saveas("d:\\lines.png")
val p2 = f.subplot(2, 1, 1)
val g = breeze.stats.distributions.Gaussian(0, 1)
p2 += hist(g.sample(100000), 1000)
p2.title = "A normal distribution"
f.saveas("d:\\subplots.png")
val f2 = Figure()
f2.subplot(0) += image(BDM.rand(200, 200))
f2.saveas("d:\\image.png")
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
一些样例
作者介绍
唐黎哲,国防科学技术大学 并行与分布式计算国家重点实验室(PDL)硕士,从事spark、图计算、LDA(主题分类)研究,欢迎交流,请多指教。
邮箱:tanglizhe1105@qq.com