如何使用 R (igraph) 或 python 对不同类型的不同节点集进行建模?
how to model different types of distinct set of nodes using R (igraph) or python?
我需要一些关于多列数据建模的帮助。我有 .csv 文件。我有一个边缘列表,列出了他们的年龄、性别、位置和所患疾病。我画了一个有病的人的二分图。我如何使用 igraph 读取二分图中的年龄、性别和位置?我试过下面的代码,但它只需要 2 列 csv 来绘制网络。谁能帮忙在这种情况下如何读取年龄、性别和位置等人员属性?
Person Diseases Age gender location
Person1 Asthma 25 Female Location1
Person2 Pneumonia 35 Male Location2
Person3 Typhoid 40 Male Location3
getwd()
datafile <- "/d.csv"
d_el <- read.csv(datafile)
d_el <- d_el[, 1:4 ]
head(d_el)
library(igraph)
g <- graph.data.frame(d_el, directed = FALSE)
plot(g, layout = pref.layout,
vertex.color="black"
)
我用过这行代码。有输出代表什么?
V(g)$Person<- d_el$Person
V(g)$location<- d_el$location
V(g)$location[which(V(g)$Person %in% neighbors(g, "TB"))]
首先,为了从边缘列表创建二分网络,igraph 读取前两列作为节点和事件,除非您另有说明。然后,您需要通过向属性 "type" 添加一个名称向量来告诉 igraph 网络是二分的。因此,要么指示包含节点和事件的列,要么对列重新排序,以便 "Person" 和 "Disease" 位于前两列中。
library(igraph)
d_el <- d_el[,c(1,4,2,3)] #Reorder columns
g <- graph.data.frame(d_el, directed = FALSE)
V(g)$type <- V(g)$name %in% d_el[,1]
g
#View the igraph object and you will see it say something like
#"IGRAPH DN-B" - the B shows it's bipartite
使用类似的语法添加属性:
V(g)$age <- d_el$Age
V(g)$gender <- d_el$Gender
要根据与 "Disease" 的从属关系获取节点集,请使用 neighbors
函数。根据邻居对属性进行子集获取属性信息:
neighbors(g, "Asthma") #Gets all the names of nodes affiliated with Asthma
V(g)$gender[which(V(g)$name == as_ids(neighbors(g, "Asthma")))]
#Gets the gender of all those with asthma
要提取可以表示为网络(绘制为网络等)的 igraph 对象,请使用 asthma <- make_ego_graph(g,1,"Asthma")
。
我需要一些关于多列数据建模的帮助。我有 .csv 文件。我有一个边缘列表,列出了他们的年龄、性别、位置和所患疾病。我画了一个有病的人的二分图。我如何使用 igraph 读取二分图中的年龄、性别和位置?我试过下面的代码,但它只需要 2 列 csv 来绘制网络。谁能帮忙在这种情况下如何读取年龄、性别和位置等人员属性?
Person Diseases Age gender location
Person1 Asthma 25 Female Location1
Person2 Pneumonia 35 Male Location2
Person3 Typhoid 40 Male Location3
getwd()
datafile <- "/d.csv"
d_el <- read.csv(datafile)
d_el <- d_el[, 1:4 ]
head(d_el)
library(igraph)
g <- graph.data.frame(d_el, directed = FALSE)
plot(g, layout = pref.layout,
vertex.color="black"
)
我用过这行代码。有输出代表什么?
V(g)$Person<- d_el$Person
V(g)$location<- d_el$location
V(g)$location[which(V(g)$Person %in% neighbors(g, "TB"))]
首先,为了从边缘列表创建二分网络,igraph 读取前两列作为节点和事件,除非您另有说明。然后,您需要通过向属性 "type" 添加一个名称向量来告诉 igraph 网络是二分的。因此,要么指示包含节点和事件的列,要么对列重新排序,以便 "Person" 和 "Disease" 位于前两列中。
library(igraph)
d_el <- d_el[,c(1,4,2,3)] #Reorder columns
g <- graph.data.frame(d_el, directed = FALSE)
V(g)$type <- V(g)$name %in% d_el[,1]
g
#View the igraph object and you will see it say something like
#"IGRAPH DN-B" - the B shows it's bipartite
使用类似的语法添加属性:
V(g)$age <- d_el$Age
V(g)$gender <- d_el$Gender
要根据与 "Disease" 的从属关系获取节点集,请使用 neighbors
函数。根据邻居对属性进行子集获取属性信息:
neighbors(g, "Asthma") #Gets all the names of nodes affiliated with Asthma
V(g)$gender[which(V(g)$name == as_ids(neighbors(g, "Asthma")))]
#Gets the gender of all those with asthma
要提取可以表示为网络(绘制为网络等)的 igraph 对象,请使用 asthma <- make_ego_graph(g,1,"Asthma")
。