DEMO HỆ SỐ TRUNG TÂM TRỰC TIẾP TRÊN PYTHON

Một phần của tài liệu Báo cáo cuối kỳ môn toán tổ hợp và đô thị mô hình mạng lưới xã hội (Trang 34)

4.2.1 GIẢI THUẬT

Đầu tiên ta cần biểu diễn đồ thị trên ma trận kề, tiếp theo ta cần phải tìm được danh sách các bậc của đỉnh theo thứ tự. Giải thuật tìm bậc của từng cạnh trong đồ thị vô hướng như sau:

1. Tạo một list rỗng, gọi list này là Degree = [], đồng thời cho một biến i = 0.

2. Tạo một biến Edges và gán biến này bằng 0.

3. Duyệt từng phần từ trong hàng thứ i của ma trận kề, nếu phần tử này khác 0 thì Edges cộng thêm 1 đơn vị.

4. Khi đã duyệt hết tất cả các phần tử trong hàng thứ i của ma trận kề, Degree.append(Edges). Nếu i bé hơn kích cỡ ma trận thì i cộng thêm một và quay lại bước 2, nếu không dừng thuật toán. 5. Kết quả trả về list Degree là số bậc của từng đỉnh theo thứ tự. Với mỗi phần tử trong list Degree, ta sử dụng cơng thức sau đây để tính hệ số trung tâm trực tiếp cho từng đỉnh:

𝐶𝑑= 𝑛 − 1𝑘 Trong đó:

+ k : Tổng số mối quan hệ trực tiếp của 𝑎𝑐𝑡𝑜𝑟𝑖 (Tổng số bậc của 𝑎𝑐𝑡𝑜𝑟𝑖) + n : Tổng số actor trong mạng lưới

Đối với đồ thị có hướng ta có giải thuật:

• Đối với bậc out – degree ta áp dụng tương tự như giải thuật của đồ thị vô hướng trên ma trận kề.

• Đối với bậc in – degree ta áp dụng tương tự như giải thuật của đồ thị vô hướng trên chuyển vị của ma trận kề

• Áp dụng cơng thức tính hệ số trung tâm trực tiếp ta sẽ có bậc của out – degree và in – degree với các list InDegree và OutDegree.

4.2.2 BÀI TỐN

Hình 12 Ví dụ demo 1 hệ số trung tâm trực tiếp Đối với demo 1 hệ số trung tâm trực tiếp, ta sẽ có ma trận kề như sau:

𝑚𝑎𝑡𝑟𝑖𝑥 = ( 0 0 0 00 10 10 00 0 0 0 1 10 11 00 01 0 0 0 0 00 10 00 11 0 ) Ta tìm danh sách bậc của đồ thị như giải thuật đã nêu ở 4.2.1 . Sau đó áp dụng cơng thức ta kết quả:

Hình 13 Ví dụ demo 2 hệ số trung tâm trực tiếp Đối với demo 2 hệ số trung tâm trực tiếp, ta sẽ có ma trận kề như sau:

𝑚𝑎𝑡𝑟𝑖𝑥 = ( 0 1 0 01 1 1 01 0 0 0 0 1 1 0 0 0 10 0 0 0 )0 0

Ta tìm danh sách in degree và out degree – – của đồ thị như giải thuật đã nêu ở 4.2.1 .

Sau đó áp dụng cơng thức ta kết quả:

𝑖𝑛 − 𝑑𝑒𝑔𝑟𝑒𝑒: {𝐴: 0.0, 𝐵: 0.5, 𝐶: 0.5, 𝐷: 0. , 𝐸: 0.75 25} 𝑜𝑢𝑡 − 𝑑𝑒𝑔𝑟𝑒𝑒: {𝐴: 0. , 𝐵: 0.5, 𝐶: 0.5, 𝐷: 0.0,𝐸: 0.75 25}

4.1.3 KẾT QUẢ

Hình 14 Demo hệ số trung tâm trực tiếp trên Python 4.3 DEMO HỆ SỐ TRUNG TÂM LÂN CẬN TRÊN PYTHON

4.3.1 GIẢI THUẬT

Ta sử dụng thư viện networkx để giải bài toán. Đầu tiên ta sử dụng các lệnh add_node (add_nodes_from) và add_edge (add_edges_from) để tạo thành đồ thị mong muốn.

Ta có giải thuật như sau:

