Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >知识图谱之社交网络分析(SNA)之python处理

知识图谱之社交网络分析(SNA)之python处理

作者头像
学到老
发布于 2019-01-25 03:27:18
发布于 2019-01-25 03:27:18
3.9K00
代码可运行
举报
运行总次数:0
代码可运行

知识图谱如火如荼,首先推荐在python下进行社交网络分析networkx

建立图网络

无向图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
G = nx.Graph()                                        #建立一个空的无向图G
G.add_node(1)                                        #添加一个节点1
G.add_edge(2,3)                                     #添加一条边2-3(隐含着添加了两个节点23G.add_edge(3,2)                                     #对于无向图,边3-2与边2-3被认为是一条边
print (G.nodes())                                       #输出全部的节点: [1, 2, 3]
print (G.edges())                                       #输出全部的边:[(2, 3)]
print (G.number_of_edges())                    #输出边的数量:1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1, 2, 3]
[(2, 3)]
1
有向图

将G = nx.Graph() 改为 G = nx.DiGraph()即进行有向图,表示不同的边

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
G = nx.DiGraph()                                        #建立一个空的无向图G
G.add_node(1)                                        #添加一个节点1
G.add_edge(2,3)                                     #添加一条边2-3(隐含着添加了两个节点23G.add_edge(3,2)                                     #对于无向图,边3-2与边2-3被认为是一条边
print (G.nodes())                                       #输出全部的节点: [1, 2, 3]
print (G.edges())                                       #输出全部的边:[(2, 3), (3, 2)]
print (G.number_of_edges())                    #输出边的数量:

[1, 2, 3]
[(2, 3), (3, 2)]
2

同时,有向图和无向图是可以相互转化的,分别用到Graph.to_undirected() 和 Graph.to_directed()两个方法。

带权图

有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组u,v,w作为参数,其中u是起点,v是终点,w是权重。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])

添加0-1和1-2两条边,权重分别是3.0和7.5。

如果想读取权重,可以使用get_edge_data方法,它接受两个参数u和v,即边的起讫点。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
G = nx.DiGraph()                                        
G.add_node(1)                                        
G.add_edge(2,3)                                     
G.add_edge(3,2)
G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])
print (G.nodes())                                      
print (G.edges())                                      
print (G.number_of_edges())                    

print (G.get_edge_data(1,2))

1, 2, 3, 0

(1, 2), (2, 3), (3, 2), (0, 1)

4

{‘weight’: 7.5}

NetworkX提供了常用的图论经典算法,例如DFS、BFS、最短路、最小生成树、最大流等等

#调用多源最短路径算法,计算图G所有节点间的最短路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path=dict(nx.all_pairs_shortest_path(G))
print (path[0][2])

0, 1, 2

一个完整官方小案例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import networkx as nx
 G = nx.Graph()
G.add_edge('A', 'B', weight=4)
 G.add_edge('B', 'D', weight=2)
 G.add_edge('A', 'C', weight=3)
 G.add_edge('C', 'D', weight=4)
nx.shortest_path(G, 'A', 'D', weight='weight')

‘A’, ‘B’, ‘D’

图数据的保存与绘图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node(1)
G.add_edge(2,3)
G.add_edge(3,2)
nx.write_edgelist(G, path="grid.edgelist", delimiter=":")
# write edgelist to grid.edgelist
nx.write_edgelist(G, path="grid.edgelist", delimiter=":")
# read edgelist from grid.edgelist
H = nx.read_edgelist(path="grid.edgelist", delimiter=":")

nx.draw(H)
plt.show()
数据库基本统计

!usr/bin/env python

* coding:utf-8 *

import matplotlib.pyplot as plt

from networkx import nx

G = nx.lollipop_graph(4, 6)

pathlengths = []

print(“source vertex {target:length, }”)

for v in G.nodes():

代码语言:txt
AI代码解释
复制
 spl = dict(nx.single\_source\_shortest\_path\_length(G, v)) 
