Social Network Analysis (SNA) with R and Neo4j

Social Network Analysis (SNA) with R and Neo4jKENG PHAKDEEBlockedUnblockFollowFollowingMay 20Social Network Analysis (SNA) คือ กระบวนการวิเคราะห์เครือข่ายทางสังคม ซึ่งเป็นกระบวนการใช้ตรวจสอบโครงสร้างทางข้อมูล โดยใช้ทฤษฎีกราฟ (Graph Theory) มาอธิบายความสัมพันธ์ของเครือข่าย (Network)ในบทความนี้จะนำข้อมูลจาก Website : http://networkrepository.

com/ มาทำการวิเคราะห์ผ่าน Tool ทั้ง 2 ชนิด ได้แก่ RStudio และ Neo4j Desktop โดยผู้ที่สนใจสามารถ Download , Install และทำตามได้เลยhttps://www.

rstudio.

com/products/rstudio/download/https://neo4j.

com/download/ก่อนที่จะเริ่มต้น ขอย้อนกลับมาที่กราฟเบื้องต้นก่อน (Graph Basic)Graph Basicกราฟ คือ การแสดงโครงสร้างข้อมูลให้อยู่ในรูปแบบรูปภาพ โดยมีจุดแทนข้อมูล Vertices (V) หรือ Node และแต่ละ Node ที่เส้นเชื่อมต่อกันจะเรียกว่า Edge (E)แล้วมันเกี่ยวกับ SNA อย่างไร ?กล่าวคือ เราจะนำ ทฤษฎีกราฟ มาอธิบายความสัมพันธ์ของเครือข่ายของข้อมูลนั่นเอง เช่น ถ้าเราจะวิเคราะห์ความสัมพันธ์ของ Facebook Network เราจะแทนคนหรือเพจเป็น Node และการเป็นเพื่อน หรือการถูกใจของเพจ เราจะแทนด้วย Edge เป็นต้นทฤษฎีกราฟที่นำมาพิจารณาในบทความนี้ คือ “Centrality Algorithm” โดยจะพิจารณา 3 ค่าดังนี้*** Centrality Algorithm คือ การหาค่า Node ที่มีผลกระทบ ( influential)กับ Node อื่นๆมากที่สุดDegree Centrality คือ จำนวน Edge (In + Out )ที่มีความสัมพันธ์กับ Node ยิ่งมีค่ามาก แสดงว่า Node นั่นมีความนิยมสูง เป็นจุดศูนย์กลางของข้อมูลBetweeness Centrality คือ การพิจารณาว่า Node ใดๆที่ทำหน้าที่เชื่อมโยง (Bridge)กับ Node อื่นๆ เข้าด้วยกันCloseness Centrality คือ เป็นการพิจารณาว่า Node ใดที่เชื่อมโยงไปยัง Node ต่างๆ ด้วยระยะทางสั้นที่สุดมาถึงขั้นตอนสำคัญของบทความนี้ คือ การวิเคราะห์ Social Network Analysis ด้วย R และ Neo4jจะมีด้วยกันทั้งหมด 8 ขั้นตอนดังนี้ในบทความนี้จะใช้ Operation System คือ Windows 101.

Data Preparation1.

1) ไปที่ Website http://networkrepository.

com/1.

2) เลือกหัวข้อที่สนใจ ในบทความนี้เลือกหัวข้อ “FACEBOOK NETWORKS”Data Network Collection1.

3) เลือกชุดข้อมูลที่สนใจ ในบทความนี้เลือกข้อมูลชุด “ socfb-Swarthmore42”*** ข้อสังเกตุ ยิ่งค่า |V| มีค่ามาก จะทำให้ใช้เวลาในการประมวณผลนานFacebook Network Data@inproceedings{nr, title={The Network Data Repository with Interactive Graph Analytics and Visualization}, author={Ryan A.

Rossi and Nesreen K.

Ahmed}, booktitle={Proceedings of the Twenty-Ninth AAAI Conference on Artificial Intelligence}, url={http://networkrepository.

com}, year={2015}}1.

