我们曾经为一位客户进行了短暂的咨询工作,他正在构建一个主要基于安卓包分类的分析应用程序。
数据源是安卓的项目,把同一类功能的安卓代码的头部,每一个文件都有import 包名。
把所有import的包名都抓了下来存到了mysql, 这是数据源 , 需要用r分析这些包名。
×
1.节点:由于复杂网络是复杂系统的抽象,因此复杂网络中的节点对应为复杂系统中的一个个实体。
2.边:边是复杂网络中节点与节点之间的关系,即对应复杂系统中不同实体之间的联系。边可以有权重,表示联系的紧密程度。边也可以有方向,表示不同个体之间的单向或双向连接。
3.邻居节点:与节点v之间有边直接相连的所有节点即为节点v的邻居节点。
4.内部连接:假设节点v所在的社区为C,节点v与在社区C内部的v的邻居节点之间的连接称为内部连接。
5.外部连接:假设节点v所在的社区为C,节点v与在社区C外部的v的邻居节点之间的连接称为外部连接。
6.邻居社区:节点v的邻居节点所在的社区。
7.路径:两个节点i与j间的路径是由从节点i到j节点所需经过的边组成。路径长度即为所经过的边数。能使节点i到节点j联通的所有通路都是这两个节点之间的路径。
8.介数:介数分为点介数和边介数。点介数即为网络中经过某个节点的最短路径的数目占网络中所有最短路径数的比例。边介数即为网络中经过某条边的最短路径的数目占网络中所有最短路径数的比例。
9.度:网络中某个节点的度即为与该点相连的边的数目。由于在有些网络中边具有方向性,因此节点度在有向图中又分为:入度和出度。节点的入度即为以该点为终点的边的数目,节点的出度即为以该点为起点的边的数目。
10.度分布:在复杂网络中,节点的度分布即为各个节点度的分布情况。在复杂网络中节点的度分布具有幂律特性。
用r给这些包做统计,同名的包有多少,占百分之多少,做可视化图,打标签。
这个项目的目的是,比如一类功能是发email的app,每一个项目里java文件头部都有引用的包名,通过把所有的包名一分析,发现80%的项目里面都有同一个包,那么就认为这个包的功能就是email , 然后再通过标签关联java文件 。
导入数据
channel <- odbcConnect("test", uid="root", pwd="123");
sqlTables(channel);#查看数据中的表
data<-sqlFetch(channel,"test")# 查看表的内容,存到数据框里
可下载资源
视频
复杂网络分析CNA简介与R语言对婚礼数据聚类(社区检测)和可视化
视频
KMEANS均值聚类和层次聚类:R语言分析生活幸福质量系数可视化实例
画直方图显示词频重合率
#做出百分比统计直方图
barplot(table(data$package)/sum(table(data$package)))
# 一共多少包
unique(data$package)
删去没有重复的包
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)
计算出重复率
画网络图
这个是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,
Kmeans算法聚类
聚类数为3,将数据聚成3个类别
y$name1=as.numeric(y$name)
可视化聚类结果
用网络图可视化
所有数据:
以chat为基地:
以email为基地:
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!