代码语言:txt
AI代码解释
复制
 print(‘{} {} ‘.format(v, spl)) 
代码语言:txt
AI代码解释
复制
 for p in spl: 
代码语言:txt
AI代码解释
复制
     pathlengths.append(spl[p])

print(”)

print(“average shortest path length %s” % (sum(pathlengths) / len(pathlengths)))

histogram of path lengths

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dist = {}
for p in pathlengths:
    if p in dist:
        dist[p] += 1
    else:
        dist[p] = 1

print('')
print("length #paths")
verts = dist.keys()
for d in sorted(verts):
    print('%s %d' % (d, dist[d]))

print("radius: %d" % nx.radius(G))
print("diameter: %d" % nx.diameter(G))
print("eccentricity: %s" % nx.eccentricity(G))
print("center: %s" % nx.center(G))
print("periphery: %s" % nx.periphery(G))
print("density: %s" % nx.density(G))

nx.draw(G, with_labels=True)
plt.show()

source vertex {target:length, }

0 {0: 0, 1: 1, 2: 1, 3: 1, 4: 2, 5: 3, 6: 4, 7: 5, 8: 6, 9: 7}

1 {1: 0, 0: 1, 2: 1, 3: 1, 4: 2, 5: 3, 6: 4, 7: 5, 8: 6, 9: 7}

2 {2: 0, 0: 1, 1: 1, 3: 1, 4: 2, 5: 3, 6: 4, 7: 5, 8: 6, 9: 7}

3 {3: 0, 0: 1, 1: 1, 2: 1, 4: 1, 5: 2, 6: 3, 7: 4, 8: 5, 9: 6}

4 {4: 0, 5: 1, 3: 1, 6: 2, 0: 2, 1: 2, 2: 2, 7: 3, 8: 4, 9: 5}

5 {5: 0, 4: 1, 6: 1, 3: 2, 7: 2, 0: 3, 1: 3, 2: 3, 8: 3, 9: 4}

6 {6: 0, 5: 1, 7: 1, 4: 2, 8: 2, 3: 3, 9: 3, 0: 4, 1: 4, 2: 4}

7 {7: 0, 6: 1, 8: 1, 5: 2, 9: 2, 4: 3, 3: 4, 0: 5, 1: 5, 2: 5}

8 {8: 0, 7: 1, 9: 1, 6: 2, 5: 3, 4: 4, 3: 5, 0: 6, 1: 6, 2: 6}

9 {9: 0, 8: 1, 7: 2, 6: 3, 5: 4, 4: 5, 3: 6, 0: 7, 1: 7, 2: 7}

average shortest path length 2.86

length #paths

0 10

1 24

2 16

3 14

4 12

5 10

6 8

7 6

radius: 4

diameter: 7

eccentricity: {0: 7, 1: 7, 2: 7, 3: 6, 4: 5, 5: 4, 6: 4, 7: 5, 8: 6, 9: 7}

center: 5, 6

periphery: 0, 1, 2, 9

density: 0.26666666666666666

中心性

关于常用中心性的可以参考直通车

此处翻译来源与网络,如果错误请批评指正

Degree centrality measures.(点度中心性)

degree_centrality(G) Compute the degree centrality for nodes.

in_degree_centrality(G) Compute the in-degree centrality for nodes.

out_degree_centrality(G) Compute the out-degree centrality for nodes.

Closeness centrality measures.(接近中心性)

closeness_centrality(G, v, weighted_edges) Compute closeness centrality for nodes.

Betweenness centrality measures.(中介中心性)

betweenness_centrality(G, normalized, …) Compute betweenness centrality for nodes.

edge_betweenness_centrality(G, normalized, …) Compute betweenness centrality for edges.

Current-flow closeness centrality measures.(流紧密中心性)

current_flow_closeness_centrality(G, …) Compute current-flow closeness centrality for nodes.

