# Python社群纽带关系谱和图神经

<details>

<summary>关键词</summary>

Python | 数学 | 逻辑 | 图论 | 算法 | 图神经网络 | 卷积 | 表征 | 节点 | 模型 | 节点嵌入 | 推荐 | 感知 | 流量 | 注意力模型 | 邻域采样 | 聚合器 | 蛋白质 | 表达性 | 同构图 | 异构图 | 酶 | 化合物 | 时空图 | 递归 | 长短期记忆 | 可解释性 | 积分梯度 | 公路 | 混淆矩阵图 | 协作过滤

</details>

{% embed url="https://viadean.notion.site/Python-c8909a3375104cad8285ce75790c2980" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

### 🎯要点

1. 图神经网络：🎯网络中顶点的潜在表征学习实现：🖊创建节点表征，使用连续skip-gram模型 | 🖊使用节点嵌入算法Node2vec实现，示例：电影筛选推荐系统。🖊多层感知节点和边特征学习分类节点 | 🖊图卷积神经层使用节点回归预测网络流量 | 🖊图注意力网络模型测试自动引文索引系统数据 | 🖊使用邻域采样算法和聚合器归纳学习蛋白质-蛋白质相互作用图数据 | 🖊魏斯费勒·莱曼图同构检验表达性，图同构网络模型从蛋白质图数据分类出酶类型 | 🖊链接预测：变分图自动编码器、使用子图嵌入和属性框架 | 🖊生成图数据：弱表达性图：使用埃尔多斯-雷尼模型，使用小世界模型，强表达性图：生成分子结构图 | 🖊分层自注意力网络（异构图）| 🖊 时空图神经网络：递归图卷积神经网络预测网站流量，多层感知和长短期记忆模型预测感染数量 | 🖊可解释性图神经解释化合物的图表征，实现积分梯度算法解释性图神经社交粉丝群 | 🖊注意力时间图卷积神经预测公路交通流量 | 🖊异构图检测网络攻击，绘制结果多类流分类的混淆矩阵图 | 🖊简化和增强图卷积神经模型协作过滤方法推荐书籍。
2. 图论数学逻辑和代码分析：🖊深度优先遍历算法和广度优先遍历算法巴拉巴西-阿尔伯特模型(无标度网络模型) | 🖊Dijkstra 算法分析瓦茨-斯特罗加茨模型(小世界随机模型) 。🎯社交网络数学逻辑和代码实现：🖊无标度网络模型图和小世界模型图，角色数据采样。🎯节点层分析算法和代码实现：🖊自我网络分析算法分析社区人口，直方图绘制分布程度 | 🖊自我网络分析算法分析巴拉巴西-阿尔伯特模型 | 🖊自我网络分析算法分析节目角色关系谱 | 🖊度中心性算法分析个人社交群中关联个体 | 🖊度中心性算法分析节目中谁是关键角色 | 🖊紧密中心性算法分析个人社交群中个体纽带关系 | 🖊紧密中心性算法分析节目中关键角色间紧密度 | 🖊介数中心性算法分析个人社交群中中间人，节目关键角色中间人 | 🖊特征向量中心性算法分析个人社交群中与关键人联系紧密的，节目中与关键角色紧密的 | 🖊随机链接可能性算法分析社交中可能形成的关系网。🎯群体层分析算法：🖊派系分析社交群中个人类别 | 🖊聚类系数分析社交群体中信任朋友比例 | 🖊传递性分析社群中非关联个体之间的关联可能性 | 🖊层次聚类寻找类似社群 | 🖊块模型分析群体CT检测群体病患分散后小群体病患。

### 🍇Python埃尔多斯-雷尼模型

**模型定义**：此随机图模型有两个密切相关的变体。

* 在 $$G(n, M)$$ 模型中，从具有 n 个节点和 M 个边的所有图的集合中均匀随机选择一个图。节点被认为是有标签的，这意味着通过排列顶点而彼此获得的图被认为是不同的。例如，在 $$G(3,2)$$ 模型中，三个标记顶点上存在三个二边图（二边路径中中间顶点的每个选择一个），并且这三个图中的每一个都是包含概率 $$\frac{1}{3}$$。
* 在$$G(n, p)$$模型中，通过随机连接标记节点来构建图。每条边都以 $$p$$ 的概率包含在图中，且独立于所有其他边。同样，生成具有$$n$$ 个节点和$$M$$ 个边的每个图的概率为 $$p^M(1-p)^{\binom{n}{2}-M}$$ 。

该模型中的参数$$p$$可以被认为是一个加权函数；随着 p 从 0 增加到 1 ，模型变得越来越可能包含具有更多边的图，而越来越不可能包含具有较少边的图。特别是，$$p=\frac{1}{2}$$ 的情况对应于以相等概率选择 n 个顶点上的所有 $$2^{\binom{n}{2}}$$ 图的情况。

随机图的行为通常在顶点数 n 趋于无穷大的情况下进行研究。虽然在这种情况下p和M可以是固定的，但它们也可以是依赖于n的函数。例如，$$G(n, 2 \ln (n) / n)$$ 中的几乎每个图都是连通的，这意味着，当 n 趋于无穷大时，n 上的图与边相连的概率$$2 \ln (n) / n​$$连接的概率趋于 1。

**代码实现**

埃尔多斯-雷尼模型模型用于在社交网络上创建随机网络或图表。在模型中，每条边都有固定的存在和不存在概率，与网络中的边无关。

```python
 import networkx as nx 
 import matplotlib.pyplot as plt 
 import random
```

创建模型的分布图。

```python
 # Distribution graph for Erdos_Renyi model 
 def distribution_graph(g): 
     print(nx.degree(g)) 
     all_node_degree = list(dict((nx.degree(g))).values()) 
 ​
     unique_degree = list(set(all_node_degree)) 
     unique_degree.sort() 
     nodes_with_degree = [] 
     for i in unique_degree: 
         nodes_with_degree.append(all_node_degree.count(i)) 
 ​
     plt.plot(unique_degree, nodes_with_degree) 
     plt.xlabel("Degrees") 
     plt.ylabel("No. of nodes") 
     plt.title("Degree distribution") 
     plt.show()
```

取 N，即用户的节点数。

```python
 print("Enter number of nodes") 
 N = int(input())
```

取 P 即用户获取边缘的概率。

```python
 print("Enter value of probability of every node") 
 P = float(input())
```

创建一个具有 N 个节点且没有任何边的图

```python
 # Create an empty graph object 
 g = nx.Graph() 
 ​
 # Adding nodes 
 g.add_nodes_from(range(1, N + 1))
```

随机向图中添加边，取一对节点，得到一个随机数 R。如果 R\<P（概率），则添加一条边。对所有可能的节点对重复上述步骤，然后显示形成的整个社交网络（图）。

```python
 # Add edges to the graph randomly. 
 for i in g.nodes(): 
     for j in g.nodes(): 
         if (i < j): 
             
             # Take random number R. 
             R = random.random() 
             
             # Check if R<P add the edge 
             # to the graph else ignore. 
             if (R < P): 
                 g.add_edge(i, j) 
     pos = nx.circular_layout(g) 
     
     # Display the social network 
     nx.draw(g, pos, with_labels=1) 
     plt.show()
```

显示连接节点。

```python
 distribution_graph(g)
```
