提交 55b678be 编写于 作者: W wizardforcel

4.2~3

上级 c8f9978b
......@@ -102,3 +102,118 @@ L = estimate_path_lengths(fb)
平均路径为`3.7`,在 4000 多个用户的网络中相当短。毕竟这是一个小世界。
现在让我们看看是否可以构建一个 WS 图,与此网络具有相同特征。
## 4.2 WS 模型
在 Facebook 数据集中,每个节点的平均边数约为 22。由于每条边都连接到两个节点,平均度是每个节点边数的两倍:
```py
>>> k = int(round(2*m/n))
>>> k
44
```
我们可以用`n=4039``k=44`创建一个 WS 图。`p=0`时,我们会得到一个环格。
```py
lattice = nx.watts_strogatz_graph(n, k, 0)
```
在这个图中,群聚较高:`C`是 0.73,而在数据集中是 0.61。但是`L`为 46,远远高于数据集!
使用`p=1`我们得到一个随机图:
```py
random_graph = nx.watts_strogatz_graph(n, k, 1)
```
在随机图中,`L`是 2.6,甚至比数据集(3.7)短,但`C`只有 0.011,所以这是不好的。
通过反复试验,我们发现,当`p=0.05`时,我们得到一个高群聚和短路径长度的 WS 图:
```py
ws = nx.watts_strogatz_graph(n, k, 0.05, seed=15)
```
在这个图中`C``0.63`,比数据集高一点,`L`是 3.2,比数据集低一点。所以这个图很好地模拟了数据集的小世界特征。
到现在为止还不错。
## 4.3 度
![](img/4-1.png)
> 图 4.1:Facebook 数据集和 WS 模型中的度的 PMF。
回想一下,节点的度是它连接到的邻居的数量。如果 WS 图是 Facebook 网络的一个很好的模型,它应该具有相同的总(或平均)度,理想情况下不同节点的度数相同。
这个函数返回图中的度的列表,每个节点对应一项:
```py
def degrees(G):
return [G.degree(u) for u in G]
```
数据集的平均度是 43.7;WS 模型的平均度是 44.到目前为止还不错。
但是,WS 模型的度的标准差为 1.5;数据的标准差是 52.4。有点糟。
这里发生了什么?为了更好地查看,我们必须看看度的 分布,而不仅仅是均值和标准差。
我将用一个 Pmf 对象来表示度数的分布,它在`thinkstats2`模块中定义。Pmf 代表“概率质量函数”;如果你不熟悉这个概念,你可以阅读 Think Stats 第二版的第三章,网址是 <http://greenteapress.com/thinkstats2/html/thinkstats2004.html>
简而言之,Pmf 是值到概率的映射。Pmf度是每个可能的度`d`,到度为`d`的节点比例的映射。
作为一个例子,我将构建一个图,拥有节点`1, 2, 3`,连接到中心节点`0`
```py
G = nx.Graph()
G.add_edge(1, 0)
G.add_edge(2, 0)
G.add_edge(3, 0)
nx.draw(G)
```
这里是图的度列表:
```py
>>> degrees(G)
[3, 1, 1, 1]
```
节点`0`度为 3,其它度为 1。现在我可以生成一个 Pmf,它表示这个度的分布:
```py
>>> from thinkstats2 import Pmf
>>> Pmf(degrees(G))
Pmf({1: 0.75, 3: 0.25})
```
产生的`Pmf`是一个对象,将每个度映射到一个比例或概率。在这个例子中,75%的节点度为 1,25%度为 3。
现在我们生成一个`Pmf`,包含来自数据集的节点的度,并计算均值和标准差:
```py
>>> pmf_ws = Pmf(degrees(ws))
>>> pmf_ws.mean(), pmf_ws.std()
(44.000, 1.465)
```
我们可以使用`thinkplot`模块来绘制结果:
```py
thinkplot.Pdf(pmf_fb, label='Facebook')
thinkplot.Pdf(pmf_ws, label='WS graph')
```
图(?)显示了这两个分布。他们是非常不同的。
在 WS 模型中,大多数用户有大约 44 个朋友;最小值是 38,最大值是 50。这个变化不大。在数据集中,有很多用户只有 1 或 2 个朋友,但有一个人有 1000 多个!
像这样的分布,有许多小的值和一些非常大的值,被称为重尾。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册