VIS · Claude Sonnet 5 · C2

IEEE VIS author-community analysis — C2 · ATWL + example

C2

Designed by Claude Sonnet 5. ATWL specification + one worked example (HITL); no library. ↓ download raw .atwl

Workflow header & template

workflow collaboration-community-evolution template: define-unit (extract authors) → define-unit (time-partitioning) → characterise (co-authorship network) → loop(define-unit (community detection) → visualise → assess → generate-knowledge (parameter refine)) → characterise (community overlap) → define-unit (track lineages) → abstract (lifecycle events) → contextualise → visualise (evolution) → characterise (core & leadership) → visualise (core stability) → generate-knowledge (stability) → build-model (topic model) → characterise (topic profiles) → loop(visualise (foci evolution) → abstract (name foci) → assess → build-model (refine topics)) → generate-knowledge (synthesis) description: "Identify collaboration communities among IEEE VIS authors over time, track their evolution (persistence, merges, splits, dissolutions), characterise the stability of their core/leadership, and relate them to evolving research foci."

Input

artifact D_papers : entities origin: given internal structure: elementary embedment: time features: - id: authors value structure: list value type: reference description: "DBLP-disambiguated author identifiers" - id: title value structure: atomic value type: text description: "Paper title" - id: abstract value structure: atomic value type: text description: "Paper abstract" - id: keywords value structure: list value type: text description: "Author/venue keywords" - id: citations value structure: list value type: reference description: "Identifiers of cited papers" description: "IEEE VIS papers (1990-2024) with authorship, metadata, and citation links"

Step 1: Extract Authors And Time Windows

transform T_extract_authors : intent: define-unit manner: "extract" input: D_papers output: D_authors actor: machine description: "Extract unique disambiguated authors as analysis units from the paper author lists" artifact D_authors : entities internal structure: elementary embedment: set features: - id: active_years value structure: list value type: temporal description: "Years in which the author published" - id: paper_count value structure: atomic value type: numeric description: "Total number of papers authored" - id: total_citations value structure: atomic value type: numeric description: "Aggregate citation count" description: "Disambiguated authors extracted from paper records" artifact S_windowing : specification origin: given representation form: "parameter settings" description: "Time window length and overlap (e.g., 5-year windows advancing by 1 year) used to construct temporal snapshots of collaboration" transform T_partition_time : intent: define-unit manner: "time-partitioning with overlapping windows" input: D_papers, S_windowing output: D_windows actor: hybrid description: "Partition papers into overlapping multi-year time windows to serve as temporal snapshots for network construction" artifact D_windows : entities internal structure: group/cluster embedment: time features: - id: window_span value structure: atomic value type: temporal description: "Start and end year of the window" description: "Overlapping time windows used as temporal snapshots"

Step 2: Build Co-Authorship Networks

transform T_build_networks : intent: characterise manner: "define-relations (co-authorship)" input: D_windows, D_authors, D_papers output: F_coauth_network actor: machine description: "For each window, build a weighted co-authorship graph among authors active in that window (edge weight: number of co-authored papers)" artifact F_coauth_network : feature(D_windows) value structure: relational configuration representation form: "weighted co-authorship graph per window" description: "Temporal sequence of co-authorship networks, one per window"

Step 3: Community Detection Loop

artifact S_community_params : specification origin: given representation form: "parameter settings" description: "Community-detection algorithm choice and resolution parameter" loop L_community_detection: purpose: "Detect coherent, interpretable collaboration communities within each window's network" until: "Communities show clear separation/cohesion and are judged by the analyst to correspond to meaningful collaboration groups" body: transform T_detect_communities : intent: define-unit manner: "cluster-by-similarity (community detection)" input: F_coauth_network, S_community_params output: D_communities actor: machine description: "Detect densely collaborating groups of authors within each window's co-authorship network" artifact D_communities : entities internal structure: group/cluster embedment: time features: - id: members value structure: list value type: reference description: "Author identifiers belonging to this community instance" - id: community_size value structure: atomic value type: numeric description: "Number of authors in the community" description: "Groups of densely collaborating authors within a given time window" transform T_vis_communities : intent: visualise manner: "node-link-diagram" input: F_coauth_network, D_communities output: V_communities actor: machine description: "Display each window's network with nodes coloured by detected community for visual assessment" artifact V_communities : visualisation(F_coauth_network, D_communities) layout: "force-directed layout per time window" form: "coloured nodes and edges" encoding: "node colour: community membership; edge thickness: co-authorship weight" description: "Per-window views for inspecting community structure" transform T_assess_communities : intent: assess manner: "evaluate-clustering-quality" input: V_communities, D_communities output: K_community_quality actor: human description: "Judge whether communities are well-separated, cohesive, and correspond to recognisable research groups" artifact K_community_quality : knowledge(D_communities) representation form: "quality judgment" description: "Assessment of whether community granularity/separation is adequate or requires parameter adjustment" if K_community_quality indicates refinement needed: then: transform T_refine_params : intent: generate-knowledge manner: "adjust method parameters" input: K_community_quality, S_community_params output: S_community_params_r actor: human description: "Revise resolution parameter/algorithm choice" artifact S_community_params_r : specification representation form: "parameter settings" description: "Updated community-detection parameters" assign: S_community_params := S_community_params_r else: exit loop L_community_detection end loop L_community_detection

