1. Trang chủ
  2. » Luận Văn - Báo Cáo

Seminar môn học mạng xã hội phân tích và khai phá dữ liệu mạng xã hội bằng ngôn ngữ python

31 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN  Seminar Mơn học: MẠNG Xà HỘI Phân tích khai phá liệu mạng Xã Hội ngôn ngữ Python Giảng viên : Thái Bảo Trân Sinh viên thực hiện: Lê Tuấn Cường-20520146 TP Hồ Chí Minh tháng năm 2023 MỤC LỤC: LỜI MỞ ĐẦU Chương 1: MƠ HÌNH HBA VÀ BIỂU DIỄN Xác định mơ hình mạng xã hội a Các cấu trúc danh sách b Các cấu trúc ma trận .5 Biểu diễn mạng xã hội b%ng python .6  Tạo đồ thị vô hướng tT danh sách kU:  Tạo đồ thị cV hướng tT danh sách kU:  Xem danh sách node:  Xem danh sách cạnh: .8  ChuyXn tT đồ thị sang ma trân: Y  ChuyXn tT đồ thị sang danh sách kU (dạng dictionary):  Tạo đồ thị vô hướng tT ma trân: 10 Y  Tạo đồ thị cV hướng tT ma trân: 11 Y  ChuyXn tT đồ thị sang danh sách cạnh: 11  ChuyXn tT đồ thị sang danh sách kU (dạng list): 12 Chương 2: CÁC ĐẶC TRƯNG CỦA MẠNG 13 Degree distribution P(k) .13 Path distance Distribution 13 Clustering coefficient distribution 13 Community structure 13 Biểu diễn đă 9c trưng b%ng Python 13  BâcY c_a node: 14  V` histogram tT degree: .14  Tam đưbng ngcn nhất: 15  Tính Y se phân cfm: 15 Chương 3: ĐỘ ĐO TRUNG TÂM (CENTRAILITY MEASURES) & TẦM ẢNH HƯỞNG (KEY PLAYERS) 17 Degree centrality 17 Betweenness centrality 17 Closeness centrality .18 Eigenvector 18 Pagerank 18 T?nh toán thuâ 9t toán so sánh b%ng python 19  Tính Degree centrality: 19  Tính Betweenness centrality: .19  Tính Closeness centrality: 20  Tính Eigenvector: 20  Tính Pagerank: .20  So sánh thuâ Yt toán: 21 Chương 4: KHÁM PHÁ CỘNG ĐỒNG(COMMUNITY DETECTION) 22 Girvan-Newman Algorithm 22 Computing Edge Betweenness Efficiently 22 Phân cDm b%ng python 22  ThuâtY toán Girvan-Newman theo se lrn: .22  ThuâtY toán phân cfm theo se phrn ts cho trước: 25 LỜI MỞ ĐẦU Phân tích khai phá liệu mạng xã hội lĩnh vực phát triXn nhanh thbi gian grn Với phát triXn c_a mạng xã hội, lượng liệu sinh ngày lớn đa dạng Việc phân tích khai phá liệu mạng xã hội giúp hiXu rõ vU xu hướng, thVi quen c_a ngưbi dùng mạng xã hội Đồng thbi, nV giúp doanh nghiệp hiXu rõ vU khách hàng c_a manh tT đV đưa chiến lược kinh doanh phù hợp Python ngôn ngữ lập tranh phổ biến ss dfng rộng rãi phân tích liệu mạng xã hội ĐX bct đru phân tích khai phá liệu mạng xã hội Python, ngưbi crn cV kiến thức vU Python thư viện phổ biến NetworkX, Pandas Matplotlib Một ví df vU cách ss dfng Python đX phân tích liệu mạng xã hội ss dfng thư viện NetworkX đX tạo đồ thị mạng xã hội tT tệp CSV chứa thông tin vU liên kết ngưbi dùng mạng xã hội Sau đV, ngưbi cV thX ss dfng công cf khác đX phân tích đồ thị tam thông tin quan trọng vU mạng xã hội Báo cáo vU seminar s` giúp ngưbi cV thêm thông tin chi tiết hiXu thực việc phân tích liệu Mạng xã hội ngôn ngữ Python Cf thX thư viện NetworkX Nguồn tham khảo trang: https://networkx.org/ Chương 1: MƠ HÌNH H6A VÀ BIỂU DIỄN Xác định mơ hình mạng xã hội Cho đồ thị G: Trong lý thuyết đồ thị, đồ thị cV thX biXu diễn cách chính: a Các cấu trúc danh sách -Danh sách cạnh (Edge list) - Mỗi cạnh c_a đồ thị lưu danh sách dạng că Yp đ†nh (gồm đ†nh bct đru đ†nh tới ).Các cạnh c_a đồ thị cV thX lưu danh sách riêng (cV thX cài đặt mảng (array)) Danh sách cạnh cho G: Egde e1 e2 e3 e4 e5 Src_node Targt_node 3 -Danh sách kU (Adjacency list) - Mỗi đ†nh c_a đồ thị cV danh sách đ†nh kU nV (nghĩa cV cạnh nei tT đ†nh đến đ†nh đV) Danh sách kU cho G: Node Adjacence 3,4 1 b Các cấu trúc ma trận - Ma trận liên thuộc (Incidence matrix) - Đồ thị biXu diễn ma trận [bij] kích thước p × q, đV p se đ†nh q se cạnh, bij={-1/0/1} chứa liệu vU quan hệ đ†nh vi cạnh ej Đơn giản nhất: bij=1 cạnh ej hướng khỏi đ†nh vi , bij= -1 cạnh ej hướng vào đ†nh vi , trưbng hợp khác Ma trâ Yn liên thuô Yc cho G: e1 -1 e2 -1 e3 -1 e4 -1 0 e5 -1 0 -Ma trận kU (Adjacency matrix) - ma trận N × N, đV N se đ†nh c_a đồ thị Nếu cV cạnh đV nei đ†nh vi với đ†nh vj tha phrn ts Mij 1, không, nV cV giá trị Cấu trúc tạo thuận lợi cho việc tam đồ thị đX đảo đồ thị Ma trâ Yn kU cho G: 0 1 0 0 0 -Ma trận dẫn nạp (Admittance matrix) ma trận Kirchhoff (Kirchhoff matrix) hay ma trận Laplace (Laplacian matrix) - định nghĩa kết thu lấy ma trận bậc (degree matrix) trừ ma trận kề Do đV, ma trận chứa thông tin vU quan hệ kU (cV cạnh nei hay không) đ†nh lẫn bậc c_a đ†nh đV Ma trâ Yn dẫn nạp cho G: -1 -1 -1 0 -1 -1  Trong đồ thị, ta cần xác định: V: Tập đỉnh (nodes, vertices, agents, actors, players, …) ▪ Trong lý thuyết đồ thị, tập đ†nh gọi tập nút (nodes) ▪ Trong phân tích mạng xã hội, nV cịn biết tập tác nhân (actors) hay tập thực thX (entities),… ▪ Trong mạng xã hội, tập đ†nh đặc trưng cho cấu trúc c_a mạng xã hội, thành viên hay cộng đồng nhVm ngưbi, tổ chức hay quec gia, trang web, nhãn tT khoá hay hanh ảnh, video,… E: Tập cạnh, liên kết (edges, links, ties) ▪ Trong MXH, tập cạnh đặc trưng cho mei liên kết (Link) hay mei quan hệ tập đ†nh mạng Mỗi cạnh ta cV thX hiXu đưbng nei hai đ†nh với ▪ Dựa sở lý thuyết đồ thị, ta chia tập cạnh loại: Đei với đồ thị cV hướng: Tập cạnh dạng trực tiếp, biXu diễn đưbng thẳng cV hướng (xác định hướng theo chiUu mũi tên) Đei với đồ thị vô hướng: Tập cạnh dạng gián tiếp, biXu diễn đưbng thẳng vô hướng (không cV chiUu mũi tên) Biểu diễn mạng xã hội b*ng python Ở ta ch† tâ Yp trung vào ss dfng ma trâ Yn kU danh sách cạnh đX xây dựng đồ thị Cho danh sách cạnh sau: Src_node Targt_node A B A C B D B E C G C F D A D H E A E H F A G A H A Weight 12 27 df= pd.read_csv('input1.csv',header=None) df.columns =['source','target','weight'] Ta df:  TGo đồ thị vô hướng tM danh sách cGnh: G=nx.from_pandas_edgelist(df, source='source', target='target', edge_attr='weight', create_using=None, edge_key=None) nx.draw(G, with_labels=True)  TGo đồ thị cN hướng tM danh sách cGnh: G=nx.from_pandas_edgelist(df, source='source', target='target', edge_attr='weight', create_using=nx.DiGraph(), edge_key=None) nx.draw(G, with_labels=True)  Xem danh sách node: node_list=sorted(list(set(G.nodes))) Kết quả:  Xem danh sách cGnh: edge_list=sorted(list(set(G.edges))) Kết quả:  ChuyQn tM đồ thị sang ma trâ n:R plt.subplot(1, 2, 2) plt.title('Normalized degree histogram G') plt.bar(list(range(len(deg_his_per_lst))),deg_his_per_lst,color ='maroon', width = 0.3) plt.xlabel("k") plt.ylabel("P(k)") plt.xticks(list(range(len(deg_his_per_lst)))) plt.subplot(1, 2, 1) plt.title('Degree histogram G') plt.bar(list(range(len(deg_his_lst))),deg_his_lst,color ='blue', width = 0.3) plt.xlabel("degree") plt.ylabel("Nums of Node") plt.xticks(list(range(len(deg_his_lst)))) plt.show() Kết quả:  T_m đường ng`n nhất: Trong python thuâ Yt toán tam đưbng ngcn cV phương pháp (method=[‘dijkstra’, ‘bellman-ford’].Tùy thuôcY vào phương pháp muen ss dfng mà gán giá trị method phù hợp short_part=dict(nx.shortest_path_length(G, source=None, target=None, weight=None, method='bellman-ford')) Kết quả:  Tính R sa phân ccm: Hê Y se phân cfm cho tTng node tính sau: cluster_coef=nx.clustering(G, nodes=None, weight=None) Kết quả: Ngồi ra, ta cV thX tính hêseY phân cfm trung banh: avg_cluster_coef=nx.average_clustering(G) Kết quả: Chương 3: ĐỘ ĐO TRUNG TÂM (CENTRAILITY MEASURES) & TẦM ẢNH HƯỞNG (KEY PLAYERS) Degree centrality Degree centrality c_a đ†nh tổng se liên kết tới đ†nh đV đồ thị (tổng se cạnh kU c_a đ†nh) Trưbng hợp đồ thị cV hướng, degree centrality tính giá trị: in-degree out-degree In-degree: tổng se liên kết tT node khác đến node xét Out-degree: tổng se liên kết tT node xét đến node khác Ta cV công thức tổng quát: Trong đV: u: đ†nh xét V: tập đ†nh E: tập cạnh: n: se đ†nh c_a đồ thị Degree centrality dùng đX xác định node cV thX lan truyUn thông tin nhanh, cV khả gây ảnh hưởng trực tiếp đến node xung quanh Một thực thX cV giá trị degree centrality cao: Là ngưbi hoạt động tích cực tiếng Là đru nei quan trọng CV vị trí thuận lợi CV trm ảnh hưởng Betweenness centrality Betweenness centrality c_a đ†nh tính tổng se đưbng ngcn ngang qua đ†nh xét chia cho tổng se đưbng ngcn c_a toàn mạng Betweeness Centrality c_a đ†nh u, ký hiệu CB(u), độ đo dùng đX xem xét khả chi phei quan hệ nút khác mạng Khả u tham gia vào mei liên lạc hay đưbng s t tính sau: Trong đV: σst(u): se đưbng ngcn s t cV chứa u (s≠u≠ t) σst : tổng se đưbng ngcn s t (s ≠ u ≠ t) Cơng thức tính Betweenness Centrality c_a đ†nh u: Cho đồ thị G = (V, E) cV n đ†nh: Theo dạng chuẩn: Một node cV độ đo Betweenness Centrality cao tha: Giữ vị trí đặc biệt quan trọng trm ảnh hưởng lớn mạng Nếu node bị loại bỏ tha s` gây tan rã cấu trúc c_a mạng, tức node s` khơng cịn cV thX trao đôi thông tin liên lạc với Closeness centrality Closeness centrality độ đo khoảng cách tT đ†nh đến đ†nh lại đồ thị Cách 1: Closeness centrality tính trị nghịch đảo c_a tổng se khoảng cách ngcn tT đ†nh đến tất đ†nh lại c_a đồ thị Trong đV: d(u,v) đưbng ngcn tT u tới v Cách 2:Closeness centrality tính banh quân c_a tổng se khoảng cách ngcn tT đ†nh đến tất đ†nh lại Trong đV: d(u,v) đưbng ngcn tT u tới v Một thực thX cV giá trị closeness centrality tet nhất(cao nhất): CV thX truy xuất nhanh chVng đến thực thX khác mạng CV đưbng ngcn đến nhiUu thực thX khác Eigenvector Eigenvector cho biết mức độ kết nei c_a nút đV với nút kết nei dày đặc khác Cách tính eigenvector [x]: Gọi A ma trận tạo tT đồ thị G = (V, E) Tam eigenvalue λ cách giải det (A-λI) = Thay λ vTa tam vào A-λI = B Giải: B x [x]=[0] Ta tam eigenvector [x] Cách khác: Ss dfng công thức: AD-1x = x Tiến hành chạy vòng lặp: AD-1xi-1=xi xi-1 = xi tha dTng Pagerank Page Rank (thứ hạng trang web): Xếp hạng trang fanpage dựa theo mức độ thưbng xuyên c_a user nhấp vào đưbng dẫn (tự nhiên) tới trang fanpage Cơng thức tính pagerank cho node A: Trong đV: d: hệ se giảm chấn (damping factor) T: node trỏ tới A PR(T) : t† lệ trước c_a node trỏ tới A C(T): se node mà node T trỏ T?nh toán tht:tốn so sánh b*ng python  Tính Degree centrality: Cài đă Yt thuâtY toán: deg_cen=nx.degree_centrality(G) deg_cen_sorted=sorted(deg_cen.items(), key=lambda x:x[1],reverse=True) deg_cen_df=pd.DataFrame(deg_cen_sorted, columns=['node','degree_centrality']) Kết quả:  Tính Betweenness centrality: Cài đă Yt thuâtY toán: bet_cen=nx.betweenness_centrality(G, k=None, normalized=True, weight=None, endpoints=False, seed=None) bet_cen_sorted=sorted(bet_cen.items(), key=lambda x:x[1],reverse=True) bet_cen_df=pd.DataFrame(bet_cen_sorted, columns=['node','betweeness_centrality']) Kết quả:  Tính Closeness centrality: Cài đă Yt thuâtY toán: close_cen=nx.closeness_centrality(G, u=None, distance=None, wf_improved=True) close_cen_sorted=sorted(close_cen.items(), key=lambda x:x[1],reverse=True) close_cen_df=pd.DataFrame(close_cen_sorted, columns=['node','closeness_centrality']) Kết quả:  Tính Eigenvector: Cài đă Yt thuâtY toán: eig_cen=nx.eigenvector_centrality(G, max_iter=100, tol=1e-06, nstart=None, weight=None) eig_cen_sorted=sorted(eig_cen.items(), key=lambda x:x[1],reverse=True) eig_cen_df=pd.DataFrame(eig_cen_sorted, columns=['node','eigenvector_centrality']) Kết quả:  Tính Pagerank: Cài đă Yt thuâtY toán (với Y se damping d=0.85): page_r=nx.pagerank(G, alpha=0.85, personalization=None, max_iter=100, tol=1e-06, nstart=None, weight='weight', dangling=None) page_r_sorted=sorted(page_r.items(), key=lambda x:x[1],reverse=True) page_r_df=pd.DataFrame(page_r_sorted, columns=['node','pagerank']) Kết quả:  So sánh gila thuâ R t toán: Code: compare_data={'degree_centrality':deg_cen_df['node'],'betweenness_centrality':bet_cen_df['node '],'closeness_centrality':close_cen_df['node'],'eigenvector':eig_cen_df['node'],'pagerank':pag e_r_df['node']} compare_df=pd.DataFrame(compare_data) compare_df Kết quả: ð Như vâ 9y, key player cho đL thị G node A Chương 4: KHÁM PHÁ CỘNG ĐỒNG(COMMUNITY DETECTION) Khái niệm: cộng đồng- định nghĩa tập thực thX cV tính chất tương tự và/hoặc đVng vai trò mạng xã hội TT mạng xã hội cho trước, phát cấu trúc cộng đồng tam hiXu vU mei liên hệ bên cộng đồng cộng đồng với nhau, mei liên hệ đV cV ảnh hưởng đến cấu trúc c_a toàn mạng xã hội Girvan-Newman Algorithm Edge betweenness:Se đưbng ngcn qua cạnh đV Cách thực hiê Yn: -Tính edge betweenness c_a tất cạnh -Loại bỏ cạnh cV edge betweenness cao -Lặp lại bước biXu đồ phân chia thành nhiUu vùng mong muen Computing Edge Betweenness Efficiently Đei với nút N biXu đồ: -Thực tam kiếm theo chiUu rộng c_a đồ thị bct đru tT nút N -Xác định se lượng đưbng ngcn tT N đến nút khác -Dựa se này, xác định lượng luồng tT N đến tất nút khác ss dfng cạnh Chia tổng lưu lượng c_a tất cạnh cho Phân cEm b*ng python Cho đồ thị:  Thuâ Rt toán Girvan-Newman theo sa lon: Ở thuâtY toán s` dùng đồ thị chạy thuâ Yt toán Girvan-Newman xVa cạnh cV betweenness centrality cao Cài đă Yt thuâtY toán: edge_bc=nx.edge_betweenness_centrality(G5, k=None, normalized=True, weight=None, seed=None) values=[value for value in edge_bc.values()] keys=[key for key in edge_bc.keys()] lst_max=[] max=values[0] lst_max.append(0) for i in range (1,len(values)): if (values[i]>max): max=values[i] lst_max.clear() lst_max.append(i) elif (values[i]== max): lst_max.append(i) print('canh bi xoa:' + str([keys[i] for i in lst_max])) for i in lst_max: G5.remove_edge(*keys[i]) nx.draw(G5, with_labels=True) Kết quả: Lrn 1: Lrn 2: Lrn 3: Lrn 4: Lrn 5: Lrn 6: Lrn 7:  Thuâ Rt toán phân ccm theo sa phon cho trước: Ở thuâtY toán này, đồ thị s` chia theo se phrn ts định s¡n (n) Tức là, đồ thị s` chia thành đồ thị nhỏ liên thông với se phrn ts nhỏ hoă Y c n Giải thuât:Y -B1:LâpY danh sách S lưu đồ thị liên thông cV G -B2:Nếu danh sách không cV đồ thị cV se phrn ts > n, đến B5 -B3:Xét tTng đồ thị liên thông nhỏ S thành phrn c_a đồ thị lớn G, đồ thị S cV se node lớn n tha ta thực hiênY thuâ Yt toán Girvan-Newman -B4:CâpY nhâ tY lại danh sách S Sau đV, quay lại bước -B5: Kết thúc Cài đă Yt thuâtY toán: def cond(list,a): for i in list: if(i > a): return True return False devide_val=4 # gia tri s ôphâ n t ư (n) S = [G6.subgraph(c).copy() for c in nx.connected_components(G6)] len_S=[len(m)for m in S] while(cond(len_S,devide_val)): for j in range(len(S)): if(len(S[j])>devide_val): edge_bc_G6=nx.edge_betweenness_centrality(S[j], k=None, normalized=True, weight=None, seed=None) values=[value for value in edge_bc_G6.values()] keys=[key for key in edge_bc_G6.keys()] lst_max=[] max=values[0] lst_max.append(0) for i in range (1,len(values)): if (values[i]>max): max=values[i] lst_max.clear() lst_max.append(i) elif (values[i]== max): lst_max.append(i) print('canh bi xoa:' + str([keys[i] for i in lst_max])) for i in lst_max: G6.remove_edge(*keys[i]) S = [G6.subgraph(c).copy() for c in nx.connected_components(G6)] len_S=[len(m)for m in S] nx.draw(G6, with_labels=True) Kết quả: n=7 n=6 n=5 n=4 n=3 n=2 n=1 :

Ngày đăng: 17/08/2023, 10:33

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w