社交网络分析(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(它与所有人相连)。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
spring boot2集成activiti6的问题记录
最近集成activi 6集成到spring boot中,遇到一些问题,记录一二. activiti中的mybaitis版本冲突 集成activit6需引入如下配置 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> 但项目启动报如下错误 Caused by: java.lang.NoSuchFieldError: INSTANCE at com.baomidou.mybatisplus.MybatisMapperAnnotationBuilder.parseStatement(MybatisMapperAnnotationBuilder.java:332) ~[mybatis-plus-core-2.3.jar:?] at com.baomidou.mybat...
-
下一篇
TensorFlow 学习指南 一、基础
原文:LearningTensorFlow.com 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 变量 TensorFlow 是一种表示计算的方式,直到请求时才实际执行。 从这个意义上讲,它是一种延迟计算形式,它能够极大改善代码的运行: 更快地计算复杂变量 跨多个系统的分布式计算,包括 GPU。 减少了某些计算中的冗余 我们来看看实际情况。 首先,一个非常基本的 python 脚本: x = 35 y = x + 5 print(y) 这个脚本基本上只是“创建一个值为35的变量x,将新变量y的值设置为它加上5,当前为40,并将其打印出来”。 运行此程序时将打印出值40。 如果你不熟悉 python,请创建一个名为basic_script.py的新文本文件,并将该代码复制到该文件中。将其保存在你的计算机上并运行它: python basic_script.py 请注意,路径(即basic_script.py)必须指向该文件,因此如果它位于Code文件夹中,则使用: python Code/basic_script.py 此外,请确保已激活 Anaconda 虚拟环...
相关文章
文章评论
共有0条评论来说两句吧...