社交网络分析(Social Network Analysis in Python)①

简介: 今天的网络是我们日常生活的一部分。 让我们学习如何使用网络在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')
img_e65fa88c695b76516420a992eda4b4d2.png

不对称网络

如果节点之间的关系是'孩子',那么关系就不再是对称的。 如果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)
img_5c98be5f7643ac959fe844c7f25f20be.png

加权网络
到目前为止,我们的网络没有权重,但网络可能是用权重制作的,例如,如果在我们的初始网络中我们将一起完成的电影数量视为权重,我们将获得一个加权网络。 让我们再次演绎演员,但这次我们为网络增加了重量,每个边缘都有一个重量,表示他们一起完成的电影数量。

# 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)
img_4bbc0d4ad0e1f32f6a8d86e074840ee3.png

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)
img_8f4be95e23e93f30e10dfe1280e8a6d9.png

偏心率

节点A的偏心率被定义为A和所有其他节点之间的最大距离。 可以使用nx.eccentricity()函数找到它。 在对称的Actor网络中,Dev Anand的偏心率为2,而Abhishek Bachchan的偏心率为1(它与所有人相连)。

目录
相关文章
|
7天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
8天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
25 2
|
15天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
59 6
|
19天前
|
安全 网络安全 数据安全/隐私保护
|
25天前
|
存储 网络安全 数据安全/隐私保护
|
25天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
9天前
|
存储 安全 网络安全
网络安全法律框架:全球视角下的合规性分析
网络安全法律框架:全球视角下的合规性分析
20 1
|
9天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
16天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
61 7
|
16天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
26 3