Создать график (сетевой анализ R)?

Я новичок в R и у меня проблемы со следующим:

Я изучаю политиков в Бельгии в Твиттере и хотел бы узнать, формируются ли какие-либо сети внутри политических партий в Твиттере.

У меня есть два файла данных

  • Файл матрицы, который содержит информацию о том, связаны ли политики (politicixpolitici.csv)
  • Файл, содержащий всех политиков с соответствующим именем, именем, политической партией, дескриптором твиттера и парламентом
    (data.csv)

Я хочу создать график, показывающий сеть, но с узлами, окрашенными в соответствии с их политической партией (эта переменная называется «fractie» в файле data.csv).

Я пытался сделать это следующим образом:

Во-первых, я попытался объединить файлы следующим образом:

rownames(politicicsv) <- politicicsv[,'TwitterHandle']
test <- cbind(politicixpolitici, 
              politicicsv[, "Fractie"][match(rownames(politicixpolitici), 
                                             rownames(politicicsv))])

=> Я нарисовал эту сеть, но она получается очень небрежной, и там есть имена, из-за чего ее очень трудно увидеть + узлы явно не окрашены в зависимости от партии.

Затем я попробовал это с помощью statnet, но когда я хотел создать график, у меня возникли проблемы с созданием атрибута вершины:

fractie <- get.vertex.attribute(politicicsv, "Fractie") 

Error in get.vertex.attribute(politicicsv, "Fractie") : 
  get.vertex.attribute requires an argument of class network.

Может ли кто-нибудь помочь мне построить эту сеть с узлами, окрашенными в соответствии с политической партией («фракция»), к которой они принадлежат?

Файлы можно найти здесь

Спасибо, это поможет мне с моей диссертацией.


person Alexandra Roumans    schedule 21.05.2017    source источник
comment
politicixpolitici.csv отсутствует.   -  person lukeA    schedule 21.05.2017
comment
Только что загрузил его снова, должно быть там сейчас :)   -  person Alexandra Roumans    schedule 21.05.2017


Ответы (1)


Может ли кто-нибудь помочь мне построить эту сеть с узлами, окрашенными в соответствии с политической партией («фракция»), к которой они принадлежат?

Вы могли бы сделать это так

df <- read.csv("data.csv") 
m <- as.matrix(read.csv2("politicixpolitici.csv", row.names = 1))
library(igraph)
g <- simplify(graph_from_adjacency_matrix(m))
# Color palette:
(pal <- setNames(
  colorRampPalette(categorical_pal(8))(nlevels(df$Fractie)), 
  levels(df$Fractie)) ) 
#         CD&V    Ecolo-Groen          Groen           N-VA Onafhankelijke 
#    "#E69F00"      "#81ADA3"      "#33ABB9"      "#18A56E"      "#C0D64B" 
#     Open vld       Open Vld           sp.a             VB  Vlaams Belang 
#    "#77AB7A"      "#2A6D8E"      "#BF5F11"      "#CF6E64"      "#BC82A2" 
# Vuye&Wouters 
#    "#999999" 
V(g)$color <- pal[df$Fractie[match(V(g)$name, df$TwitterHandle)]]
set.seed(1); coords <- layout_with_fr(g)
plot(g, 
  layout=coords, vertex.label.cex=.2, vertex.size=2, 
  edge.arrow.size=0, edge.lty="blank", asp = 0)

или попробуйте интерактивный сюжет:

library(visNetwork)
visIgraph(g) %>% 
  visIgraphLayout(layout="layout.norm", layoutMatrix = coords, type = "full")

В общем, я бы порекомендовал экспортировать ваш график в gephi и поэкспериментировать с другими макетами и визуализациями там в интерактивном режиме.

person lukeA    schedule 21.05.2017
comment
Большое спасибо, это отличная помощь! :) - person Alexandra Roumans; 21.05.2017