← 返回 Semantica 专题首页 🚀 SEMANTICA · COOKBOOK · 进阶系列

完整可视化套件

Semantica 官方 Cookbook 中文翻译 · 第 24 / 37 篇

📦 semantica 🕸️ 知识图谱 🔎 GraphRAG

1概览

全面的可视化能力:可视化知识图谱、嵌入、分析和时序数据。

文档API 参考

2安装

从 PyPI 安装 Semantica:

pip install semantica
# 或安装所有可选依赖:
pip install semantica[all]
# 安装并升级 Semantica
!pip install -qU semantica
# 导入可视化与图分析组件
from semantica.visualization import (
    KGVisualizer,
    AnalyticsVisualizer,
    TemporalVisualizer
)
from semantica.kg import GraphBuilder, GraphAnalyzer
import numpy as np

3步骤 1:创建示例知识图谱

# 步骤 1:构建示例知识图谱
builder = GraphBuilder()

# 定义实体(人员、组织、地点)
entities = [
    {"id": "e1", "type": "Person", "name": "Alice", "properties": {"age": 30}},
    {"id": "e2", "type": "Person", "name": "Bob", "properties": {"age": 35}},
    {"id": "e3", "type": "Organization", "name": "Tech Corp", "properties": {"founded": 2010}},
    {"id": "e4", "type": "Location", "name": "San Francisco", "properties": {"country": "USA"}},
]

# 定义实体间的关系
relationships = [
    {"source": "e1", "target": "e2", "type": "knows", "properties": {"since": 2020}},
    {"source": "e1", "target": "e3", "type": "works_for", "properties": {"role": "Engineer"}},
    {"source": "e3", "target": "e4", "type": "located_in", "properties": {}},
]

# 构建知识图谱对象
knowledge_graph = builder.build(entities, relationships)

4步骤 2:知识图谱可视化

# 步骤 2:以力导向布局可视化知识图谱
kg_visualizer = KGVisualizer(layout="force", color_scheme="vibrant")
kg_visualizer.visualize_network(knowledge_graph, output="interactive")

5步骤 3:图分析可视化

# 步骤 3:图分析可视化——计算中心性与社区
graph_analyzer = GraphAnalyzer()

# 计算度中心性
centrality_results = graph_analyzer.calculate_centrality(
    knowledge_graph, 
    centrality_type="degree"
)

# 兼容不同返回结构,提取中心性得分
centrality_scores = {}
if centrality_results and "centrality_measures" in centrality_results:
    degree_centrality = centrality_results["centrality_measures"].get("degree", {})
    if isinstance(degree_centrality, dict) and "centrality" in degree_centrality:
        centrality_scores = degree_centrality["centrality"]
    elif isinstance(degree_centrality, dict):
        centrality_scores = degree_centrality

# 使用 Louvain 算法检测社区
communities_result = graph_analyzer.detect_communities(
    knowledge_graph, 
    algorithm="louvain"
)

# 将社区结果整理为 节点->社区ID 的映射
communities = []
community_dict = {}
if communities_result and "communities" in communities_result:
    communities_data = communities_result["communities"]
    if isinstance(communities_data, list):
        communities = communities_data
        for idx, community in enumerate(communities):
            if isinstance(community, list):
                for node in community:
                    community_dict[node] = idx
            elif isinstance(community, dict) and "nodes" in community:
                for node in community["nodes"]:
                    community_dict[node] = idx

# 可视化中心性得分与社区划分
analytics_visualizer = AnalyticsVisualizer()
analytics_visualizer.visualize_centrality(centrality_scores, title="Node Centrality Scores")

if community_dict:
    analytics_visualizer.visualize_communities(
        knowledge_graph, 
        community_dict, 
        title="Community Detection"
    )

6步骤 5:时序数据可视化

import datetime
from semantica.visualization import TemporalVisualizer
import pandas as pd
import numpy as np

# 1. 设置数据:AI 研究实验室演化(2020-2024)
# 该数据集模拟了一个不断增长的研究人员、论文和资助网络

start_date = datetime.date(2020, 1, 1)

