python做社会网络分析_社交网络分析(Social Network Analysis in Python)①
今天的網絡是我們日常生活的一部分。 讓我們學習如何使用網絡在Python中可視化和理解社交網絡
網絡無處不在,道路網絡,社交媒體上的朋友和關注者網絡以及辦公室同事網絡。 他們在日常生活中發揮著重要作用,從傳播有用信息到影響全國選舉。 分析這些網絡并根據這些網絡做出明智決策的能力是一項對任何數據分析師都很重要的技能。
介紹
首先讓我們從社交網絡的含義開始。 下面你會看到一個寶萊塢演員網絡作為節點。 如果他們在至少一部電影中合作,他們就會用實線連接。所以,我們可以看到Amitabh Bachchan和Abhishek Bachchan都與網絡中的所有演員合作,而Akshay Kumar只與兩個Bachchans合作。 這也是一個社交網絡。 任何具有個人之間聯系的網絡,其中連接捕獲它們之間的關系是社交網絡。 分析這些網絡可以讓我們深入了解網絡中的人,比如誰是真正的影響者,誰是最相關的,等等。
每個網絡包括:
節點:我們正在建立網絡的個人。 上例中的演員。
邊緣:節點之間的連接。 它表示網絡節點之間的關系。 在我們的例子中,關系是演員們一起工作。
使用NetworkX創建網絡
有許多類型的網絡。 我們將使用NetworkX開發和分析這些不同的網絡。 首先,您需要安裝networkX:您可以使用以下任一方法:
pip install networkx
或者如果在Anaconda工作
conda install -c anaconda networkx
這將安裝最新版本的networkx。 本教程中的代碼是在Python = 3.5,NetworkX = 2.0版本上完成的。
對稱網絡
我們在上面創建的第一個演員網絡是對稱網絡,因為“在電影中一起工作”的關系是對稱關系。 如果A與B相關,則B也與A相關。讓我們創建上面在NetworkX中看到的網絡。我們將使用Graph()方法創建新網絡,并使用add_edge()在兩個節點之間添加邊。
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 3 15:43:18 2018
@author: Zihao Chen
"""
% reset -f
% clear
# In[*]
import networkx as nx
G_symmetric = nx.Graph()
G_symmetric.add_edge('Amitabh Bachchan','Abhishek Bachchan')
G_symmetric.add_edge('Amitabh Bachchan','Aamir Khan')
G_symmetric.add_edge('Amitabh Bachchan','Akshay Kumar')
G_symmetric.add_edge('Amitabh Bachchan','Dev Anand')
G_symmetric.add_edge('Abhishek Bachchan','Aamir Khan')
G_symmetric.add_edge('Abhishek Bachchan','Akshay Kumar')
G_symmetric.add_edge('Abhishek Bachchan','Dev Anand')
G_symmetric.add_edge('Dev Anand','Aamir Khan')
不對稱網絡
如果節點之間的關系是'孩子',那么關系就不再是對稱的。 如果A是B的子節點,則B不是A的子節點。這種關系不對稱的網絡(A與B相關,并不一定意味著B與A相關聯)被稱為非對稱網絡。 我們可以使用DiGraph方法在NetworkX中構建非對稱網絡,該方法缺少方向圖。 讓我們制作一個非對稱圖。
# In[*]
% reset -f
% clear
import networkx as nx
# In[*]
G_asymmetric = nx.DiGraph()
G_asymmetric.add_edge('A','B')
G_asymmetric.add_edge('A','D')
G_asymmetric.add_edge('C','A')
G_asymmetric.add_edge('D','E')
# In[*]
nx.spring_layout(G_asymmetric)
nx.draw_networkx(G_asymmetric)
加權網絡
到目前為止,我們的網絡沒有權重,但網絡可能是用權重制作的,例如,如果在我們的初始網絡中我們將一起完成的電影數量視為權重,我們將獲得一個加權網絡。 讓我們再次演繹演員,但這次我們為網絡增加了重量,每個邊緣都有一個重量,表示他們一起完成的電影數量。
# In[*]
% reset -f
% clear
# In[*]
import networkx as nx
G_weighted = nx.Graph()
G_weighted.add_edge('Amitabh Bachchan','Abhishek Bachchan', weight=25)
G_weighted.add_edge('Amitabh Bachchan','Aaamir Khan', weight=8)
G_weighted.add_edge('Amitabh Bachchan','Akshay Kumar', weight=11)
G_weighted.add_edge('Amitabh Bachchan','Dev Anand', weight=1)
G_weighted.add_edge('Abhishek Bachchan','Aaamir Khan', weight=4)
G_weighted.add_edge('Abhishek Bachchan','Akshay Kumar',weight=7)
G_weighted.add_edge('Abhishek Bachchan','Dev Anand', weight=1)
G_weighted.add_edge('Dev Anand','Aaamir Khan',weight=1)
nx.spring_layout(G_weighted)
nx.draw_networkx(G_weighted)
degree
節點的度數定義節點具有的連接數。 NetworkX具有可用于確定網絡中節點程度的功能度。
nx.degree(G_symmetric,'Dev Anand`)
這將返回值3,因為Dev Anand僅與網絡中的三個角色合作。
聚類系數
據觀察,在社交網絡中共享聯系的人傾向于形成關聯。換句話說,社交網絡中存在形成集群的趨勢。我們可以確定節點的集群,Local Clustering Coefficient,它是節點的朋友(即連接)彼此連接的對的一部分。為了確定局部聚類系數,我們使用nx.clustering(Graph,Node)函數。
# In[*]
nx.clustering(G_symmetric, 'Dev Anand')
nx.clustering(G_symmetric,'Abhishek Bachchan')
nx.average_clustering(G_symmetric)
在對稱Actor網絡中,您會發現Dev Anand的局部聚類系數為1,而Abhishek Bachchan的局部聚類系數為0.67。
對稱Actor網絡的平均聚類系數(所有局部聚類系數之和除以節點數)為0.867。
距離
我們還可以分別使用nx.shortest_path(Graph,Node1,Node2)和nx.shortest_path_length(Graph,Node1,Node2)函數確定NetworkX中兩個節點之間的最短路徑及其長度。
nx.shortest_path(G_symmetric, 'Dev Anand', 'Akshay Kumar')
['Dev Anand','Amitabh Bachchan','Akshay Kumar']
我們可以使用廣度優先搜索算法從該節點開始,找到節點與網絡中每個其他節點的距離。 networkX提供了bfs_tree函數來完成它。因此,如果您嘗試T = nx.bfs_tree(G_symmetric,'Dev Anand')并現在繪制此樹,我們將獲得一個網絡結構,告訴我們如何從Dev Anand開始到達網絡的其他節點
# In[*]
T = nx.bfs_tree(G_symmetric, 'Dev Anand')
nx.draw_networkx(T)
偏心率
節點A的偏心率被定義為A和所有其他節點之間的最大距離。 可以使用nx.eccentricity()函數找到它。 在對稱的Actor網絡中,Dev Anand的偏心率為2,而Abhishek Bachchan的偏心率為1(它與所有人相連)。
總結
以上是生活随笔為你收集整理的python做社会网络分析_社交网络分析(Social Network Analysis in Python)①的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将网页保存为图片_如何用浏览器插件一
- 下一篇: itextpdf api帮助文档_我开源