R을 사용하여 4 백만 에지 네트워크에서 중심성 측정을 계산하는 방법은 무엇입니까?


9

서로 통신하는 사람들을 나타내는 4 백만 개의 직접 네트워크 가장자리가있는 CSV 파일이 있습니다 (예 : John은 Mary에게 메시지를 보내고 Mary는 Ann에게 메시지를 보내고 John은 Mary 에게 다른 메시지를 보냅니다 ). 두 가지 일을하고 싶습니다 :

  1. 각 개인에 대한 정도, 긍정 및 (아마도) 고유 벡터 중심성 측정을 찾으십시오.

  2. 네트워크를 시각화하십시오.

랩톱에는 많은 전원이 없기 때문에 Linux 서버의 명령 줄 에서이 작업을 수행하고 싶습니다. 해당 서버와 statnet 라이브러리에 R이 설치되어 있습니다. 나는 2009 년 같은 사람이 나보다 똑같은 일을하는데 문제가있는 것을 발견했다. 그래서 다른 사람 이이 작업을 수행하는 방법에 대한 포인터를 가지고 있는지 궁금합니다. CSV 파일을로드하는 방법 만 알기 때문에 단계별로 안내하는 것이 좋습니다.

아이디어를주기 위해 내 CSV 파일은 다음과 같습니다.

$ head comments.csv
    "src","dest"
    "6493","139"
    "406705","369798"
$ wc -l comments.csv 
4210369 comments.csv

이러한 측정 중 일부에 대해 R이 처리 할 수 ​​있는지 또는 메모 할 수 있는지 여부는 네트워크에있는 별도의 사람 (노드) 수에 따라 다릅니다. R은 계산 측면에서 반드시 최상의 도구 일 필요는 없습니다. Leskovec라는 성을 가진 카네기 멜론 (Carnegie Mellon)에 다녀 왔던 학생이 있습니다. 그래프를 "시각화"하기위한 많은 유틸리티가 있지만, 대부분 해석하거나 이해하기가 어렵다는 것을 알게되었습니다. 정도 분포 만 그래프로 표시하는 것이 첫 시작일 수 있습니다.
추기경

4 백만 포인트를 줄
이더라도

@ 웍 오늘날의 컴퓨터에서 케이크 한 조각. 어쨌든 항상 PNG로 먼저 덤프 할 수 있으며 정도 분포에 충분할 것입니다. OP의 그래프는 그다지 크지 않습니다.
추기경

답변:


7

네트워크 라이브러리를 사용하여 네트워크 객체로 변환 할 수있는 에지 목록이 있습니다. 가상의 데이터를 사용한 예입니다.

library(network)

src <- c("A", "B", "C", "D", "E", "B", "A", "F")
dst <- c("B", "E", "A", "B", "B", "A", "F", "A")

edges <- cbind(src, dst)
Net <- as.network(edges, matrix.type = "edgelist")

summary(Net)
plot(Net)

그러나 경고는 순서가 있습니다. 네트워크가 매우 커서 음모가 유익한 지 확실하지 않습니다. 아마 큰 털실처럼 보일 것입니다. 또한 이러한 라이브러리가 이러한 큰 데이터 세트를 얼마나 잘 처리하는지 잘 모르겠습니다. 네트워크, statnet 및 ergm 라이브러리에 대한 설명서를 살펴 보는 것이 좋습니다. 통계 소프트웨어의 저널 (V24 / 3) 제안이 라이브러리를 다루는 여러 기사를. 문제는 여기에서 찾을 수 있습니다.

http://www.jstatsoft.org/v24


1
나는 R로 작성된 페이스 북 네트워크의 세계지도를 어둡게 기억한다. 저자는 자신의 프로세스를 블로그에 자세히 설명했다고 생각한다. 이 접근 방식을 사용하면 4 백만 개의 노드에서도 유익한 맵을 생성 할 수 있습니다.
Owe Jessen

순진한 질문에 대한 사과는하지만 어떻게 당신이로 무슨에 테이블을 변환합니까 srcdst. 이것은 일반적으로 파일 (현재 탭으로 구분 된 파일)을로드하기 위해 수행하는 작업입니다. el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
amh

read.csv ()는 data.frame을 생성해야합니다. as.network ()가 직접 읽거나 as.matrix (el)을 수행해야 할 수도 있습니다.
Jason Morgan

나는이 라이브러리가 수백만 노드의 그래프로 많은 것을 할 수 있다는 것에 회의적입니다. 실제로 비슷한 데이터 세트와 함께 사용 했습니까?
Szabolcs

포스터는 노드가 아니라 4 백만 개의 에지 가있는 네트워크를 언급하고있었습니다 . statnet3500 개가 넘는 노드 (최대 8 백만 개의 가능한 에지)의 무 방향 네트워크에서 라이브러리 제품군을 사용했습니다 . 특히 목표가 네트워크 통계를 계산하는 것이었을 때 가능했습니다. 이 규모의 네트워크에서 ERGM을 추정했습니다. 그러나 당신의 요점은 잘 잡 힙니다. 수백만 노드의 네트워크를 쉽게 분석 할 수 있을지 의심됩니다 .
Jason Morgan

