Tengo un archivo CSV con 4 millones de bordes de una red dirigida que representa a las personas que se comunican entre sí (por ejemplo, John envía un mensaje a Mary, Mary le envía un mensaje a Ann, John le envía otro mensaje a Mary, etc.). Me gustaría hacer dos cosas:
Encuentre medidas de grado, centralidad y (tal vez) centralidad de vector propio para cada persona.
Obtenga una visualización de la red.
Me gustaría hacer esto en la línea de comandos en un servidor Linux ya que mi computadora portátil no tiene mucha potencia. Tengo R instalado en ese servidor y la biblioteca de statnet. Encontré esta publicación de 2009 de alguien más competente que yo tratando de hacer lo mismo y teniendo problemas con ella. Así que me preguntaba si alguien más tiene algún indicador sobre cómo hacer esto, preferiblemente llevándome paso a paso ya que solo sé cómo cargar el archivo CSV y nada más.
Solo para darle una idea, así es como se ve mi archivo CSV:
$ head comments.csv
"src","dest"
"6493","139"
"406705","369798"
$ wc -l comments.csv
4210369 comments.csv
Respuestas:
Lo que tiene es una lista de bordes, que se puede convertir en un objeto de red utilizando la biblioteca de red. Aquí hay un ejemplo usando datos ficticios.
Sin embargo, una advertencia está en orden: tiene una red muy grande y no estoy seguro de que una trama sea tan informativa. Probablemente se verá como una gran bola de estambre. Tampoco estoy seguro de qué tan bien manejan estas bibliotecas con conjuntos de datos tan grandes. Le sugiero que consulte la documentación de las bibliotecas de red, statnet y ergm. El Journal of Statistical Software (v24 / 3) ofrece varios artículos que cubren estas bibliotecas. El problema se puede encontrar aquí:
http://www.jstatsoft.org/v24
fuente
src
ydst
? Esto es lo que normalmente hago para cargar el archivo (ahora un archivo delimitado por tabulaciones):el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
statnet
familia de bibliotecas en una red no dirigida de más de 3500 nodos (~ 8 millones de bordes posibles). Eso fue bastante factible, especialmente cuando el objetivo era solo calcular las estadísticas de la red. Incluso he estimado ERGM en redes de este tamaño. Pero su punto está bien tomado; Dudo que las redes de millones de nodos puedan analizarse fácilmente.No creo que R sea la primera opción aquí (tal vez me equivoque). Necesitará grandes matrices aquí para indexar y preparar sus archivos de red en el formato de datos apropiado. En primer lugar, intentaré usar la biblioteca SNAP de Jure (Rob lo menciona en la publicación anterior) ; Está escrito en C ++ y funciona muy bien en redes grandes.
fuente
centrality.cpp
desdeTUNGraph
aTNEGraph
(ver pastebin.com/GHUquJvT línea 24). Ya no se está compilando. Sospecho que requiere un tipo diferente de nodo? El error que obtengo es:centrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested
(vea el error completo en pastebin.com/86mCbByG )Gephi ( http://gephi.org/ ) podría ser una manera fácil de explorar los datos. Es casi seguro que puede visualizarlo y realizar algunos cálculos (aunque no lo he usado durante algún tiempo, así que no puedo recordar todas las funciones).
fuente
De la experiencia pasada con una red de 7 millones de nodos, creo que visualizar su red completa le dará una imagen ininterpretable. Podría sugerir diferentes visualizaciones usando subconjuntos de sus datos, como simplemente usar los 10 nodos principales con la mayoría de los enlaces entrantes o salientes. Secundo la sugerencia de Celenius sobre el uso de Gephi.
fuente
Si le preocupa el tamaño de la red, puede probar el
igraph
paquete en R. Y si eso funciona mal dentro de R, podría funcionar mejor como módulo Python. O incluso elnetworkx
paquete para Pythonfuente
¿Sospecha que la red tiene una pequeña cantidad de componentes conectados muy grandes? Si no, puede descomponerlo en componentes distintos que harán mucho más fácil calcular medidas de centralidad.
fuente
Hay varios paquetes de software R que uno podría usar, incluidos "sna" y "network". Una cosa en la que no confiaría necesariamente si tiene problemas de rendimiento con sna es NetworkX. Amo a NetworkX hasta la muerte, y lo uso para la mayoría de mis análisis, pero NetworkX está muy orgulloso de ser una implementación principalmente puramente Pythonic. No explota particularmente bien el rápido código precompilado, y a menudo supera a NetworkX por un margen considerable.
fuente