对于操作系统性能用R进行聚类分析,并图形化

      采用聚类分析的办法对系统的性能进行可以为数据分析人员和系统管理员节省大量的时间,做一个简单的聚类分析和作图的实例,采用R语言进行编码(源码和数据源见下文)聚类分析的结果如图所示,很明显的可以通过颜色进行一眼看出那些部分可能系统负载过高。也许你会说我一眼通过图形的高低也能判定,但是如果数据的上限不是百分比怎么办,而是单纯的数据呢,很难通过肉眼就行明确的判定?聚类的方法则依旧可以对系统的运行进行分析,这里仅例举了cpu的使用情况,大家可以扩展到内存,I/O,网络等等。不同的聚类方法根据数据量的不同或者制定的类群数不同,得出聚类也略有不同。

#hclust脚本

#cluster数

k <- 3

#读取数据

hc <- read.table("c:/1.txt", header=TRUE)

#设定聚类方法,使用hclust函数里,提供了包括single(最短距离法),complete(最长距离法),average(群平均法),ward(离差平均法,欧式距离),也可以使用kmeans函数算法

cl <- hclust(dist(hc[2]),method="complete") 

#分割聚类数为k类,此处设定为3类

memb <- cutree(cl, k=k)

#可以输出图形到png,pdf或者emf文件,什么都不敢就是选择标准的屏幕输出

#png("c:/1.png",height=480,width=480)

#win.metafile(filename="c:/image_path/1.emf", width=7, heights=42)

#分割输出为上下两块,上面显示系统数据-时间的线性图,下面显示聚类结果,上下两块图形大小的比例为2:1

layout(matrix(1:2,2,1),heights = c(2,1))

plot(hc,xlab="", ylab="")

title("system usage clusting analysis", font.main=1, adj=0)

lines(hc)

#设定图形库

col <- colorRampPalette(c("green", "yellow", "red"), space = "Lab")

#设定为k类颜色渐变

colset <- col(k)

#palette为默认的颜色库,若设定了就是作图默认颜色更改了,下面的代码可以置为热点图的颜色分布

#palette <- colorRampPalette(heat.colors(10), space = "Lab") 

#颜色控制

#x置为性能原始数据

x <- hc[2]

#对应的聚类结果

x[2] <- memb

element <- memb

#构造转换表,因为聚类的结果分类往往不是不是按照数值的大小进行分类的,所以需要人工的进行干预结果

z <- unique(x[order(x[1]),][2])

z[2] <- c(1:k)

for (i in 1:(length(memb)))

{

for ( j in 1:k)

{

if ( z[j,1] == memb[i]){

         #element为根据数值大小人工排定后得到聚类结果

element[i] <- z[j,2]

}

}

}

barplot(memb,col=colset[element],xpd=FALSE, ylim=c(0:1),space=0, border=0, axes=0)

 

以下为测试文件的结果,time为系统记录的时间,value为cpu使用率

timevalue

06:20:4012

06:20:4114

06:20:4245

06:20:4335.4

06:20:4446

06:20:4548.6

06:20:4656

06:20:4757

06:20:4816.5

06:20:4925

06:20:5035

06:20:5145

06:20:5225

06:20:5345

06:20:5455

06:20:5575

06:20:5625

06:20:5789

06:20:5815

06:20:5944

06:21:0030

06:21:0167

06:21:0255

06:21:0399

06:21:0412

06:21:0545

06:21:0635.4

06:21:0746

06:21:0848.6

06:21:0956

06:21:1057

06:21:1116.5

06:21:1225

06:21:1335

06:21:1467

06:21:1587

06:21:1698

06:21:1755

06:21:1875

06:21:1925

06:21:2034

06:21:2115

06:21:2267

06:21:2376

06:21:2487

06:21:2555

以下为kmeans的代码

k <- 2
col <- colorRampPalette(c("green", "yellow", "red"), space = "Lab")
colset <- col(k)
hc <- read.table("c:/1.txt", header = TRUE)
cl <- kmeans(hc[2], k)
layout(matrix(1:2,2,1),heights = c(2,1))
plot(hc,xlab="", ylab="")
title("system usage clusting analysis", font.main=1, adj=0)
lines(hc)

#win.metafile(filename="c:/1.emf")
x <- hc[2]
x[2] <- cl$cluster
element <- cl$cluster
z <- unique(x[order(x[1]),][2])
z[2] <- c(1:k)
for (i in 1:(length(cl$cluster))){ for ( j in 1:k) { if ( z[j,1] == cl$cluster[i]) { element[i] <- z[j,2]} }}
barplot(cl$cluster,col=colset[element],xpd=FALSE, ylim=c(0:1), space=0, border=0, axes=0)

posted @ 2011-08-02 16:29  magicyang1987  阅读(869)  评论(1)    收藏  举报