1. Tạo một set rỗng, gọi set này là là Dict_Cc dùng để chứa các hệ số trung tâm lân cận của từng đỉnh theo thứ tự, đồng thời cho một biến i = 0.

2. Duyệt phần tử thứ i của đồ thị (theo thứ tự đã cho trước đó), đồng thời đặt một biến d = 0.

3. Duyệt tất cả các kết nối của đỉnh i tới các đỉnh khác trong đồ thị và tìm đường đi ngắn nhất của đỉnh i đến từng đỉnh, với mỗi

đường đi ngắn nhất từ đỉnh i tới các đỉnh lần lượt ta sẽ có biến step đại diện cho bước ngắn nhất từ đỉnh i đến đỉnh đó, cứ mỗi lần như vậy d được cập nhật 𝑑 += 𝑠𝑡𝑒𝑝. Đồng thời áp dụng cơng thức tính hệ số trung tâm lân cận có cơng thức như sau:

𝐶𝑐=∑ 𝑑(𝑥, 𝑦)𝑛 − 1 Trong đó:

+ n: Tổng số actor trong mạng lưới.

+ ∑ 𝑑(𝑥, 𝑦): Tổng số ‘bước’ (step) của đoạn đường ngắn nhất mà 𝑎𝑐𝑡𝑜𝑟𝑖phải đi để đến với mọi actor trong mạng.

Sau đó Dict_Cc.add(𝐶𝑐).

4. Nếu i bé hơn số đỉnh của đồ thị thì i tăng một đơn vị và quay lại bước 2. Nếu khơng kết thúc thuật tốn

5. Kết quả trả về là set Dict_Cc chứa hệ số trung tâm lân cận của tất cả các đỉnh trong đồ thị.

4.3.2 BÀI TỐN

Hình 15 Ví dụ demo hệ số trung tâm lân cận Sử dụng các lệnh để tạo đồ thị:

import networkx as nx g = nx.Graph()

g.add_nodes_from([1,2,3,4,5,6])

g.add_edges_from([(1,2),(1,5),(2,3),(2,5),(3,4),(4,5),(4,6)]) Áp dụng giải thuật đã trình bày ở 4.3.1

Ta có kết quả:

{1: 0.5555555555555556, 2: 0.625, 3: 0.625, 4: 0.7142857142857143, 5: 0.7142857142857143, 6: 0.45454545454545453}

4.3.2 KẾT QUẢ

Hình 16 Demo hệ số trung tâm lân cận trên Python 4.4 DEMO HỆ SỐ TRUNG TÂM TRUNG GIAN TRÊN PYTHON

4.4.1 GIẢI THUẬT

Ta sử dụng thư viện networkx để giải bài toán. Đầu tiên ta sử dụng các lệnh add_node (add_nodes_from) và add_edge (add_edges_from) để tạo thành đồ thị mong muốn.

Ta có giải thuật như sau:

1. Tạo một set rỗng, gọi set này là là Dict_Cb dùng để chứa các hệ số trung tâm lân cận của từng đỉnh theo thứ tự, đồng thời cho một biến i = 0.

2. Duyệt phần tử thứ i của đồ thị (theo thứ tự đã cho trước đó), đồng thời đặt một biến b = 0.

3. Duyệt tất cả các kết nối của đỉnh x tới tất cả các đỉnh khác trong đồ thị (trừ đỉnh i) và tìm đường đi ngắn nhất của đỉnh đến từng x đỉnh, với mỗi đường đi ngắn nhất từ đỉnh tới các đỉnh lần lượt ta x sẽ có biến count đại diện cho số lần xuất hiện của đỉnh i trong đường đi đó Sau khi đã duyệt xong ta áp dụng cơng thức tính hệ . số trung tâm trung gian:

𝐶𝐵=(𝑛 − 1)(𝑛 − 2)/2𝑐𝑜𝑢𝑛𝑡 Trong đó:

+ n : Tổng số actor có trong mạng lưới Sau đó Dict_Cb.add(𝑪𝑩).

4. Nếu i bé hơn số đỉnh của đồ thị thì i tăng một đơn vị và quay lại bước 2. Nếu khơng kết thúc thuật tốn.

5. Kết quả trả về là set Dict_Cb chứa hệ số trung tâm trung gian của tất cả các đỉnh trong đồ thị.

4.4.2 BÀI TỐN

Hình 17 Ví dụ demo hệ số trung tâm trung gian Sử dụng các lệnh để tạo đồ thị:

