วิธีการคำนวณการวัดจากศูนย์กลางในเครือข่าย 4 ล้าน edge โดยใช้ R?


9

ฉันมีไฟล์ CSV กับ 4 ล้านขอบของเครือข่ายผู้กำกับที่เป็นตัวแทนของคนสื่อสารกับแต่ละอื่น ๆ (เช่นจอห์นส่งข้อความไปยังแมรี่แมรี่ส่งข้อความไปยังแอนจอห์นส่งอีกข้อความถึงแมรี่, ฯลฯ ) ฉันต้องการทำสองสิ่ง:

  1. ค้นหาการศึกษาระดับปริญญา, ระหว่างและ (อาจ) มาตรการศูนย์กลาง eigenvector สำหรับแต่ละคน

  2. รับภาพของเครือข่าย

ฉันต้องการทำสิ่งนี้ในบรรทัดคำสั่งบนเซิร์ฟเวอร์ Linux เนื่องจากแล็ปท็อปของฉันมีพลังงานไม่มาก ฉันได้ติดตั้ง R ไว้บนเซิร์ฟเวอร์นั้นและไลบรารี statnet ฉันพบโพสต์ของคนที่มีความสามารถมากกว่าฉันที่พยายามทำสิ่งเดียวกันและมีปัญหา ดังนั้นฉันจึงสงสัยว่าถ้ามีคนอื่นที่มีพอยน์เตอร์เกี่ยวกับวิธีการทำเช่นนี้โดยเฉพาะอย่างยิ่งพาฉันทีละขั้นตอนเพราะฉันรู้วิธีการโหลดไฟล์ CSV และไม่มีอะไรอื่น

เพียงให้แนวคิดแก่คุณนี่คือลักษณะของไฟล์ CSV ของฉัน:

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

สำหรับมาตรการเหล่านี้ว่า R สามารถจัดการได้หรือไม่นั้นขึ้นอยู่กับจำนวนคน (โหนด) ที่เครือข่ายมี R อาจไม่จำเป็นต้องเป็นเครื่องมือที่ดีที่สุดสำหรับด้านการคำนวณ มีผู้ชายคนหนึ่งที่มีนามสกุลของ Leskovec ซึ่งเคยเป็น Carnegie Mellon --- ฉันคิดว่าเป็นนักเรียน --- ที่ทำสิ่งต่าง ๆ มากมายด้วยสถิติเชิงพรรณนาในกราฟขนาดใหญ่ มีสาธารณูปโภคมากมายในการ "เห็นภาพ" กราฟ แต่ส่วนใหญ่ฉันพบว่าพวกเขาค่อนข้างยากที่จะตีความหรือทำให้เข้าใจได้มาก การทำกราฟเพียงการกระจายระดับอาจเป็นการเริ่มต้นครั้งแรก
พระคาร์ดินัล

แม้แต่การวางแผน 4 ล้านคะแนนอาจใช้เวลาสักครู่ ...
Wok

@ wok, nah ชิ้นส่วนของเค้กบนคอมพิวเตอร์ของวันนี้ อย่างไรก็ตามคุณสามารถถ่ายโอนไปยัง 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 libraries วารสารสถิติซอฟต์แวร์ (v24 / 3) ข้อเสนอบทความหลายครอบคลุมห้องสมุดเหล่านี้ ปัญหาสามารถพบได้ที่นี่:

http://www.jstatsoft.org/v24


1
ฉันจำแผนที่โลกของเครือข่าย facebook ซึ่งทำใน R. ฉันคิดว่าผู้เขียนอธิบายกระบวนการของเขาอย่างละเอียดในบล็อกของเขา ฉันคิดว่าการใช้วิธีการนั้นจะสร้างแผนที่ที่ให้ข้อมูลแม้จะมี 4 ล้านโหนด
Owe Jessen

ขอโทษสำหรับคำถามที่ไร้เดียงสา แต่ฉันจะแปลงตารางเป็นสิ่งที่คุณได้เป็นและsrc dstนี่คือสิ่งที่ฉันมักจะทำเพื่อโหลดไฟล์ (ตอนนี้เป็นไฟล์ที่คั่นด้วยแท็บ): 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 ล้านขอบไม่ใช่โหนด ฉันใช้statnetตระกูลของห้องสมุดบนเครือข่ายที่ไม่ได้ใช้เส้นทางมากกว่า 3,500 โหนด (~ 8 ล้านขอบที่เป็นไปได้) นั่นเป็นสิ่งที่ทำได้โดยเฉพาะอย่างยิ่งเมื่อเป้าหมายเพียงเพื่อคำนวณสถิติเครือข่าย ฉันได้ประเมิน ERGMs บนเครือข่ายขนาดนี้ด้วยซ้ำ แต่ประเด็นของคุณได้รับการตอบรับอย่างดี ฉันสงสัยว่าเครือข่ายของโหนดนับล้านสามารถวิเคราะห์ได้อย่างง่ายดาย
Jason Morgan

3