4) คลิกปุ่ม “Download” -> จะได้รับ File “socfb-Swarthmore42.

mtx”1.

5) ทำการเปลี่ยนชื่อ และ File Type ->กด F2 (Rename) เพื่อให้สามารถใช้งานได้ทั้งบน R และ Neo4jRename File Name1.

6) ขั้นตอนสุดท้ายของ Step “Data Preparation” -> คลิกขวาที่ชื่อไฟล์ (socfb.

csv) ทำการเปิดไฟล์ด้วย Text Editor เช่น Notepad++ ทำการลบ 2 บรรทัดแรก แล้วทำการ Save2.

Data Explorationในขั้นตอนนี้ จะพิจารณาข้อมูลจากโครงสร้างข้อมูลชุดนี้Data ExplorationNodes (People/Pages) = 1,659Edges (Relationship) = 61,050Maximum degree = 577Minimum degree = 13.

Install Pluginก่อนที่จะทำการ Coding ต้องทำการ Install Plugin / Library ก่อน โดยมีวิธีการดังนี้Note : ในบทความนี้จะไม่มีขั้นตอนของการติดตั้ง Software R Studio และ Neo4jR3.

1 ) หลังจากเปิดโปรแกรม “RStudio” -> ที่ส่วน “Console” Panel -> install.

packages(“igraph”)3.

2) Package ที่ 2install.

packages(“philentropy)Neo4j3.

1) หลังจากเปิดโปรแกรม “Neo4j” ไปที่ Projects -> เลือก Project ในตัวอย่างนี้เลือก “Medium” -> เลือก Graph Database ในตัวอย่างนี้เลือก “FACEBOOK_NETWORKS”3.

2) Click ปุ่ม “Manage”3.

3) Click “Plugins” Tab -> “GRAPH ALGORITHMS” -> “Install” ButtonNote : ในบทความนี้จะไม่มีขั้นตอนในการสร้าง Project และสร้าง Database Neo4j4.

Copy CSV File to Database Folderขั้นตอนนี้จะนำ File ที่ได้จากข้อที่ 1 มาไว้ใน path ของ database ก่อนR4.

1 ) Copy File ไปวางใน Folder เดียวกับ RNeo4j4.

1) ไปที่ Projects -> เลือก Project ในตัวอย่างนี้เลือก “Medium” -> เลือก Graph Database ในตัวอย่างนี้เลือก “FACEBOOK_NETWORKS”4.

2) Click ปุ่ม “Manage”4.

3) เลือก “Open Folder” -> “Import”4.

4) Copy File ไปวางไว้ที่ path ของ database ดังรูป5.

Import Data sourceขั้นตอนนี้จะนำข้อมูลที่อยู่ในรูปแบบ CSV File มาไว้ใน R และ Neo4j เพื่อทำการวิเคราะห์R# R Notebooklibrary(igraph)library(philentropy)data = read.

table(‘socfb.

csv’)datadata_graph <- graph.

data.

frame(data, directed=FALSE)plot(data_graph)Neo4j5.

1 ) Click “Open Browser” -> จะเปิด “Neo4j Browser” ขึ้นมาอีกหน้าต่างหนึ่ง5.

2) จาก Neo4j Browser จะใช้คำสั่ง “Cypher” ในการนำข้อมูลเข้าสู่ Neo4j*** Cypher คือ คำสั่งที่ใช้ในการจัดการกับ Graph Database เช่น Neo4j มีลักษณะการทำงานคล้ายกับ SQL ที่ใช้จัดการกับข้อมูลในรูปแบบ Relational Database (RDMS) โดยสามารถอ่านได้เพิ่มเติมจาก https://neo4j.

com/developer/cypher-query-language/5.

3) Load CSV file//Load CSV file LOAD CSV from ‘file:///socfb.