Step 4: Track Communities Over Time

transform T_match_communities : intent: characterise manner: "define-relations (membership overlap)" input: D_communities output: F_community_overlap actor: machine description: "Compute membership overlap (e.g., Jaccard similarity) between communities detected in consecutive/overlapping windows" artifact F_community_overlap : feature(D_communities) value structure: relational configuration representation form: "correspondence graph linking community instances across consecutive windows by membership overlap" description: "Temporal linkage structure between community instances" transform T_build_tracks : intent: define-unit manner: "merge-groups (track lineages over time)" input: D_communities, F_community_overlap output: D_community_tracks actor: hybrid description: "Link corresponding community instances into longitudinal lineages, allowing branching (splits) and convergence (merges)" artifact D_community_tracks : entities internal structure: formation embedment: time features: - id: track_span value structure: atomic value type: temporal description: "Time span over which the lineage is observed" description: "Longitudinal communities represented as lineage graphs of linked community instances" transform T_identify_lifecycle_events : intent: abstract manner: "perception-and-interpretation" input: D_community_tracks, F_community_overlap, V_communities output: P_lifecycle_events actor: hybrid description: "Identify and label structural transitions in lineages: persistence, merge, split, dissolution, emergence" artifact P_lifecycle_events : pattern(D_community_tracks) representation form: "typed event annotations (persist/merge/split/ dissolve/emerge) with time points" description: "Lifecycle events characterising community evolution" transform T_contextualise_evolution : intent: contextualise manner: "relative-time-alignment" input: D_community_tracks, D_windows output: A_evolution actor: machine description: "Arrange community-track instances along the window timeline for flow-based visualisation" artifact A_evolution : arrangement(D_community_tracks) context: D_windows principle: "chronological ordering of windows, instances stacked by track identity" description: "Temporal arrangement supporting alluvial visualisation" transform T_vis_evolution : intent: visualise manner: "alluvial/Sankey diagram" input: A_evolution, P_lifecycle_events, F_community_overlap output: V_evolution actor: machine description: "Show community membership flows over time, highlighting merges, splits, and dissolutions" artifact V_evolution : visualisation(A_evolution, P_lifecycle_events, F_community_overlap) layout: "alluvial layout, time on horizontal axis" form: "coloured flow ribbons and blocks" encoding: "block width: community size; ribbon width: shared membership; colour: track identity; markers: lifecycle events" description: "Overview of community evolution for analyst interpretation"

Step 5: Core Stability And Leadership

