0

从网络中,我想绘制两个节点连接的概率作为它们彼此距离的函数。

我有两个熊猫系列,一个 ( distance) 是每对节点之间的距离,另一个 ( adjacency) 用零和一填充,并告诉节点是否已连接。

我的想法是使用cutvalue_counts首先计算在箱内有距离的对的数量,这很好用:

factor = pandas.cut(distance, 100)
num_bin = pandas.value_counts(factor)

num_bin现在,如果有一个与每个箱内连接节点数相同大小的向量,我就会有我的概率。但是如何计算这个向量?

我的问题是如何知道,让我们说第二个 bin 内的 3 对节点,有多少是连接的?

谢谢

4

1 回答 1

3

你可以用crosstab这个:

import numpy as np
import pandas as pd

factor = pd.cut(distance, 100)

# the crosstab dataframe with the value counts in each bucket
ct = pd.crosstab(factor, adjacency, margins=True,
                 rownames=['distance'], colnames=['adjacency'])

# from here computing the probability of nodes being adjacent is straightforward
ct['prob'] = np.true_divide(ct[1], ct['All'])

这给出了这种形式的数据框:

>>> ct

adjacency           0    1  All      prob
distance
(0.00685, 0.107]    7    4   11  0.363636
(0.107, 0.205]      6    9   15  0.600000
(0.205, 0.304]      6    6   12  0.500000
(0.304, 0.403]      5    2    7  0.285714
(0.403, 0.502]      4    6   10  0.600000
(0.502, 0.6]        8    3   11  0.272727
(0.6, 0.699]        6    2    8  0.250000
(0.699, 0.798]      4    6   10  0.600000
(0.798, 0.896]      4    5    9  0.555556
(0.896, 0.995]      5    2    7  0.285714
All                55   45  100  0.450000
于 2013-03-21T13:12:00.667 回答