import networkx as nx a = nx.Graph()

a.add_edges_from([('L','M'),('L','N'),('L','O'), ('M','P'),('M','Q'),

('N','O'),

('O','R'),

('P','Q')])

Áp dụng giải thuật đã trình bày ở 4.4.1 Ta có kết quả:

{'L': 0.6, 'M': 0.5333333333333333, 'N': 0.0, 'O': 0.3333333333333333, 'P': 0.0, 'Q': 0.0, 'R': 0.0}

4.4.3 KẾT QUẢ

Hình 18 Demo hệ số trung tâm trung gian trên Python 4.5 DEMO HỆ SỐ PHÂN CỤM TRÊN PYTHON

4.5.1 GIẢI THUẬT

Ta sử dụng thư viện networkx để giải bài toán. Đầu tiên ta sử dụng các lệnh add_node (add_nodes_from) và add_edge (add_edges_from) để tạo thành đồ thị mong muốn.

Ta có giải thuật như sau:

1. Tạo một set rỗng, gọi set này là là Dict_Cluster dùng để chứa các hệ số phân cụm cục bộ của từng đỉnh theo thứ tự, đồng thời cho một biến i = 0.

2. Duyệt phần tử thứ i của đồ thị (theo thứ tự đã cho trước đó), đồng thời đặt một biến b = 0.

3. Với đỉnh thứ i của đồ thị, ta xét xem đỉnh đó có bao nhiêu láng giềng và các láng giềng đó là đỉnh nào. Sau đó ta tìm bậc của đỉnh I, tiếp theo đó tìm tổng số cạnh kết nối của các láng giềng của đỉnh i, với điều kiện cạnh đó khơng nối đến đỉnh i. Gọi tổng số cạnh được vừa tìm được là e. Sau khi đã duyệt xong ta áp dụng cơng thức tính hệ số phân cụm cục bộ:

Đối với mạng lưới vơ hướng ta có cơng thức: 𝐶𝑖=𝑘𝑖(𝑘 − 1)2|𝑒|

𝑖 Đối với mạng lưới có hướng ta có cơng thức:

𝐶𝑖=𝑘 | |𝑒 𝑖(𝑘 − 1)𝑖 Trong đó:

+ 𝑘𝑖: số bậc của đỉnh i Sau đó Dict_Clustering.add(𝐶𝑖).

4. Nếu i bé hơn số đỉnh của đồ thị thì i tăng một đơn vị và quay lại bước 2. Nếu khơng kết thúc thuật tốn.

5. Kết quả trả về là set Dict_Clustering chứa hệ số phân cụm cục bộ của tất cả các đỉnh trong đồ thị.

Khi đã có tất cả hệ số phân cụm cục bộ ta có thể tính được hệ số phân cụm cục bộ trung bình với cơng thức:

𝐶 =1𝑛 ∑ 𝐶𝑖 𝑛 𝑖=1

Đối với hệ số phân cụm toàn cục ta phải duyệt đồ thị để tìm các chu trình tam giác tạo nên bởi ba đỉnh của đồ thị, sau đó với mỗi đỉnh ta xét xem có bao nhiêu cạnh

kết nối để tìm tổng số đỉnh có thể tạo thành bộ ba. Cơng thức của hệ số phân cụm tồn cục:

𝐶 =3 𝑥 𝑛𝑢𝑚𝑏𝑒𝑟 𝑡𝑟𝑖𝑎𝑛𝑔𝑙𝑒𝑠𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑎𝑙𝑙𝑜𝑓 𝑡𝑟𝑖𝑝𝑙𝑒𝑡𝑠 Tạm dịch:

+ 𝑛𝑢𝑚𝑏𝑒𝑟 𝑡𝑟𝑖𝑎𝑛𝑔𝑙𝑒𝑠𝑜𝑓 : tổng số tam giác được tạo bởi tất cả các bộ ba trong mạng lưới + 𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑎𝑙𝑙 𝑡𝑟𝑖𝑝𝑙𝑒𝑡𝑠: tổng số các actor tạo thành bộ ba 4.5.2 BÀI TỐN Hình 19 Ví dụ demo hệ số phân cụm Sử dụng các lệnh để tạo đồ thị: import networkx as nx b = nx.Graph() b.add_nodes_from(['A','B','C','D','E','F','G']) b.add_edges_from([('A','B'),('A','C'), ('B','C'),('B','D'),('B','G'), ('D','E'),('D','G'), ('E','F'),('E','G')]) Áp dụng giải thuật đã trình bày ở 4.5.1