transform T_characterise_core : intent: characterise manner: "compute-statistics (membership persistence)" input: D_community_tracks, D_communities, D_authors output: F_core_membership actor: machine description: "Compute, per track, each author's persistence across windows, distinguishing stable core from peripheral/transient members" artifact F_core_membership : feature(D_community_tracks) value structure: list value type: {reference, numeric} description: "Per-author persistence scores within each community track" transform T_characterise_leaders : intent: characterise manner: "compute-statistics (productivity/citation ranking)" input: F_core_membership, D_authors output: F_leadership_score actor: machine description: "Rank core members by productivity and citation influence to identify leading researchers per track" artifact F_leadership_score : feature(D_community_tracks) value structure: list value type: {reference, numeric} description: "Ranked core members and leadership scores per community track" transform T_vis_core_stability : intent: visualise manner: "coloured-marks (presence heatmap)" input: F_core_membership, F_leadership_score, D_windows output: V_core_stability actor: machine description: "Timeline/heatmap of core author presence per track across windows, highlighting stable leaders vs. fluctuating members" artifact V_core_stability : visualisation(F_core_membership, F_leadership_score, D_windows) layout: "author x window grid, grouped by community track" form: "coloured heatmap cells" encoding: "cell colour: presence and leadership score; rows grouped by track" description: "Support for inspecting core stability and leadership" transform T_generate_stability_knowledge : intent: generate-knowledge manner: "formulate-statements" input: V_core_stability, F_core_membership, F_leadership_score output: K_core_stability actor: human description: "Formulate statements on core stability, leadership continuity, and membership turnover per community" artifact K_core_stability : knowledge(D_community_tracks, D_authors) representation form: "statements" description: "Insights on core stability, leadership continuity, and membership turnover"

Step 6: Research Foci And Their Evolution

transform T_topic_model : intent: build-model manner: "fit-topic-model" input: D_papers output: M_topics actor: machine description: "Fit a topic model on titles/abstracts/keywords to derive latent research topics" artifact M_topics : model(D_papers) model type: "topic model" representation form: "topic-term distributions and per-paper topic proportions" description: "Latent topic structure of the paper corpus" transform T_characterise_foci : intent: characterise manner: "aggregate (topic proportions per community-window)" input: M_topics, D_community_tracks, D_communities, D_windows output: F_topic_profile actor: machine description: "Aggregate topic proportions of member-authored papers to obtain an evolving topical profile per community track" artifact F_topic_profile : feature(D_community_tracks) value structure: matrix value type: numeric representation form: "community-track x topic x window proportions" description: "Evolving topical profile of each community lineage" loop L_foci_interpretation: purpose: "Assign and validate interpretable research-focus labels for each community's evolving topical profile" until: "Labels are judged distinct, stable, and accurately reflective of each community's evolving foci" body: transform T_vis_foci_evolution : intent: visualise manner: "streamgraph" input: F_topic_profile, D_windows output: V_foci_evolution actor: machine description: "Display evolving topical composition of each community track as a streamgraph across windows" artifact V_foci_evolution : visualisation(F_topic_profile, D_windows) layout: "streamgraph, time on horizontal axis" form: "stacked coloured bands" encoding: "band thickness: topic proportion; colour: topic identity; faceted by community track" description: "Support for interpreting shifting research foci" transform T_name_foci : intent: abstract manner: "name-patterns" input: V_foci_evolution, F_topic_profile, M_topics output: P_research_foci actor: human description: "Assign concise research-focus labels to dominant topics per community and period" artifact P_research_foci : pattern(F_topic_profile) representation form: "labelled sequences of dominant research foci per community track" description: "Human-interpreted research-focus labels and their evolution" transform T_assess_foci : intent: assess manner: "judge-visualisation-adequacy" input: V_foci_evolution, P_research_foci output: K_foci_quality actor: human description: "Judge whether labels are distinct, stable, and accurate" artifact K_foci_quality : knowledge(P_research_foci) representation form: "quality judgment" description: "Assessment of labelling adequacy" if K_foci_quality indicates refinement needed: then: transform T_refine_topics : intent: build-model manner: "adjust topic model parameters" input: K_foci_quality, D_papers, M_topics output: M_topics_r actor: hybrid description: "Adjust topic count/preprocessing and refit the model" artifact M_topics_r : model(D_papers) model type: "topic model" representation form: "topic-term distributions and per-paper topic proportions" description: "Refined topic model" assign: M_topics := M_topics_r else: exit loop L_foci_interpretation end loop L_foci_interpretation

Step 7: Synthesise Findings

transform T_synthesise : intent: generate-knowledge manner: "formulate-statements" input: D_community_tracks, P_lifecycle_events, K_core_stability, P_research_foci, V_evolution output: K_findings actor: human description: "Synthesise the number and stability of communities, leadership continuity, evolving research foci, and merge/split/dissolution history" artifact K_findings : knowledge(D_community_tracks, P_research_foci) representation form: "statements and narrative summary" description: "Integrated account of the IEEE VIS community's collaboration structure: major communities, stable cores/leaders, evolving research foci, and merge/split/dissolution events"