3

나는 여기서 R이 첫 번째 선택이라고 생각하지 않습니다 (아마도 내가 틀렸을 수도 있습니다). 네트워크 파일을 적절한 데이터 형식으로 색인화하고 준비하려면 여기에 거대한 배열이 필요합니다. 우선 Jure 's (Rob가 위의 게시물에서 언급) SNAP 라이브러리 를 사용하려고합니다 . C ++로 작성되었으며 대규모 네트워크에서 매우 잘 작동합니다.


SNAP를 언급 해 주셔서 감사합니다. 나는 그것을 찾고 있습니다. 사용 했습니까? 그것과 함께 제공되는 중심성 샘플은 내가 원하는 것에 가깝습니다. 다중 지향 그래프 데이터와 함께 작동하도록 수정하려고 시도했지만 컴파일하지 못했습니다. 여기에 질문을하는 것이 적절한 지 잘 모르겠으므로 새로운 Q를 만들 수 있습니다.
amh

1
@andresmh, 지시 쌍당 단일 관측치를 갖도록 그래프를 줄이십시오. 고유 값 항목의 경우 데이터가 그래프에서 가중 랜덤 워크와 유사하거나 동일 할 수 있습니다. SNAP가이를 지원하는지 확실하지 않지만 가능할 것입니다. 다른 모든 방법이 실패하면 Jure에 매우 구체적인 이메일을 보낼 수 있습니다. 그는 아주 좋은 사람입니다. 그래서 그가 빠른 안내를 해 주면 놀라지 않을 것입니다.
추기경

@ cardinal : SNAP에서 원하는대로하지만 무향 그래프에 대한 샘플 코드를 찾았습니다. 내가 생각하는 내 그래프는 SNAP의 문서는 "감독 멀티 그래프"이라고 부르는 것입니다. 나는 단지 하나 개의 라인을 변경 그래서 centrality.cpp에서 TUNGraphTNEGraph(참조 pastebin.com/GHUquJvT의 라인 24). 더 이상 컴파일되지 않습니다. 다른 유형의 노드가 필요하다고 생각합니까? 내가 얻는 오류는 다음과 같습니다 centrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested( pastebin.com/86mCbByG의 전체 오류 참조 )
amh

3

Gephi ( http://gephi.org/ )는 데이터를 쉽게 탐색 할 수있는 방법입니다. 거의 확실하게 시각화하고 계산을 수행 할 수 있습니다 (한동안 사용하지 않았으므로 모든 기능을 기억할 수는 없습니다).


3

7 백만 개의 노드 네트워크에 대한 과거의 경험을 통해 전체 네트워크를 시각화하면 해석 할 수없는 이미지를 얻을 수 있다고 생각합니다. 인바운드 또는 아웃 바운드 링크가 가장 많은 상위 10 개 노드를 사용하는 등 데이터 하위 집합을 사용하여 다른 시각화를 제안 할 수 있습니다. 나는 gephi 사용에 대한 celenius의 제안을 두 번째로한다.


@andresmh, Maslov 및 Sneppen ( Science , 2002)은 이러한 맥락에서 유용 할 수있는 시각화를 제공합니다. 최근 통계 / COMP-공상 과학을 통해 검색 -이 작품의 관련 인용, 나는 발견 아니라. 여기 다른 관련 작업이있을 수 있습니다.
추기경

1

네트워크의 크기와 관련하여 igraphR 에서 패키지를 사용해 볼 수 있습니다. R 내부에서 성능이 좋지 않으면 Python 모듈로 더 나을 수 있습니다. 또는 networkx파이썬 패키지


1

네트워크에 매우 큰 수의 연결된 구성 요소가 있다고 생각하십니까? 그렇지 않은 경우 중심 구성 요소를 훨씬 쉽게 계산할 수있는 개별 구성 요소로 분해 할 수 있습니다.


+1-완전히 연결된 구성 요소 인 경우 그 중 하나이지만 네트워크를 분해 할 수 있으면 더 작은 데이터와 실제로 병렬로 분석 할 수있는 여러 개의 독립적 인 네트워크가 있습니다.
Fomite

1

"sna"및 "network"를 포함하여 사용할 수있는 여러 R 소프트웨어 패키지가 있습니다. sna에 성능 문제가있는 경우 필자 의존 하지 않을 한 가지는 NetworkX입니다. 나는 NetworkX가 죽기를 좋아하고 대부분의 분석에 사용하지만 NetworkX는 주로 순수한 Pythonic 구현이라는 것을 자랑스럽게 생각합니다. 특히 빠른 미리 컴파일 된 코드를 잘 활용하지 못하고 sna는 종종 NetworkX를 훨씬 능가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.