2016-12-06 1 views
1

Мне нужна помощь в моделировании данных с несколькими столбцами. У меня есть .csv-файл. У меня есть список лиц, их возраст, пол, место и болезни, от которых они страдают. Я нарисовал двудольный график человека с заболеваниями. Как я могу узнать возраст, пол и местоположение на двудольном графике с помощью igraph? Я пробовал код ниже, но для создания сети требуется всего 2 столбца csv. Может ли кто-нибудь помочь, как читать атрибут человека, как возраст, пол и местоположение в этом случае?Как смоделировать различные типы различных узлов с использованием R (igraph) или python?

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"))] 

ответ

1

Во-первых, чтобы сделать двудольный сеть из edgelist, igraph читает первые два столбца в качестве узлов и событий, если не сказать иначе. Затем вам нужно указать igraph, что сеть является двудольной, добавив вектор имен в атрибут «type». Таким образом, либо укажите столбцы с узлами и событиями, либо измените порядок столбцов, чтобы «Личность» и «Болезнь» находились в первых двух столбцах.

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 

Чтобы получить наборы узлов, основанные на принадлежности к «болезни», используйте функцию 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").

+0

Я добавил такие атрибуты, но как это может сказаться, что человек с именем jane имеет возраст 36, анализируя двудольную сеть людей с заболеваниями? – student123

+0

Не уверен, что вы хотите на 100%. Вы можете извлекать атрибуты индивидов по этой болезни, создавая окрестности, основанные на этом заболевании (так что все люди имеют это) и извлекают интересующие атрибуты: 'V (g) $ gender [который (V (g) $ name% in % соседей (g, «Астма»))]. Но для этого типа анализа вам не нужна сеть. Что именно вы хотите? Пример поможет. – paqmo

+0

Вы можете изменить цвет, размер и форму узла, чтобы отразить разные возрасты и гендерные группы, чтобы визуально проверить эти вещи. – paqmo

Смежные вопросы