0
点赞
收藏
分享

微信扫一扫

R语言对git安卓包分类统计、聚类、复杂网络可视化分析

半夜放水 2022-12-31 阅读 132

我们曾经为一位客户进行了短暂的咨询工作,他正在构建一个主要基于安卓包分类的分析应用程序。

数据源是安卓的项目,把同一类功能的安卓代码的头部,每一个文件都有import 包名。把所有import的包名都抓了下来存到了mysql, 这是数据源 , 需要用r分析这些包名。

用r给这些包做统计,同名的包有多少,占百分之多少,做可视化图,打标签。

这个项目的目的是,比如一类功能是发email的app,每一个项目里java文件头部都有引用的包名,通过把所有的包名一分析,发现80%的项目里面都有同一个包,那么就认为这个包的功能就是email , 然后再通过标签关联java文件 。

导入数据

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_数据

channel <- odbcConnect("test", uid="root", pwd="123");

sqlTables(channel);#查看数据中的表

data<-sqlFetch(channel,"test")# 查看表的内容,存到数据框里

画直方图显示词频重合率

#做出百分比统计直方图

barplot(table(data$package)/sum(table(data$package)))


# 一共多少包

unique(data$package)

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_包名_02

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_包名_03

删去没有重复的包

norepeat=which(table(data$package)==1)

data=data[-as.numeric(norepeat),]



for(i in names(table(data$package))[index][-1]){
#找出project名
data$project[data$package ==i]

变换数据

cordata2=matrix(0,length(unique(data$project)),length(unique(data$package)))
colnames(cordata2)=unique(data$package)
rownames(cordata2)=unique(data$project)

计算出重复率

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_数据_04

画网络图

这个是git上的项目,每一个点是一个项目,不同颜色表示不同语言,每个点之间有线连着,表示每个项目的联系,可能是关注人一样,也可能是作者一样 。当把包名打上标签后,有可能不同包名是一个标签,那么就可以画出这种联系图。

}
}
close(f)
cat(paste(c("Successfully output to ", getwd(), "/", filename, "/n"), collapse=""))
}

topajek(events, filename="mypajek.net")

对图进行删减,删去连接少的边

newe = censor.edgeweight(e, floor=0.5); newe

V(e)$color = rainbow(max(V(e)$sg),alpha=0.8)[V(e)$sg]
plot(newe,layout=layout.fruchterman.reingold, vertex.size=5,
vertex.color=V(e)$color, edge.width=1,edge.arrow.size=0.08,

用网络图可视化

所有数据:

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_聚类_05

以chat为基地:

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_聚类_06

以email为基地:

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_数据_07

Kmeans算法聚类

聚类数为3,将数据聚成3个类别

y$name1=as.numeric(y$name)

可视化聚类结果

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_数据_08

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_聚类_09

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_聚类_10

R语言对git安卓包分类统计、聚类、复杂网络可视化分析_聚类_11


举报

相关推荐

0 条评论