ฉันไม่คิดว่า R เป็นตัวเลือกแรกที่นี่ (บางทีฉันผิด) คุณจะต้องใช้อาร์เรย์ขนาดใหญ่ที่นี่เพื่อจัดทำดัชนีและเตรียมไฟล์เครือข่ายของคุณในรูปแบบข้อมูลที่เหมาะสม ก่อนอื่นฉันจะลองใช้ Jure's (Rob พูดถึงเขาในโพสต์ด้านบน) ห้องสมุดSNAP ; มันเขียนใน C ++ และทำงานได้ดีบนเครือข่ายขนาดใหญ่


ขอบคุณที่พูดถึง SNAP ฉันกำลังมองหามัน คุณเคยใช้มัน? ตัวอย่างจากส่วนกลางที่มาพร้อมกับสิ่งที่ฉันต้องการ ฉันพยายามแก้ไขมันเพื่อให้สามารถทำงานกับข้อมูลกราฟหลายทิศทางของฉัน แต่ไม่สามารถรวบรวมได้ ผมไม่แน่ใจว่าถ้ามันเป็นความเหมาะสมที่จะถามคำถามเกี่ยวกับเรื่องนี้ที่นี่ดังนั้นผมอาจจะสร้าง Q. ใหม่
AMH

1
@ และresmhคุณอาจลองลดกราฟของคุณให้มีการสังเกตหนึ่งครั้งต่อคู่ชี้นำก่อน สำหรับข้อมูลค่าลักษณะเฉพาะข้อมูลของคุณน่าจะคล้ายกันหรือเทียบเท่ากับการเดินสุ่มแบบถ่วงน้ำหนักบนกราฟ ฉันไม่แน่ใจว่า SNAP รองรับสิ่งนั้นหรือไม่ แต่เป็นไปได้ หากสิ่งอื่นล้มเหลวคุณอาจส่งอีเมลเฉพาะไปที่ Jure เขาเป็นคนดีมากดังนั้นฉันจะไม่แปลกใจถ้าเขาให้คำแนะนำอย่างรวดเร็ว
พระคาร์ดินัล

@ cardinal: ฉันพบโค้ดตัวอย่างใน SNAP ที่ทำสิ่งที่ฉันต้องการอย่างแน่นอน แต่สำหรับกราฟที่ไม่มีทิศทาง ฉันคิดว่ากราฟของฉันเป็นสิ่งที่เอกสาร SNAP เรียกว่า "กำกับหลายกราฟ" ดังนั้นฉันจึงเปลี่ยนเพียงหนึ่งบรรทัดcentrality.cppจากTUNGraphเป็นTNEGraph(ดู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 อันดับแรกของโหนดที่มีลิงค์ขาเข้าหรือขาออกมากที่สุด ฉันแนะนำ Celenius ครั้งที่สองเกี่ยวกับการใช้ gephi


@ andresmh, Maslov และ Sneppen ( วิทยาศาสตร์ , 2002) มีการสร้างภาพข้อมูลที่อาจเป็นประโยชน์ในบริบทนี้ การค้นหาสถิติ / comp-sci - การอ้างอิงที่เกี่ยวข้องกับงานนี้เมื่อเร็ว ๆ นี้ฉันก็พบสิ่งนี้เช่นกัน นี่อาจเป็นอีกงานที่เกี่ยวข้อง
พระคาร์ดินัล

1

หากคุณกำลังกังวลกับขนาดของเครือข่ายที่คุณสามารถลองigraphแพคเกจในอาร์และถ้าดำเนินการที่ไม่ดีภายใน R ก็อาจจะทำได้ดีกว่าเป็นโมดูลหลาม หรือแม้แต่networkxแพ็คเกจสำหรับ Python


1

คุณสงสัยหรือไม่ว่าเครือข่ายมีส่วนประกอบเชื่อมต่อที่มีขนาดใหญ่มากจำนวนเล็กน้อย ถ้าไม่คุณสามารถแยกมันออกเป็นส่วนประกอบที่แตกต่างกันซึ่งจะทำให้ง่ายต่อการคำนวณการวัดจากศูนย์กลาง


+1 กับสิ่งนี้ - ถ้าเป็นส่วนประกอบที่เชื่อมต่อโดยสิ้นเชิงนั่นเป็นสิ่งหนึ่ง แต่ถ้าคุณสามารถย่อยสลายเครือข่ายได้คุณจะมีข้อมูลที่เล็กลงและจริง ๆ แล้วเครือข่ายอิสระหลายแห่งที่สามารถวิเคราะห์แบบขนานได้
Fomite

1

มีแพ็กเกจซอฟต์แวร์ R หลายตัวที่สามารถใช้ได้รวมถึง "sna" และ "เครือข่าย" สิ่งหนึ่งที่ฉันไม่จำเป็นต้องพึ่งพาหากคุณประสบปัญหาด้านประสิทธิภาพของ sna คือ NetworkX ฉันชอบ NetworkX ถึงตายและใช้มันเพื่อการวิเคราะห์ส่วนใหญ่ของฉัน แต่ NetworkX ค่อนข้างภูมิใจที่ได้ใช้ Pythonic อย่างแท้จริง มันไม่ได้ใช้ประโยชน์จากโค้ดที่คอมไพล์ล่วงหน้าอย่างรวดเร็วและ sna มักแซงหน้า NetworkX ด้วยอัตรากำไรขั้นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.