Current-Flow Betweenness

Current-flow betweenness centrality measures.(流介数中心性)

current_flow_betweenness_centrality(G, …) Compute current-flow betweenness centrality for nodes.

edge_current_flow_betweenness_centrality(G) Compute current-flow betweenness centrality for edges.

Eigenvector centrality.(特征向量中心性)

eigenvector_centrality(G, max_iter, tol, …) Compute the eigenvector centrality for the graph G.

eigenvector_centrality_numpy(G) Compute the eigenvector centrality for the graph G.

Load centrality.(不知道)

load_centrality(G, v, cutoff, normalized, …) Compute load centrality for nodes.

edge_load(G, nodes, cutoff) Compute edge load.

参看文献:

http://networkx.github.io/

https://github.com/networkx/networkx

https://networkx.github.io/documentation/stable/tutorial/index.html

https://bigdata-ny.github.io/2016/08/12/graph-of-thrones-neo4j-social-network-analysis/

https://blog.csdn.net/nnnnnnnnnnnny/article/details/53701277

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
今天咱们就来聊聊一个特别“接地气”的技术话题——社交网络分析,看看大数据是怎么“看透”你的人际关系网的。
Echo_Wish
2025/04/30
1410
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
基于networkx分析Louvain算法的社团网络划分
一个图G = (V, E)由一些点及点之间的连线(称为边)构成,V、E分别计G的点集合和边集合。在图的概念中,点的空间位置,边的区直长短都无关紧要,重要的是其中有几个点以及那些点之间有变相连。
用户7886150
2020/12/24
3.8K0
[950]networkx(图论)是什么
官方文档:https://www.osgeo.cn/networkx/reference/classes/graph.html#
周小董
2021/03/08
4.1K0
NetworkX,网络结构图最强绘制工具·····
今天给大家介绍Python语言中绘制网络结构图的可视化拓展工具-NetworkX包。NetworkX提供了丰富的数据结构和函数,使得用户能够轻松地构建、分析和可视化复杂网络。
DataCharm
2023/10/17
2.2K0
NetworkX,网络结构图最强绘制工具·····
基于Python的社交网络分析与图论算法实践
社交网络分析和图论算法在理解和分析复杂网络结构方面发挥着重要作用。本文将介绍如何使用Python和相关库进行社交网络分析,并实现一些常用的图论算法。我们将涵盖从网络构建和可视化到基本的算法应用的全过程。
一键难忘
2024/10/08
7440
Python社交网络——NetworkX入门
实例来自:https://www.cnblogs.com/yu-liang/p/9117643.html
里克贝斯
2021/05/21
1.7K0
Python社交网络——NetworkX入门
知识图谱入门:使用Python创建知识图,分析并训练嵌入模型
接下来,创建一个NetworkX图(G)来表示KG。DataFrame (df)中的每一行都对应于KG中的三元组(头、关系、尾)。add_edge函数在头部和尾部实体之间添加边,关系作为标签。
deephub
2023/08/30
1.1K0
知识图谱入门:使用Python创建知识图,分析并训练嵌入模型
基于Python的社交网络分析与实践
社交网络分析(Social Network Analysis,简写为SNA),又称为社会网络分析,是指基于信息学、数学、社会学、管理学、心理学等多学科的融合理论和方法,为理解人类各种社交关系的形成、行为特点分析以及信息传播的规律提供的一种可计算的分析方法。社交网络是由多个节点及其关系所组成的集合,节点通常代表个人或组织,节点之间的边则代表他们的联系或交互。社交网络分析涉及的理论很广泛,有网络科学、复杂网络分析、图神经网络等。
Coder-ZZ
2024/07/25
9120
基于Python的社交网络分析与实践
随机几何图、自我图、四格图和克拉克哈特中心。
import matplotlib.pyplot as plt import networkx as nx G = nx.random_geometric_graph(200, 0.125) # position is stored as node attribute data for random_geometric_graph pos = nx.get_node_attributes(G, 'pos') # find node near center (0.5,0.5) dmin = 1 ncen
裴来凡
2022/05/28
2190
随机几何图、自我图、四格图和克拉克哈特中心。
一文带你入门图论和网络分析(附Python代码)
本文从图的概念以及历史讲起,并介绍了一些必备的术语,随后引入了networkx库,并以一个航班信息数据集为例,带领读者完成了一些基本分析。
数据派THU
2018/08/14
3.3K0
一文带你入门图论和网络分析(附Python代码)
干货!利用Python绘制精美网络关系图
最近发现一个特别好用的python库,能够绘制精美的关系图,俗话说有好东西要学会分享,所以袁厨就肝了这篇文章,大家可以参考一下。
公众号袁厨的算法小屋
2020/11/25
11.5K2
干货!利用Python绘制精美网络关系图
图论与图学习(二):图算法
本文是其中第二篇,介绍了图算法。更多文章和对应代码可访问:https://github.com/maelfabien/Machine_Learning_Tutorials
机器之心
2019/08/06
3.8K0
图论与图学习(二):图算法
斯坦福大学的图神经网络课01
这张图则是介绍了顶点嵌入的目标,就是使嵌入前和嵌入后的两个的相似度保持尽可能的相等。
Tom2Code
2024/01/03
2050
斯坦福大学的图神经网络课01
Python3画图系列——Network
NetworkX 主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。用于分析网络结构,建立网络模型,设计新的网络算法,绘制网络等等。安装networkx看以参见官网 。
py3study
2020/01/20
1K0
图论入门——从基础概念到NetworkX
图(Graph)是一种表示对象之间关系的抽象数据结构。图由节点(Vertex)和边(Edge)组成,节点表示对象,边表示对象之间的关系。图可以用于建模各种实际问题,如社交网络、交通网络、电力网络等。
曼亚灿
2023/12/13
2.7K0
图论入门——从基础概念到NetworkX
【复杂网络】 基础画图【python+networkx】
import networkx as nx import matplotlib.pyplot as plt import math G=nx.Graph() # G=nx.DiGraph()#有向图 # G=nx.MultiGraph() # G=nx.MultiDiGraph() G.add_edge(1,2) G.add_edge(2,3,weight=0.9) G.add_edge('y','x',function=math.cos) G.add_node(math.cos) #图 elist=[
司六米希
2022/11/15
7020
【复杂网络】 基础画图【python+networkx】
PageRank、最小生成树:ML开发者应该了解的五种图算法
在互联世界中,用户不能被视为独立的实体。他们之间存在一定的关系,我们有时希望在构建机器学习模型时考虑到这些关系。
机器之心
2019/09/10
1.1K0
PageRank、最小生成树:ML开发者应该了解的五种图算法
一文读懂Python复杂网络分析库networkx | CSDN博文精选
networkx是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
AI科技大本营
2019/10/21
30.1K0
一文读懂Python复杂网络分析库networkx | CSDN博文精选
人物社交网络分析—平凡的世界
上一期的推送,小F做了一些社交网络分析的前期工作。 传送门:Python数据可视化:平凡的世界 比如获取文本信息,人物信息。 最后生成一个人物出现频数词云图。 本次来完成剩下的工作。 实现《平凡的世界
小F
2020/10/09
1.3K0
人物社交网络分析—平凡的世界
python数据结构之图
在数学中,图是描述于一组对象的结构,其中某些对象对在某种意义上是“相关的”。这些对象对应于称为顶点的数学抽象(也称为节点或点),并且每个相关的顶点对都称为边(也称为链接或线)。通常,图形以图解形式描绘为顶点的一组点或环,并通过边的线或曲线连接。--百度百科
python与大数据分析
2022/03/11
1.6K0
python数据结构之图
推荐阅读
相关推荐
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验