Ta có kết quả: {'A': 1.0, 'B': 0.3333333333333333, 'C': 1.0, 'D': 0.6666666666666666, 'E': 0.3333333333333333, 'F': 0, 'G': 0.6666666666666666} Hệ số phân cụm toàn cục: 0.5294117647058824 Hệ số phân cụm cục bộ trung bình: 0.5714285714285714 4.5.3 KẾT QUẢ

Hình 20 Demo hệ số phân cụm cục bộ trên Python CHƯƠNG 5 – KẾT LUẬN

Như vậy sau chương thứ nhất, chúng ta hiểu được thế nào là mạng lưới xã hội và cộng đồng trong mạng lưới xã hội, tính ứng dụng của mạng lưới vào xã hội vào các vấn đề trong thực tế. Tiếp theo đó, ta hiểu được phương pháp phân tích mạng lưới xã hội là gì, hiểu được ứng dụng của phương pháp phân tích mạng lưới xã hội vào các vấn đề của mạng lưới xã hội. Qua một vài ví dụ ta có thể thấy được ứng dụng thực tiễn.

Chương thứ hai đề cập đến các phép đo trong mạng lưới xã hội, qua các phép đo density ta hiểu được tính dày đặc của mạng lưới, tính dày đặc càng cao nghĩa là mạng lưới có xu hướng giúp đỡ nhau càng nhiều, với phép đo clustering ta hiểu được sự phân cụm của mạng lưới. Với các phép đo degree, betweenness, closeness ta có thể tìm ra

các key players của mạng lưới, nghĩa là những thành phần chủ chốt của mạng lưới. Một thành phần nữa là signed graph giúp ta hiểu rõ hơn về những mối quan hệ của mạng lưới và dự đoán được xu hướng kết nối trong tương lai.

Chương thứ ba, ta hiểu được định nghĩa của nhận biết cộng đồng và ý nghĩa của nó. Nó ứng dụng trong nhiều lĩnh vực trong cuộc sống đặc biệt là điều tra tội phạm và lĩnh vực kinh tế. Với các thuật tốn nhận biết cộng đồng ta có thể dễ dàng phân cụm các thành phần trong mạng lưới vào các cộng đồng có tính chất riêng biệt một cách dễ dàng. Nội dung các thuật toán đã được đề cập ở bên trên.

TÀI LIỆU THAM KHẢO Tiếng Việt

1. Lê Minh Tiến, 2006. “Tổng quan phương pháp phân tích mạng lưới xã hội trong nghiên cứu xã hội”, Tạp chí Khoa học Xã hội, 09,: 66-77.

2. Trần Trung Hiếu, 2011. Họ thuật toán Girvan – Newman trong phát hiện cộng đồng và cài đặt thử nghiệm trên mạng xã hội trực tiếp. Khóa luận tốt nghiệp đại học hệ chính quy, Đại học quốc gia Hà Nội – Trường Đại học Công Nghệ, TP. Hà Nội, Việt Nam.

3. Đỗ Duy Phúc, 2012. Tìm hiểu mạng xã hội và các kỹ thuật phân tích. Báo cáo mơn học cơ sở dữ liệu nâng cao, Đại học quốc gia Tp. Hồ Chí Minh – Trường Đại học Cơng Nghệ Thơng Tin, TP. Hồ Chí Minh, Việt Nam. Tiếng Anh

4. Santo Fortunato, 2010. Community detection in graphs“ ”, Physics

Report 486 (3–5): 75 174. –

5. Ala Berzinji., Lisa Kaati., and Ahmed Rezine, 2012. “Detecting key players in Terrorist Networks”, European Intelligence and Security Informatics

Conference: 297 – 302

6. Stephen P.Borgatti, 2006. “Indetifying sets of key players in a social network”, Comput Math Organiz Theor 12: 21 – 34.

7. Tyler Derr., Yao Ma., and Jiliang Tang, 2018. “Signed graph convolutional network”, IEEE International Conference on Data Mining: 929 934– .

8. M. Girvan., and M. E. J. Newman , 2002. "Community structure in social and biological networks". Proc. Natl. Acad. Sci. USA. 99 (12): 7821 7826. – 9. D.Hansen., B.Shneiderman., and Smith MA, 2011. Social network analysis:

measuring, mapping, and modeling collections of connections. In: Analyzing

social media networks with NodeXL: insights from a connected world (Eds.

D.Hansen, B.Shneiderman., and Smith MA . Elsevier Inc, Burlington, pp. )

31–52.

10. M. E. J. Newman, 2006. “Modularity and community struture in networks”. Proceedings of the National Academy of Sciences of the United

States of America 103 (23): 8577 8696.

11. R. V. Guha., R. Kumar., P. Raghavan., A. Tomkins, 2004. Propagation of “ trust and distrust”. Proc. WWW.

12. F. Heider, 1946. Attitudes and cognitive organization . “ ” Journal of Psychology 21:107 112.

13. M. E. J. Newman, 20 . 13“Community detection and graph partitioning”. A letters Journal Exploring the Frontiers of Physics 103 (2) : 28003.

14. John Scott, 1991. Social network analysis: a Handbook. London: SAGE publications .

15. Jure Leskovec., Daniel Huttenlocher., and Jon Kleinberg, 2010. “Signed network in social media” . In ACM Press the 28th international conference,

10-15 April, 2010. Atlanta, GA, USA.

16.Xie, Jierui., and Szymanski, Boleslaw K, 2011. “Community detection using a neighborhood strength driven Label Propagation Algorithm . In ”

IEEE 2011 IEEE Network Science Workshop (NSW), 22-24 June, 2011.

17.D. J. Watts., and Steven Strogatz, 1998. Collective dynamics of “ ‘small- world’ networks . ” Nature 393 (6684): 440 442. –

18. Cartwright., and D. F.Harary, 1956 Structural balance: a generalization of . “ Heider’s theory , ” Psychological Review 63: 277-293

19.J. Bagrow., and E. Bollt, 2005. “A local method for detecting communities”

Phys. Rev. E (72): 046108.

Website

20. Kernix Lab, 2016. “Community detection in social network”, May 2020. Ho Chi Minh City, Vietnam.

<URL: https://www.kernix.com/article/community-detection-in-social- networks/>

21. Omar Lizardo., and Isaac Julbert, 2020. “Social network: An introduction”, May 2020. Ho Chi Minh City, Vietnam.

<URL: https://bookdown.org/omarlizardo/_main/>

22. Neo4j Community. “Node similarity”, Neo4j, May 2020. Ho Chi Minh City, Vietnam.

<URL: https://neo4j.com/docs/graph-algorithms/current/algorithms/node- similarity/>

23.Wikipedia Community, 2020. “Clustering coefficient”, Wikipedia, May 2020. Ho Chi Minh City, Vietnam.

TỰ ĐÁNH GIÁ

Requirements Score /10 Level 1 Level 2 Level 3 Self-

evaluation Reason(s) 0 score 1/2 score Full score

1/ Report 8.0

In right format 1.0 Wrong format and outlines Some errors In right format and outlines, no error 1 Chapter 1 1.0 Not enough content, bad written, no example Full contents, not very well written, not enough examples Full contents, well written, with examples 0.75 Không đủ thời gian Chapter 2 2.0 Not enough content, bad written, no example Full contents, not very well written, not enough examples Full contents, well written, with examples 1.75 Không đủ thời gian Chapter 3 2.0 Not enough content, bad written, no example Full contents, not very well written, not enough examples Full contents, well written, with examples

1.5 Không đủ thời gian

Chapter 4 1.0 Not enough content, bad written, no example Full contents, not very well written, not enough examples Full contents, well written, with examples 1

Chapter 5 0.5 Not enough content, bad written

Full

Requirements Score /10 Level 1 Level 2 Level 3 Self-

evaluation Reason(s) 0 score 1/2 score Full score

not very

well written well written

References 0.5 No reference Wrong format, < 3 references Right format, ≥ 3 references 0.5 2/ Demo 2.0 Contents 1.0 Demo ≤ 1 fomula /algorithm Demo up to 3 fomulas or algorithms Demo ≥ 5 fomulas or algorithms 1

Program 1.0 Cannot be compiled

Runtime error for 1 fomula or algorithm Can be run correctly with no error 0.5 Có thể khơng đúng yêu cầu Total 10.0 Result: 8.5

Một phần của tài liệu Báo cáo cuối kỳ môn toán tổ hợp và đô thị mô hình mạng lưới xã hội (Trang 34)