生命周期对象

LifeCycle对象是一个类,表示从动态网络中提取的时间社区的生命周期。 它用于存储关于节点在社区之间的流入/流出以及它们生成的从/到事件的信息。

class cdlib.LifeCycle(clustering: TemporalClustering | None = None)

表示时间聚类生命周期的类。 它允许计算构成生命周期的事件(利用不同的定义) 并从TemporalClustering对象开始分析它们。

analyze_flow(com_id: str, direction: str = '+', min_branch_size: int = 1, attr=None) dict

分析社区的流动情况

Parameters:
  • com_id – 社区ID

  • direction – 分析流动的时间方向。选项为“+”和“-”。

  • min_branch_size – 最小分支大小

  • attr – 要分析的属性

Returns:

分析的流程

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
analyze_flows(direction: str = '+', min_branch_size: int = 1, attr=None) dict

分析生命周期的流程

Parameters:
  • direction – 分析流的时间方向。选项为“+”和“-”。

  • min_branch_size – 最小分支大小

  • attr – 要分析的属性

Returns:

分析的流程

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> c = events.analyze_flows("+")
compute_events(matching_type: str = 'facets', matching_params: dict = {'min_branch_size': 1, 'threshold': 0.5})

计算生命周期的事件

Parameters:
  • matching_type – 使用的匹配算法类型。选项有“facets”、“asur”、“greene”。

  • matching_params – 匹配算法的参数。 默认为 {“min_branch_size”: 1, “threshold”: 0.5}。 前者参数是“facets”所需的,后者是“asur”和“greene”所需的。

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
compute_events_from_explicit_matching()

使用显式匹配计算生命周期的事件(如果可用)

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> from dynetx import DynGraph
>>> dg = DynGraph()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     dg.add_interactions_from(g, t)
>>> tc = algorithms.tiles(dg, 10)
>>> events = LifeCycle(tc)
>>> events.compute_events_from_explicit_matching()
compute_events_with_custom_matching(method: Callable[[set, set], float], two_sided: bool = True, threshold: float = 0.2)

使用自定义匹配相似度函数计算生命周期的事件

Parameters:
  • method – 一个值域在[0,1]之间的集合相似度函数(例如,Jaccard)

  • two_sided – 布尔值。 匹配是否仅从过去应用到未来(False) 或者甚至从未来应用到过去(True,默认值)

  • threshold – 两个社区被认为匹配的阈值

Example:

>>> from cdlib import algorithms
>>> from cdlib import TemporalClustering, LifeCycle
>>>  tc = TemporalClustering()
>>> # build the temporal clustering object
>>> evts = LifeCycle(tc)
>>> jaccard = lambda x, y: len(set(x) & set(y)) / len(set(x) | set(y))
>>> evts.compute_events_with_custom_matching(jaccard, two_sided=True, threshold=0.2)
get_attribute(name: str) dict

获取与节点关联的属性

Parameters:

name – 属性的名称

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> import random
>>> from networkx.generators.community import LFR_benchmark_graph
>>>
>>> def random_attributes():
>>>     attrs = {}
>>>     for i in range(250):
>>>        attrs[i] = {}
>>>        for t in range(10):
>>>             attrs[i][t] = random.choice(["A", "B", "C", "D", "E"])
>>>     return attrs
>>>
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> events.set_attribute(random_attributes(), "fakeattribute")
>>> attrs = events.get_attribute("fakeattribute")
get_event(com_id: str) CommunityEvent

获取与社区相关的事件

Parameters:

com_id – 社区ID

Returns:

与社区相关的事件

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> evt = events.get_event("0_2")
get_event_types() list

获取事件类型

Returns:

事件类型

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> evts = events.get_event_types()
get_events() dict

获取所有事件

Returns:

事件

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> evts = events.get_events()
polytree() DiGraph

使用提供的相似度函数重建表示社区生命周期的多树。

Returns:

一个networkx有向图对象。 节点代表社区,它们的ID按照{tid}_{cid}的模式分配, 其中tid是观察时间, cid是社区在Clustering对象中的位置。

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> g = events.polytree()
set_attribute(attr: dict, name: str)

设置生命周期的属性

Parameters:
  • attr – 属性

  • name – 属性的名称

Example:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> import random
>>> from networkx.generators.community import LFR_benchmark_graph
>>>
>>> def random_attributes():
>>>     attrs = {}
>>>     for i in range(250):
>>>        attrs[i] = {}
>>>        for t in range(10):
>>>             attrs[i][t] = random.choice(["A", "B", "C", "D", "E"])
>>>     return attrs
>>>
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> events.set_attribute(random_attributes(), "fakeattribute")
to_json() dict

将生命周期转换为json

Returns:

生命周期以json格式

示例:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> events.to_json()
validate_all_flows(direction: str, min_branch_size=1, iterations=1000) dict

将所有流与空模型进行比较。详情请参见validate_flow。

Parameters:
  • direction – 时间方向,可以是“+”(流出)或“-”(流入)

  • min_branch_size – 被视为分支的最小大小

  • iterations – 用于生成空模型的随机抽取次数

Returns:

一个以集合标识符为键,以均值、标准差和p值为值的字典

示例:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> vf = events.validate_all_flows("+")
validate_flow(target: str, direction: str, min_branch_size: int = 1, iterations: int = 1000) dict

将流程与空模型进行比较。每个流程的每个分支都与相同大小的空分支进行比较。 空模型是通过从参考分区中随机抽样元素iterations次生成的。 空模型的平均值和标准差用于计算每个分支的z分数, 然后用于计算p值。

Parameters:
  • target – 目标集标识符

  • direction – 时间方向,可以是“+”(流出)或“-”(流入)

  • min_branch_size – 被视为分支的最小大小

  • iterations – 用于生成空模型的随机抽取次数

Returns:

示例:

>>> from cdlib import TemporalClustering, LifeCycle
>>> from cdlib import algorithms
>>> from networkx.generators.community import LFR_benchmark_graph
>>> tc = TemporalClustering()
>>> for t in range(0, 10):
>>>     g = LFR_benchmark_graph(
>>>         n=250,
>>>         tau1=3,
>>>         tau2=1.5,
>>>         mu=0.1,
>>>         average_degree=5,
>>>         min_community=20,
>>>         seed=10,
>>>     )
>>>     coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
>>>     tc.add_clustering(coms, t)
>>> events = LifeCycle(tc)
>>> events.compute_events("facets")
>>> cf = events.validate_flow("0_2", "+")