生命周期对象¶
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", "+")