cd_index#

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

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

计算图中给定节点的 CD 指数,只考虑其前驱节点,这些前驱节点的 time 属性小于或等于该 nodetime 属性加上 time_delta

参数:
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)

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

返回:
float

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

抛出:
NetworkXError

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

NetworkXNotImplemented

如果 G 是无向图或多重图。

注意

此方法实现了 Funk 和 Owen-Smith 在论文 [1] 中描述的 CD 指数计算算法。CD 指数用于检查专利的巩固性或不稳定性,因此图中的节点代表专利,边表示这些专利之间的引用关系。数学模型如下所示

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

其中 f_{it} 等于 1 如果 i 引用了焦点专利,否则为 0;b_{it} 等于 1 如果 i 引用了焦点专利的任何后继专利,否则为 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 个闰年,则可能并非如此。为了避免这些问题,请使用整数表示年份,或者在转换时间单位时非常小心。

参考文献

[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

示例

>>> 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