csv’ as lineFIELDTERMINATOR ‘ ’WITH toInteger(line[0])as Page1, toInteger(line[1]) as Page2MERGE (p1:Page {Id:Page1})MERGE (p2:Page {Id:Page2})MERGE (p1)-[: Relationship]->(p2)return p1,p2;6.

Result of Degree Centralityทำการค้นหา Node (Page) ที่มีความนิยมสูง เป็นจุดศูนย์กลางของข้อมูลR# R Notebook#Degree Centralitynode = V(data_graph)count_degree = degree(data_graph, mode=”all”,loops =TRUE)node[which.

max(count_degree)]summary(count_degree)Neo4j//Degree CentralityMATCH (p:Page)RETURN p AS name,size((p)-[:Relationship]-()) AS Degree ORDER BY Degree DESC LIMIT 10;สรุป ทั้ง R และ Neo4j จะได้ค่า Page ที่มีความนิยมสูงที่สุด คือ Page 112 มีค่า Degree = 5777.

Result of Betweeness Centralityทำการค้นหา Node (Page) ที่มีหน้าที่เป็นสะพาน เชื่อมโยง Page ต่างๆ เข้าด้วยกันR# R Notebook#Betweeness CentralityCb = betweenness(data_graph, directed=F, weights=NA)summary(Cb)node[which.

max(Cb)]Neo4jสรุป Page ที่ทำหน้าที่เชื่อมโยง (Bridge)กับ Page ต่างๆ ค่าที่ได้จาก R และ Neo4j จะได้ค่าต่างกันR คือ Page 112 ส่วน Neo4j Page 3968.

Result of Closeness Centralityทำการค้นหา Node (Page) ใดที่เชื่อมโยงไปยัง Page ต่างๆ ด้วยระยะทางสั้นที่สุดR# R Notebook#Closeness CentralityCc <- closeness(data_graph, mode=”all”, weights=NA) centr_clo(data_graph, mode=”all”, normalized=T) node[which.

max(Cc)]summary(Cc)Neo4jสรุป Page ที่ทำหน้าที่เดินทาง ไปยัง Page ต่างๆ ด้วยระยะทางสั้นที่สุด ค่าที่ได้จาก R และ Neo4j จะได้ค่าต่างกันR คือ Page 112 ส่วน Neo4j Page 636 และ 586Summaryบทความนี้ผู้เขียนได้นำเสนอวิธีการ กระบวนการวิเคราะห์เครือข่ายทางสังคม Social Network Analysis (SNA) ด้วย Software Tool ทั้ง 2 คือ R Studio และ Neo4jโดยจะเน้นหลักไปที่วิธีการ Coding Step by Step ผสมกับทฤษฎีกราฟ เล็กน้อย โดยหวังว่าผู้อ่านจะได้แนวทางในการใช้งาน R และ Neo4j เบื้องต้นเพื่อไปต่อยอดต่อไปนอกจาก R และ Neo4j แล้ว ยังมีอีกภาษาที่สามารถใช้ทำการวิเคราะห์ SNA นั่นคือ Python สามารถศึกษาได้จาก URL ด้านล่างได้เลยhttps://www.

analyticsvidhya.

com/blog/2018/09/introduction-graph-theory-applications-python/หากบทความนี้มีข้อผิดพลาดประการใด ทางผู้เขียนได้ขออภัย และขอคำแนะนำ เพื่อมาปรับปรุงบทความนี้ให้สมบูรณ์มากขึ้นๆไปอีกสุดท้ายนี้บทความนี้ เขียนเพื่อเป็นส่วนหนึ่งของวิชา ฺBD517 (Social and Information Network Analysis) หลักสูตรวิศวกรรมศาสตรมหาบัณฑิต สาขาวิศวกรรมข้อมูลขนาดใหญ่ มหาวิทยาลัยธุรกิจบัณฑิตReferencehttps://networkrepository.

comhttps://www.

rstudio.

com/https://neo4j.

comhttps://neo4j.

com/developer/cypher-query-language/https://www.

analyticsvidhya.

com/blog/2018/09/introduction-graph-theory-applications-python/.. More details

Leave a Reply