标签: sna

下标超出界限 - 一般定义和解决方案?

经常使用RI时,会收到错误消息"下标超出范围".例如:

# Load necessary libraries and data
library(igraph)
library(NetData)
data(kracknets, package = "NetData")

# Reduce dataset to nonzero edges
krack_full_nonzero_edges <- subset(krack_full_data_frame, (advice_tie > 0 | friendship_tie > 0 | reports_to_tie > 0))

# convert to graph data farme 
krack_full <- graph.data.frame(krack_full_nonzero_edges) 

# Set vertex attributes
for (i in V(krack_full)) {
    for (j in names(attributes)) {
        krack_full <- set.vertex.attribute(krack_full, j, index=i, attributes[i+1,j])
    }
}

# Calculate reachability for each vertix
reachability <- function(g, m) {
    reach_mat = matrix(nrow …
Run Code Online (Sandbox Code Playgroud)

r matrix sna

48
推荐指数
2
解决办法
36万
查看次数

如何从边缘列表创建加权邻接列表/矩阵?

我的问题很简单:我需要从边列表中创建一个邻接列表/矩阵.

我有一个边缘列表存储在csv文档中,其中column1 = node1和column2 = node2,我想将其转换为加权邻接列表或加权邻接矩阵.

更确切地说,这是数据的样子 - 数字只是节点ID:

node1,node2
551,548
510,512
548,553
505,504
510,512
552,543
512,510
512,510
551,548
548,543
543,547
543,548
548,543
548,542
Run Code Online (Sandbox Code Playgroud)

有关如何实现从此转换为加权邻接列表/矩阵的任何提示?这就是我以前决定这样做的方法,但没有成功(由Dai Shizuka提供):

dat=read.csv(file.choose(),header=TRUE) # choose an edgelist in .csv file format
el=as.matrix(dat) # coerces the data into a two-column matrix format that igraph likes
el[,1]=as.character(el[,1])
el[,2]=as.character(el[,2])
g=graph.edgelist(el,directed=FALSE) # turns the edgelist into a 'graph object'
Run Code Online (Sandbox Code Playgroud)

谢谢!

r adjacency-list igraph adjacency-matrix sna

11
推荐指数
3
解决办法
3万
查看次数

使用InfoMap算法进行社区检测,生成一个大型模块

我正在使用igraph包中的InfoMap算法在有向和非加权图(34943顶点,206366边)上执行社区检测.在图中,顶点表示网站,边表示网站之间存在超链接.

我在运行算法后遇到的一个问题是,大多数顶点都具有单个大型社区的成员资格(32920或94%).其余的顶点分散在数百个其他小型社区中.

我已经尝试了不同的nb.trials参数设置(即50,100,现在运行500).但是,这似乎并未改变结果.

我感到相当恼怒,因为算法的运行时间非常高,所以我每次都要等待结果(没有运气!!).

非常感谢.

r igraph sna

8
推荐指数
2
解决办法
5802
查看次数

Python 2.7 NetworkX(使其具有交互性)

我是NetworkX的新手.现在,我设法将所有节点连接到此特定节点.我接下来要做的是使它具有交互性,例如能够通过使用光标拖动来使每个节点移动.我知道我必须使用matplotlib,但我不知道如何使用它.谁能帮我?

在此输入图像描述

我的代码是:

import matplotlib.pyplot as plt
import networkx as nx
import itertools

d = [name of nodes]
f = [number per nodes]

for i in d:
  G.add_edge('"' + i + '"',b)

pos=nx.fruchterman_reingold_layout(G, k=0.5, iterations=5)

nx.draw_networkx_nodes(G,pos,node_size=130, node_color="white")

nx.draw_networkx_edges(G,pos, width=0.2,alpha=1,edge_color='black')

nx.draw_networkx_labels(G,pos,font_size=7,font_family='sans-serif')

for i,j in itertools.izip(d,f):
    nx.draw_networkx_edge_labels(G,pos, {('"' + i + '"',b):j}, font_size=7, label_pos= 0.80)

plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib networkx python-2.7 sna

7
推荐指数
1
解决办法
4749
查看次数

如何使用igraph或tnet在R中创建二分网络

我有一个双模网络的边缘列表,类似于:

person  Event
Amy     football_game
Sam     picnic
Bob     art_show
Run Code Online (Sandbox Code Playgroud)

我想在R中对此进行分析,但看起来我尝试的一切都失败了.将其转换为单模式网络会遇到内存限制,我无法弄清楚如何在igraph或tnet中将其分析为二分.

在igraph中,bipartite.projection给我所有FALSE,在使用的igraph对象上

net <- graph.edgelist(myobject)
Run Code Online (Sandbox Code Playgroud)

在tnet上,我无法将igraph网转换为tnet网,当我尝试使用原始数据框时,它会因图中的重复而拒绝.

因此,以下任何一个的答案将非常感激:

  1. 我该如何使用该bipartite.mapping功能?
  2. 如何将igraph对象输入tnet?
  3. 如果所有其他方法都失败了,我该如何输入带有重复边的数据框到tnet?

很抱歉,如果这些是基本问题,但文档很少.

编辑

例:

edgelist <- read.table(text="Person    Event
                             Amy       football
                             Bob       picnic
                             Sam       artshow", 
                       header=TRUE)
edgelist <- as.matrix(edgelist)

## Igraph Issues
igraph <- graph.edgelist(edgelist)
typevector <- bipartite.projection(igraph) 
# gets all FALSE

edgelist2 <- get.edgelist(igraph)
typevector <- bipartite.projection(edgelist2) 
# same thing

## tnet issues
tnet <- as.tnet(edgelist) 
# gives error: "There are duplicate events in the edgelist" …
Run Code Online (Sandbox Code Playgroud)

r igraph sna

6
推荐指数
1
解决办法
1万
查看次数

根据r中的属性条件删除顶点

我正在使用一个有121个顶点和209个边的图,我试图从这个图中删除满足两个条件的顶点:

  1. degree(my.graph)==0
  2. 顶点的名称以指定的字符开头.

这是一个显示我想要的内容的示例.从下图:

toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587, 490, 588)
Run Code Online (Sandbox Code Playgroud)

我想删除以0开头的度数为0的顶点.在这种情况下,我想只删除顶点588(但不是490和587).我知道如何从5开始删除顶点:

delete.vertices(toy.graph,V(toy.graph)$name 
                %in% grep("^5",V(toy.graph)$name,value=T))
Run Code Online (Sandbox Code Playgroud)

以及如何删除0度的顶点:

delete.vertices(toy.graph, V(toy.graph)[degree(toy.graph)==0])
Run Code Online (Sandbox Code Playgroud)

但是当我试图将这两个条件放在一起时,就是这样

delete.vertices(toy.graph, V(toy.graph)$name %in%     
                grep("^5",V(toy.graph)$name,value=T) 
                && V(toy.graph)[degree(toy.graph)==0])
Run Code Online (Sandbox Code Playgroud)

它不起作用,我得到了完整的图表.是否有一种特殊的方法来组合多个条件来删除顶点?

谢谢!

r igraph sna

6
推荐指数
1
解决办法
4223
查看次数

如何在 igraph 中设置 Louvain 模块化的分辨率参数?

有没有办法在使用函数cluster_louvain检测igraph中的 R社区时设置分辨率参数?它对结果有很大影响,因为该参数与节点之间的层次差异有关。谢谢你。

r social-networking igraph sna

6
推荐指数
1
解决办法
1044
查看次数

迭代顶点并根据邻居的属性计算新属性的快速方法

我正在做一个简单的任务:迭代所有顶点并根据其邻居的属性计算新属性。我搜索了 SO,到目前为止我知道至少有三种方法可以做到这一点:

  1. 使用 ad_adj_list 创建一个 adj 列表,然后迭代每个元素;
  2. 使用 sapply 直接迭代每个顶点。

然而,对于我的数据量(30 万个顶点和 800 万条边)来说,这两种方法都花费太长的时间。有没有快速循环顶点的方法?谢谢!

对于基准测试,假设我有以下示例数据:

set.seed <- 42
g <- sample_gnp(10000, 0.1)
V(g)$name <- seq_len(gorder(g)) # add a name attribute for data.table merge
V(g)$attr <- rnorm(gorder(g))
V(g)$mean <- 0 # "mean" is the attribute I want to compute
Run Code Online (Sandbox Code Playgroud)

方法1的代码是:

al <- as_adj_list(g)
attr <- V(g)$attr
V(g)$mean <- sapply(al, function(x) mean(attr[x])) 
# took 28s
# most of the time is spent on creating the adj list
Run Code Online (Sandbox Code Playgroud)

方法2的代码是:

compute_mean <- function(v){
    mean(neighbors(g, …
Run Code Online (Sandbox Code Playgroud)

r igraph sna

5
推荐指数
1
解决办法
1086
查看次数

在 R 中总结大图中邻居属性的快速方法

我有一个大型 igraph 对象,几乎有 1M 个节点和 150 万条边。经过一段时间的研究后,我找不到一个对节点的邻居属性求和的过程,在这种情况下,它是一个二进制的。目前,我找到的最佳解决方案如下:

\n\n
V(g)$sum = sapply( ego(g,1,V(g),mode = \'all\',mindist = 1), function(v) sum(V(G)[v]$attr) )\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,12 小时后,它仍然嘎吱作响。

\n\n

有什么建议么?

\n\n

更新 1:让我们考虑下图

\n\n
library(igraph)\nG <- graph.formula(1-+2,1-+3,2-+4,2-+5,3-+6,5-+7,7-+8,8-+9,9+-7, 9-+10,\n               6-+9,1-+5,3-+9,10-+11,11-+12,11-+5,12-+4,4-+10,10-+4,11-+10)\nV(G)$attr = c(1,1,0,0,1,0,1,0,1,0,1,0)\nplot(G, vertex.label.color = "white",  edge.width=E(G)$weight, layout = layout.circle(G))\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

而期望的结果应该是这样的......

\n\n
 sapply( ego(G,1,V(G),mode = \'all\',mindist = 1), function(v) sum(V(G)[v]$attr) )\n [1] 2 2 2 1 4 1 2 2 1 2 1 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

@Tam\xc3\xa1s,我尝试在不使用循环的情况下访问邻居函数,但我得到的不是上面描述的结果......

\n\n
sapply(neighbors(G,V(G)),function (v) sum(V(G)[v]$attr))\n2 3 5 \n1 0 1 …
Run Code Online (Sandbox Code Playgroud)

r large-data igraph sna

5
推荐指数
1
解决办法
1273
查看次数

为图分配随机边权重

我想在 R 中创建一个随机加权有向图。我使用erdos.renyi.game创建一个随机有向图,但我不确定如何为已建立的连接创建权重:

library(igraph)
g01 <- erdos.renyi.game(25, 1/10, directed = TRUE)
Run Code Online (Sandbox Code Playgroud)

我如何对其进行加权?

r igraph sna

4
推荐指数
1
解决办法
1836
查看次数