R kullanarak 4 milyon kenarlı bir ağda merkezi önlemleri nasıl hesaplayabilirim?


9

Birbiriyle iletişim kuran insanları temsil eden yönlendirilmiş bir ağın 4 milyon kenarına sahip bir CSV dosyam var (örneğin John Mary'ye bir mesaj gönderir, Mary Ann'e bir mesaj gönderir, John Mary'ye başka bir mesaj gönderir , vb.). İki şey yapmak istiyorum:

  1. Her kişi için derece, ara ve (belki) özvektör merkeziyet ölçütlerini bulun.

  2. Ağı görselleştirin.

Dizüstü bilgisayarımın fazla gücü olmadığı için bunu bir Linux sunucusundaki komut satırında yapmak istiyorum. Bu sunucuda ve statnet kütüphanesinde R yüklü. Aynı şeyi yapmaya çalıştığım ve sorun yaşadığım için benden daha yetkin birinin bu 2009 yayınını buldum . Bu yüzden başka birinin bunu nasıl yapacağına dair herhangi bir işaretçi olup olmadığını merak ediyordum, sadece CSV dosyasını nasıl yükleyeceğimizi ve başka bir şey bilmediğim için beni adım adım atıyor.

Size bir fikir vermek için CSV dosyam şöyle görünüyor:

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

bu önlemlerin bazıları için, R'nin bunu ele alıp alamayacağı veya not verilip verilmeyeceği, ağın kaç ayrı kişiye (düğüm) sahip olduğuna bağlıdır. R, hesaplama yönleri için mutlaka en iyi araç olmayabilir. Leskovec'in soyadına sahip olan ve Carnegie Mellon'da olan bir adam var - sanırım bir öğrenci olarak --- büyük grafiklerde tanımlayıcı istatistiklere sahip çok şey yaptı. Grafikleri "görselleştirmek" için birçok yardımcı program var, ancak çoğunlukla yorumlamak veya anlam ifade etmekte zorlandıklarını gördüm. Sadece derece dağılımlarını grafikleştirmek ilk başlangıç ​​olabilir.
kardinal

4 milyon puan çizmek bile zaman alabilir ...
Wok

@ wok, hayır. Bugünün bilgisayarlarında çok kolay. Her neyse, her zaman önce bir PNG'ye dökülebilir ve bu derece dağılımı için yeterince iyi olabilir. OP'nin grafiği gerçekten o kadar büyük değil.
kardinal

Yanıtlar:


7

Sahip olduğunuz, ağ kitaplığı kullanılarak bir ağ nesnesine dönüştürülebilen bir kenar listesidir. İşte hayali verileri kullanan bir örnek.

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)

Ancak, bir uyarı var: çok büyük bir ağınız var ve bir arsa bu kadar bilgilendirici olacağından emin değilim. Muhtemelen büyük bir iplik yumağı gibi görünecektir. Bu kütüphanelerin bu kadar büyük veri kümeleri ile ne kadar iyi başa çıktıklarından da emin değilim. Ağ, statnet ve ergm kütüphanelerinin belgelerine göz atmanızı öneririm. İstatistiksel Yazılım Dergisi (sürüm 24/3) Teklifler bu kütüphaneleri kapsayan çeşitli makaleler. Sorun burada bulunabilir:

http://www.jstatsoft.org/v24


1
R'de yapılan facebook ağının dünya haritasını biraz hatırlıyorum. Sanırım yazar, sürecini blogunda biraz ayrıntılı olarak açıkladı. Bu yaklaşımı kullanmanın 4 milyon düğümle bile bilgilendirici bir harita oluşturacağını düşünüyorum.
Borç Jessen

Saf soru için özür dilerim, ama bir tabloyu sahip olduğunuz şeye nasıl dönüştürebilirim srcve dst. Bu genellikle dosyayı (şimdi sekmeyle ayrılmış bir dosya) yüklemek için yaptığım şey: el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
amh

read.csv () bir data.frame oluşturmalıdır. as.network () bunu doğrudan okuyabilir veya as.matrix (el) 'i yapmanız gerekebilir.
Jason Morgan

Milyonlarca düğümün grafiğiyle bu kütüphanelerin çok şey yapabilmesi konusunda şüpheliyim. Bunları aslında karşılaştırılabilir veri kümeleriyle kullandınız mı?
Szabolcs

Poster, düğüm değil, 4 milyon kenarı olan bir ağa atıfta bulunuyordu . statnet3500'den fazla düğümü (~ 8 milyon olası kenar) yönlendirilmemiş bir ağda kütüphane ailesini kullandım . Bu, özellikle amaç sadece ağ istatistiklerini hesaplamak olduğunda oldukça yapılabilirdi. Bu boyuttaki ağlardaki ERGM'leri bile tahmin ettim. Ama sizin açınızdan iyi düşünülmüş; Milyonlarca düğümün ağlarının kolayca analiz edilebileceğinden şüpheliyim .
Jason Morgan

