cd_index#

cd_index(G, node, time_delta, *, time='time', weight=None)[source]#

计算图 G 中节点 node 的 CD 指数。

计算给定图节点的 CD 指数,仅考虑其具有 time 属性小于或等于 nodetime 属性加上 time_delta 的前驱节点。

Parameters:
G

一个有向的 networkx 图,其节点具有 time 属性,并且可选地具有 weight 属性(如果未给出权重,则视为 1)。

node节点

计算 CD 指数的节点。

time_delta数值或 timedelta

nodetime 属性之后的时间量。 time_delta 的值必须支持与 time 节点属性的比较。例如,如果节点的 time 属性是 datetime.datetime 对象,则 time_delta 应为 datetime.timedelta 对象。

time字符串(可选,默认为 “time”)

用于计算的节点属性的名称。

weight字符串(可选,默认为 None)

用作权重的节点属性的名称。

Returns:
float

在图 G 中为节点 node 计算的 CD 指数。

Raises:
NetworkXError

如果并非所有节点都具有 time 属性,或者 time_deltatime 属性类型不兼容,或者 n 等于 0。

NetworkXNotImplemented

如果 G 是非有向图或多图。

Notes

此方法实现了计算 CD 指数的算法,如 Funk 和 Owen-Smith 的论文 [1] 所述。CD 指数用于检查专利是巩固还是破坏性的,因此图的节点代表专利,边显示这些专利之间的引用。数学模型如下:

\[CD_{t}=\frac{1}{n_{t}}\sum_{i=1}^{n}\frac{-2f_{it}b_{it}+f_{it}}{w_{it}},\]

其中 f_{it} 如果 i 引用焦点专利则为 1,否则为 0, b_{it} 如果 i 引用任何焦点专利的后继者则为 1,否则为 0, n_{t}i 中的前向引用数量, w_{it} 是专利 i 在时间 t 的权重矩阵。

datetime.timedelta 包在从年转换为天时可能导致差一错误。在上面的示例中, timedelta(days=5 * 365) 看起来像 5 年,但实际上不是因为闰年天数。因此它给出了与 timedelta(days=4 * 365) 相同的结果。但是使用 timedelta(days=5 * 365 + 1) 给出了 5 年的增量 对于这个年份选择,但如果 5 年间隔有超过 1 个闰年则可能不适用。为了避免这些问题,使用整数表示年份,或者在转换时间单位时要非常小心。

References

[1]

Funk, Russell J., and Jason Owen-Smith. “A dynamic network measure of technological change.” Management science 63, no. 3 (2017): 791-817. http://russellfunk.org/cdindex/static/papers/funk_ms_2017.pdf

Examples

>>> from datetime import datetime, timedelta
>>> G = nx.DiGraph()
>>> nodes = {
...     1: {"time": datetime(2015, 1, 1)},
...     2: {"time": datetime(2012, 1, 1), "weight": 4},
...     3: {"time": datetime(2010, 1, 1)},
...     4: {"time": datetime(2008, 1, 1)},
...     5: {"time": datetime(2014, 1, 1)},
... }
>>> G.add_nodes_from([(n, nodes[n]) for n in nodes])
>>> edges = [(1, 3), (1, 4), (2, 3), (3, 4), (3, 5)]
>>> G.add_edges_from(edges)
>>> delta = timedelta(days=5 * 365)
>>> nx.cd_index(G, 3, time_delta=delta, time="time")
0.5
>>> nx.cd_index(G, 3, time_delta=delta, time="time", weight="weight")
0.12

时间值也可以使用整数: >>> node_times = {1: 2015, 2: 2012, 3: 2010, 4: 2008, 5: 2014} >>> nx.set_node_attributes(G, node_times, “new_time”) >>> nx.cd_index(G, 3, time_delta=4, time=”new_time”) 0.5 >>> nx.cd_index(G, 3, time_delta=4, time=”new_time”, weight=”weight”) 0.12