# 具有生命周期的实体
entities = [
    {"id": "Lab_Alpha", "type": "Organization", "start": "2020-01-01", "end": "2024-12-31", "properties": {"budget": "High"}},
    {"id": "Dr_Smith", "type": "Researcher", "start": "2020-01-15", "end": "2024-12-31", "properties": {"h_index": 15}},
    {"id": "Dr_Jones", "type": "Researcher", "start": "2020-03-01", "end": "2024-12-31", "properties": {"h_index": 12}},
    {"id": "Paper_X", "type": "Publication", "start": "2020-11-20", "end": "2024-12-31", "properties": {"citations": 50}},
    {"id": "Grant_A", "type": "Funding", "start": "2021-01-01", "end": "2022-12-31", "properties": {"amount": 1000000}},
    {"id": "Dr_Chen", "type": "Researcher", "start": "2021-06-01", "end": "2024-12-31", "properties": {"h_index": 8}},
    {"id": "Paper_Y", "type": "Publication", "start": "2022-03-15", "end": "2024-12-31", "properties": {"citations": 25}},
    {"id": "Startup_Beta", "type": "SpinOff", "start": "2023-01-01", "end": "2024-12-31", "properties": {"valuation": "5M"}},
]

# 带时间戳的关系
relationships = [
    {"source": "Dr_Smith", "target": "Lab_Alpha", "type": "WORKS_AT", "timestamp": "2020-01-15"},
    {"source": "Dr_Jones", "target": "Lab_Alpha", "type": "WORKS_AT", "timestamp": "2020-03-01"},
    {"source": "Dr_Smith", "target": "Paper_X", "type": "AUTHORED", "timestamp": "2020-11-20"},
    {"source": "Dr_Jones", "target": "Paper_X", "type": "AUTHORED", "timestamp": "2020-11-20"},
    {"source": "Lab_Alpha", "target": "Grant_A", "type": "RECEIVED", "timestamp": "2021-01-01"},
    {"source": "Dr_Chen", "target": "Lab_Alpha", "type": "WORKS_AT", "timestamp": "2021-06-01"},
    {"source": "Dr_Chen", "target": "Paper_Y", "type": "AUTHORED", "timestamp": "2022-03-15"},
    {"source": "Dr_Smith", "target": "Paper_Y", "type": "AUTHORED", "timestamp": "2022-03-15"},
    {"source": "Lab_Alpha", "target": "Startup_Beta", "type": "SPUN_OFF", "timestamp": "2023-01-01"},
    {"source": "Dr_Jones", "target": "Startup_Beta", "type": "CTO", "timestamp": "2023-02-01"},
]

# 随时间变化的指标
dates = pd.date_range(start="2020-01-01", end="2024-01-01", freq="M")
metrics = {
    "dates": [d.strftime("%Y-%m-%d") for d in dates],
    "funding_usd": [100000 + (i * 50000) + (np.random.randint(-10000, 10000)) for i in range(len(dates))],
    "team_size": [2 + int(i/5) for i in range(len(dates))],
    "publications": [int(i/4) for i in range(len(dates))]
}

# 4. 生成时间戳映射(TemporalVisualizer 所需)
# 这将每个实体映射到其"活跃"或相关的特定时间点
timestamps = {}

# 收集所有相关日期(按月粒度)
all_dates = [d.strftime("%Y-%m-%d") for d in dates]

for entity in entities:
    eid = entity["id"]
    start = entity.get("start")
    end = entity.get("end")

    # 在真实应用中,你会计算重叠。这里我们只分配所有日期
    # 落在实体生命周期内的日期
    entity_times = [d for d in all_dates if start <= d <= end]
    timestamps[eid] = entity_times

temporal_kg = {
    "entities": entities,
    "relationships": relationships,
    "metrics": metrics,
    "timestamps": timestamps
}

# 2. 初始化可视化器
viz = TemporalVisualizer()

print("1. Generating Temporal Dashboard...")
# 这将创建一个生命周期、活动和指标的组合视图
dashboard = viz.visualize_temporal_dashboard(
    temporal_kg,
    title="AI Research Lab Evolution (2020-2024)",
    output="interactive"
)
dashboard.show()

print("2. Generating Network Evolution Animation...")
# 这将创建网络图的可播放动画
animation = viz.visualize_network_evolution(
    temporal_kg,
    title="Network Growth Over Time",
    output="interactive"
)
animation.show()

print("3. Generating Timeline View...")
timeline = viz.visualize_timeline(
    temporal_kg,
    title="Entity Lifecycles",
    output="interactive"
)
timeline.show()

7小结

已演示所有可视化类型: - 知识图谱可视化 - 嵌入可视化(t-SNE) - 图分析可视化(中心性与社区) - 时序数据可视化(时间线与演化)