3

Burada R'nin ilk seçenek olduğunu düşünmüyorum (belki yanılıyorum). Ağ dosyalarınızı uygun veri biçiminde dizine eklemek ve hazırlamak için burada büyük dizilere ihtiyacınız olacaktır. Her şeyden önce, Jure'un (Rob yukarıdaki yazıdan bahsediyor) SNAP kütüphanesini kullanmaya çalışacağım ; C ++ ile yazılmış ve büyük ağlarda çok iyi çalışıyor.


SNAP'tan bahsettiğiniz için teşekkürler. Ben bakıyorum. Kullandın mı Onunla birlikte gelen merkeziyet örneği istediğime yakın görünüyor. Çok yönlü grafik verilerimle çalışacak şekilde değiştirmeyi denedim ama derleyemedi. Burada bu konuda bir soru sormanın uygun olup olmadığından emin değilim, bu yüzden yeni bir Q oluşturabilirim.
amh

1
@andresmh, önce yönlendirilen çift başına tek bir gözlem için grafiğinizi azaltmayı deneyebilirsiniz. Özdeğer maddeleri için, verileriniz muhtemelen grafikteki ağırlıklı rastgele bir yürüyüşe benzer veya eşdeğerdir. SNAP'nin bunu destekleyip desteklemediğinden emin değilim, ancak muhtemelen. Her şey başarısız olursa, Jure'a çok özel bir e-posta gönderebilirsiniz. Çok iyi bir adam, bu yüzden hızlı bir rehberlik sağlasaydı şaşırmazdım.
kardinal

@cardinal: SNAP'ta tam olarak istediğimi yapan ancak yönlendirilmemiş bir grafik için örnek bir kod buldum. Ben düşünüyorum benim grafiği SNAP docs "yönlendirilmiş çoklu grafik" olarak adlandırdığı şeydir. Ben sadece bir çizgi değişti Yani centrality.cppgelen TUNGraphetmek TNEGraph(bkz pastebin.com/GHUquJvT hattını 24). Artık derlenmiyor. Farklı bir düğüm türü gerektirdiğinden şüpheleniyorum? Aldığımcentrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested hata : ( pastebin.com/86mCbByG adresindeki tam hataya bakın )
Aldığım amh

3

Gephi ( http://gephi.org/ ) verileri araştırmanın kolay bir yolu olabilir. Neredeyse kesinlikle görselleştirebilir ve bazı hesaplamalar yapabilirsiniz (bir süredir kullanmadığım için tüm fonksiyonları hatırlayamıyorum).


3

Geçmişte 7 milyon düğümlü bir ağ deneyiminden, tüm ağınızı görselleştirmek size yorumlanamayan bir görüntü verecektir. Yalnızca en çok gelen veya giden bağlantılara sahip ilk 10 düğümü kullanmak gibi verilerinizin alt kümelerini kullanarak farklı görselleştirmeler önerebilirim. Celenius'un gephi kullanma önerisini ikinci olarak belirttim.


@andresmh, Maslov ve Sneppen ( Science , 2002) bu bağlamda faydalı olabilecek bir görselleştirmeye sahiptir. En son istatistiklerle / comp-bilim yoluyla aranıyor - Bu işin ilgili alıntıların buldum bu yanı. İşte ilgili başka bir iş olabilir.
kardinal

1

Ağın boyutuyla ilgileniyorsanız igraph, R'deki paketi deneyebilirsiniz. Ve bu R'nin içinde iyi performans göstermezse, Python modülü olarak daha iyi olabilir. Ya da networkxPython paketi bile


1

Ağın az sayıda çok büyük bağlı bileşene sahip olduğundan şüpheleniyor musunuz? Değilse, merkezî ölçüleri hesaplamayı çok daha kolay hale getirecek farklı bileşenlere ayırabilirsiniz.


Buna +1 - eğer tamamen bağlı bir bileşense, bu bir şeydir, ancak ağı ayrıştırabilirseniz, hem daha küçük verileriniz hem de paralel olarak analiz edilebilen birkaç bağımsız ağınız vardır .
Fomite

1

Birinin kullanabileceği, "sna" ve "network" de dahil olmak üzere birçok R yazılım paketi vardır. Ben bir şey olmaz sen sna ile performans sorunları yaşıyorsanız mutlaka güvenmek NetworkX olduğunu. NetworkX'i ölümüne seviyorum ve analizimin çoğunda kullanıyorum, ancak NetworkX çoğunlukla tamamen Pythonic uygulaması olmaktan gurur duyuyor. Özellikle hızlı derlenmiş kodu iyi kullanmaz ve çoğu zaman NetworkX'i önemli bir farkla geride bırakır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.