如何使用 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")