我正在研究网络中的检测社区.
我用的是igraph和Python
对于模块化度量方面的最佳社区数量:
from igraph import *
karate = Nexus.get("karate")
cl = karate.community_fastgreedy()
cl.as_clustering().membership
Run Code Online (Sandbox Code Playgroud)
为供应所需数量的社区:
from igraph import *
karate = Nexus.get("karate")
cl = karate.community_fastgreedy()
k=2
cl.as_clustering(k).membership
Run Code Online (Sandbox Code Playgroud)
但是,我喜欢使用networkx这样做.我知道在模块化度量方面获得最佳社区数量:
import community # --> http://perso.crans.org/aynaud/communities/
import fastcommunity as fg # --> https://networkx.lanl.gov/trac/ticket/245
import networkx as nx
g = nx.karate_club_graph()
partition = community.best_partition(g)
print "Louvain Modularity: ", community.modularity(partition, g)
print "Louvain Partition: ", partition
cl = fg.communityStructureNewman(g)
print "Fastgreed Modularity: ", cl[0]
print "Fastgreed Partition: ", cl[1]
Run Code Online (Sandbox Code Playgroud)
但我无法获得所需数量的社区.使用Networkx有一些算法吗?
我有一个相对较大的顶点图:524边:1125,是真实世界的交易.边缘是直的并且具有重量(包含是可选的).我正在尝试调查图中的各个社区,并且基本上需要一种方法:
- 计算所有可能的社区
- 计算最佳社区数量
- 返回每个(最佳)社区的成员/成员数量
到目前为止,我已经设法将以下代码汇总在一起,绘制了与各种社区相对应的颜色编码图,但是我不知道如何控制社区的数量(即绘制成员数最多的前5个社区)或列出特定社区的成员.
library(igraph)
edges <- read.csv('http://dl.dropbox.com/u/23776534/Facebook%20%5BEdges%5D.csv')
all<-graph.data.frame(edges)
summary(all)
all_eb <- edge.betweenness.community(all)
mods <- sapply(0:ecount(all), function(i) {
all2 <- delete.edges(all, all_eb$removed.edges[seq(length=i)])
cl <- clusters(all2)$membership
modularity(all, cl)
})
plot(mods, type="l")
all2<-delete.edges(all, all_eb$removed.edges[seq(length=which.max(mods)-1)])
V(all)$color=clusters(all2)$membership
all$layout <- layout.fruchterman.reingold(all,weight=V(all)$weigth)
plot(all, vertex.size=4, vertex.label=NA, vertex.frame.color="black", edge.color="grey",
edge.arrow.size=0.1,rescale=TRUE,vertex.label=NA, edge.width=.1,vertex.label.font=NA)
Run Code Online (Sandbox Code Playgroud)
因为边缘介于中间方法执行得很差,我再次使用walktrap方法尝试:
all_wt<- walktrap.community(all, steps=6,modularity=TRUE,labels=TRUE)
all_wt_memb <- community.to.membership(all, all_wt$merges, steps=which.max(all_wt$modularity)-1)
colbar <- rainbow(20)
col_wt<- colbar[all_wt_memb$membership+1]
l <- layout.fruchterman.reingold(all, niter=100)
plot(all, layout=l, vertex.size=3, vertex.color=col_wt, vertex.label=NA,edge.arrow.size=0.01,
main="Walktrap Method")
all_wt_memb$csize
[1] 176 13 204 24 9 263 …Run Code Online (Sandbox Code Playgroud) 我有一个庞大的路由器网络,所有路由器都在社区网络中互连.我试图通过不同的方式分析这个网络并获得有用的见解以及通过分析图表(使用gephi)来改进它的方法.所以我遇到了这个称为"模块化"的措施,其定义为:
衡量网络划分为模块(也称为组,集群或社区)的强度.具有高模块性的网络在模块内的节点之间具有密集连接,但是在不同模块中的节点之间具有稀疏连接.
我的问题是,通过使用"模块化"度量,我可以从网络中学到什么?例如,当我在gephi中使用它时,每个网段都会对网络进行着色,但它有什么用呢?
我正在尝试用Java实现上面的社区检测算法,虽然我可以访问C++代码和原始论文 - 但我根本无法使用它.我的主要问题是我不理解代码的目的 - 即算法如何工作.实际上,我的代码卡在似乎是无限循环的位置mergeBestQ,列表heap似乎在每次迭代时变得越来越大(正如我所期望的那样),但值topQ总是返回相同的值.
我正在测试它的图表相当大(300,000个节点,650,000个边缘).我用于实现的原始代码来自SNAP库(https://github.com/snap-stanford/snap/blob/master/snap-core/cmty.cpp).如果有人能够向我解释算法的直觉,那么最好将每个节点设置在自己的社区中,然后记录每对节点的模块性值(无论是什么).图,然后找到具有最高模块性的节点对并将它们移动到同一社区.另外,如果有人可以提供一些中级伪代码,那就太好了.这是我到目前为止的实现,为了简洁起见,我试图将它保存在一个文件中,但是CommunityGraph和CommunityNode在其他地方(不应该是必需的).图表维护所有节点的列表,每个节点维护其与其他节点的连接列表.在运行时它永远不会越过线while(this.mergeBestQ()){}
更新 - 在彻底审查后,在我的代码中发现了几个错误.代码现在很快完成,但没有完全实现该算法,例如图中的300,000个节点,它表示大约有299,000个社区(即每个社区大约有1个节点).我在下面列出了更新的代码./// Clauset-Newman-Moore社区检测方法.///每一步都会合并两个对全球模块化贡献最大正值的社区.///参见:在非常大的网络中查找社区结构,A. Clauset,MEJ Newman,C.Moore,2004公共类CNMMCommunityMetric实现CommunityMetric {私有静态类DoubleIntInt实现Comparable {public double val1; public int val2; public int val3; DoubleIntInt(double val1,int val2,int val3){this.val1 = val1; this.val2 = val2; this.val3 = val3; }
@Override
public int compareTo(DoubleIntInt o) {
//int this_sum = this.val2 + this.val3;
//int oth_sum = o.val2 + o.val3;
if(this.equals(o)){
return 0;
}
else if(val1 < o.val1 || (val1 == o.val1 && val2 < o.val2) || (val1 …Run Code Online (Sandbox Code Playgroud) 嗨,大家好:我对引导的理解就是你
1)使用来自序列矩阵的一些算法构建"树"(核苷酸,简单地说).2)你存储那棵树.3)从1开始扰动矩阵,并重建树.
我的问题是:从序列生物信息学的角度来看,3的目的是什么?我可以尝试"猜测",通过更改原始矩阵中的字符,您可以删除数据中的工件---但我有一个问题:我不确定为什么需要删除这些工件 - - 通过查找长度相似的长度来支持序列对齐处理工件......
好人 - 我需要一些帮助来找到创建交互式分支图或系统发育树的方法(是的,我已阅读所有相关帖子,但找不到我想要的内容).问题是,我需要节点可以命名.一个例子就是这样的
我发现的大多数脚本都是applet,flash,或者根本就没有显示节点分类,即在这个例子中它会跳过"feliformia".这对我来说没用,因为我最终会吃肉食 - 匿名节点 - 匿名节点 - 匿名节点 - 老虎,这并不好.
从理论上讲,这棵树将涵盖所有生命,因此它可以变得相当大,并从数据库中获取英语和拉丁语的链接和名称.
所以:没有闪光,没有小程序.它必须是水平的,没有超级树(圆形).我已经浏览了这个http://bioinfo.unice.fr/biodiv/Tree_editors.html, 但大多数似乎都是旧的,没有显示子节点级别,小程序或太复杂的方式.
我想这对canvas/jQuery来说是一个令人愉快的工作..?有可能,有人在我面前到达那里?
任何指针都非常赞赏.
注意:如果有人愿意做这样的项目,我会很乐意提供帮助,即使这对我的项目没有好处.这种类型的分类并不像看起来那么简单,我很高兴看到这种情况发生.
编辑:一年过去了; 我仍然认为这是一个非常有趣的问题.我已经离开了技术世界的一个咒语; 所以,如果有人发现了一个看起来很有希望进行大规模项目的东西......我全都耳朵.
我正在尝试使用ape包中的plot.phylo命令为R中的系统发育类型图的边(线)添加颜色.这个例子是针对"粉丝"类型的情节,虽然我希望这种方法与"phylogram类型"或其他类似.
library('ape')
hc <- hclust(dist(USArrests), "ave")
plot(as.phylo(hc), type="fan")
Run Code Online (Sandbox Code Playgroud)
使用tip.color选项与cutree命令相结合,基于一组组向提示(标签)添加颜色是没有问题的.
hc.cuts <- cutree(hc, k=5)
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
edge.color选项定义边缘的颜色,但在需要许多颜色时不以logincal方式定义.
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts], edge.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
但是,一旦树形图的分支指定给定的组,我希望边缘匹配终端尖端颜色.在给定的示例中,朝向红色和蓝色组,第一级边缘将保持黑色(因为它朝向两组:红色和蓝色),但是超出此范围的边缘将与最终的尖端颜色相同.
我怀疑关键在于弄清楚as.phylo对象中$ edge值的排序,但我自己无法想象.谢谢.
在这里,我有代码从newick格式绘制简单的系统发育树:
library(ape)
t<-read.tree(text="(F:4,( (D:2,E:2):1,(C:2,(B:1,A:1):1):1):1);")
plot(t,use.egde.length=TRUE)
Run Code Online (Sandbox Code Playgroud)
我想为海洋生物学课程制作一个简单的系统发育树作为教育的例子.我有一个具有分类等级的物种清单:
Group <- c("Benthos","Benthos","Benthos","Benthos","Benthos","Benthos","Zooplankton","Zooplankton","Zooplankton","Zooplankton",
"Zooplankton","Zooplankton","Fish","Fish","Fish","Fish","Fish","Fish","Phytoplankton","Phytoplankton","Phytoplankton","Phytoplankton")
Domain <- rep("Eukaryota", length(Group))
Kingdom <- c(rep("Animalia", 18), rep("Chromalveolata", 4))
Phylum <- c("Annelida","Annelida","Arthropoda","Arthropoda","Porifera","Sipunculida","Arthropoda","Arthropoda","Arthropoda",
"Arthropoda","Echinoidermata","Chorfata","Chordata","Chordata","Chordata","Chordata","Chordata","Chordata","Heterokontophyta",
"Heterokontophyta","Heterokontophyta","Dinoflagellata")
Class <- c("Polychaeta","Polychaeta","Malacostraca","Malacostraca","Demospongiae","NA","Malacostraca","Malacostraca",
"Malacostraca","Maxillopoda","Ophiuroidea","Actinopterygii","Chondrichthyes","Chondrichthyes","Chondrichthyes","Actinopterygii",
"Actinopterygii","Actinopterygii","Bacillariophyceae","Bacillariophyceae","Prymnesiophyceae","NA")
Order <- c("NA","NA","Amphipoda","Cumacea","NA","NA","Amphipoda","Decapoda","Euphausiacea","Calanioda","NA","Gadiformes",
"NA","NA","NA","NA","Gadiformes","Gadiformes","NA","NA","NA","NA")
Species <- c("Nephtys sp.","Nereis sp.","Gammarus sp.","Diastylis sp.","Axinella sp.","Ph. Sipunculida","Themisto abyssorum","Decapod larvae (Zoea)",
"Thysanoessa sp.","Centropages typicus","Ophiuroidea larvae","Gadus morhua eggs / larvae","Etmopterus spinax","Amblyraja radiata",
"Chimaera monstrosa","Clupea harengus","Melanogrammus aeglefinus","Gadus morhua","Thalassiosira sp.","Cylindrotheca closterium",
"Phaeocystis pouchetii","Ph. Dinoflagellata")
dat <- data.frame(Group, Domain, Kingdom, Phylum, Class, Order, Species)
dat
Run Code Online (Sandbox Code Playgroud)
我想获得树状图(聚类分析)并使用Domain作为第一个切割点,Kindom作为第二个切割点,Phylum作为第三个切割点,等等.缺失值应该被忽略(没有切割点,而是直线).组应该用作标签的着色类别.
我有点不确定如何从这个数据帧制作距离矩阵.R有很多系统发育树包,他们似乎想要新的数据/ DNA /其他高级信息.因此,对此的帮助将不胜感激.
modularity ×5
phylogeny ×5
r ×5
igraph ×3
algorithm ×2
dendrogram ×2
graph-theory ×2
c++ ×1
canvas ×1
dendextend ×1
family-tree ×1
gephi ×1
graph ×1
java ×1
javascript ×1
networkx ×1
python ×1
taxonomy ×1
tree ×1