cd_index#
- cd_index(G, node, time_delta, *, time='time', weight=None)[source]#
计算图
G
中节点node
的 CD 指数。计算给定图节点的 CD 指数,仅考虑其具有
time
属性小于或等于node
的time
属性加上time_delta
的前驱节点。- Parameters:
- G图
一个有向的 networkx 图,其节点具有
time
属性,并且可选地具有weight
属性(如果未给出权重,则视为 1)。- node节点
计算 CD 指数的节点。
- time_delta数值或 timedelta
node
的time
属性之后的时间量。time_delta
的值必须支持与time
节点属性的比较。例如,如果节点的time
属性是datetime.datetime
对象,则time_delta
应为datetime.timedelta
对象。- time字符串(可选,默认为 “time”)
用于计算的节点属性的名称。
- weight字符串(可选,默认为 None)
用作权重的节点属性的名称。
- Returns:
- float
在图
G
中为节点node
计算的 CD 指数。
- Raises:
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