# 学生知识图谱可视化系统

## 概述

学生知识图谱可视化系统是一个基于D3.js的交互式可视化工具，用于展示学生的知识点掌握情况和依赖关系。系统通过Filament管理后台提供直观的Web界面，帮助教师和学生理解学习进度和知识结构。

## 功能特性

### 1. 交互式知识图谱
- **力导向图布局**: 使用D3.js力导向算法自动布局知识点
- **节点大小**: 根据掌握度动态调整节点大小（10-40px）
- **颜色编码**:
  - 🟢 绿色: 优秀 (≥80%)
  - 🔵 蓝色: 良好 (60-80%)
  - 🟡 黄色: 中等 (40-60%)
  - 🟠 橙色: 待提高 (20-40%)
  - 🔴 红色: 薄弱 (<20%)

### 2. 交互功能
- **悬浮提示**: 鼠标悬浮显示节点详细信息
- **点击详情**: 点击节点查看完整知识点信息
- **拖拽移动**: 可拖拽节点调整布局
- **滚轮缩放**: 支持0.5x-3x缩放
- **边拖拽边缩放**: 实时调整视角

### 3. 数据可视化
- **掌握度统计**: 展示优秀/良好/中等/待提高/薄弱知识点数量
- **平均掌握度**: 计算整体掌握度平均值
- **分布图**: Chart.js柱状图展示掌握度分布

### 4. 导出功能
- **PNG导出**: 一键导出知识图谱为PNG图片
- **高质量输出**: 支持高分辨率图片导出

## 技术架构

### 前端技术栈
- **Livewire 3**: 响应式组件框架
- **D3.js v7**: 数据驱动的可视化库
- **Chart.js**: 图表绘制库
- **Tailwind CSS**: 样式框架

### 后端集成
- **LearningAnalytics API**: 端口5016
  - 获取学生掌握度数据
  - 获取知识点依赖关系
  - 获取学习路径
- **模拟数据**: API不可用时的备用数据

## 文件结构

```
FilamentAdmin/
├── app/
│   ├── Livewire/
│   │   └── StudentKnowledgeGraph.php        # Livewire组件
│   ├── Filament/
│   │   └── Pages/
│   │       └── StudentKnowledgeGraphPage.php    # Filament页面
│   ├── Services/
│   │   └── KnowledgeGraphService.php        # API集成服务
│   └── Models/
│       └── Student.php                      # 学生模型
├── resources/
│   └── views/
│       ├── filament/
│       │   └── pages/
│       │       └── student-knowledge-graph-page.blade.php
│       └── livewire/
│           └── student-knowledge-graph.blade.php    # 可视化视图
└── docs/
    └── STUDENT_KNOWLEDGE_GRAPH.md           # 本文档
```

## 核心组件

### StudentKnowledgeGraph.php
- **功能**: 数据获取和处理
- **主要方法**:
  - `loadStudents()`: 加载学生列表
  - `loadStudentData()`: 加载学生知识图谱数据
  - `fetchKnowledgeGraphData()`: 调用LearningAnalytics API
  - `buildKnowledgeGraphData()`: 构建D3.js数据格式
  - `getMasteryColor()`: 获取掌握度颜色
  - `getMasterySize()`: 计算节点大小

### student-knowledge-graph.blade.php
- **功能**: 可视化渲染和交互
- **主要特性**:
  - D3.js力导向图渲染
  - 响应式布局
  - 交互式tooltip
  - 缩放和拖拽功能
  - Chart.js统计图表

### KnowledgeGraphService.php
- **功能**: HTTP客户端封装
- **API端点**:
  - `/knowledge-points/`: 获取知识点列表
  - `/graph/node/{kpCode}`: 获取技能列表
  - `/skills/`: 获取所有技能
  - `/graph/relations`: 获取关联关系
  - `/api/mastery/{studentId}`: 获取学生掌握度
  - `/api/mastery/{studentId}/statistics`: 获取统计信息

## 使用说明

### 访问路径
在Filament管理后台中导航到：
```
学习分析 > 学生知识图谱
```

### 操作步骤
1. 从学生下拉列表选择要查看的学生
2. 系统自动加载该学生的知识图谱数据
3. 在知识图谱中：
   - 鼠标悬浮查看节点详情
   - 点击节点查看详细信息
   - 拖拽节点调整位置
   - 滚轮缩放视图
4. 查看右侧掌握度统计信息
5. 点击"导出PNG"保存图谱

### 数据流程
1. Livewire组件从数据库获取学生列表
2. 选择学生后调用LearningAnalytics API
3. API返回掌握度数据和依赖关系
4. 构建D3.js所需的nodes和links数据
5. 渲染交互式力导向图
6. 显示统计图表和详细信息

## API接口

### LearningAnalytics服务 (端口5016)
```php
// 获取学生掌握度
GET /api/mastery/{studentId}
Response: {
  "masteries": [
    {
      "student_id": "S001",
      "kp_code": "R01",
      "mastery_level": 0.85,
      "confidence_level": 0.8
    }
  ]
}

// 获取统计信息
GET /api/mastery/{studentId}/statistics
Response: {
  "total_knowledge_points": 8,
  "average_mastery": 0.594,
  "high_mastery_count": 1,
  "medium_mastery_count": 2,
  "low_mastery_count": 2
}

// 获取依赖关系
GET /api/knowledge/dependencies
Response: {
  "dependencies": [
    {
      "prerequisite_kp": "R01",
      "dependent_kp": "R02",
      "influence_weight": 0.9,
      "dependency_type": "must"
    }
  ]
}
```

## 配置项

### 环境变量
```bash
LEARNING_ANALYTICS_URL=http://localhost:5016
LEARNING_ANALYTICS_TIMEOUT=30
```

### 服务配置 (config/services.php)
```php
'learning_analytics' => [
    'url' => env('LEARNING_ANALYTICS_URL', 'http://localhost:5016'),
    'timeout' => env('LEARNING_ANALYTICS_TIMEOUT', 30),
],
```

## 容错机制

1. **API超时**: 10秒超时后返回模拟数据
2. **API失败**: 自动加载本地模拟数据
3. **数据缺失**: 使用默认值填充
4. **网络错误**: 记录日志并显示错误信息

## 性能优化

1. **懒加载**: 只在选择学生时加载数据
2. **模拟数据**: API不可用时快速切换到本地数据
3. **缓存**: 可在KnowledgeGraphService中添加缓存机制
4. **压缩**: SVG导出时进行优化

## 浏览器兼容性

- Chrome 80+
- Firefox 75+
- Safari 13+
- Edge 80+

## 扩展建议

1. **节点详情页面**: 点击节点跳转到知识点详情页
2. **学习路径推荐**: 基于依赖关系生成学习建议
3. **多学生对比**: 并排显示多个学生的知识图谱
4. **时间维度**: 添加历史趋势图
5. **导出多种格式**: 支持SVG、PDF、Excel导出
6. **3D视图**: 升级到3D力导向图
7. **动画效果**: 添加过渡动画

## 故障排除

### 常见问题

**问题1: 知识图谱不显示**
- 检查LearningAnalytics服务是否运行
- 查看浏览器控制台是否有JavaScript错误
- 确认学生数据存在

**问题2: 统计数据错误**
- 验证API返回的数据格式
- 检查模拟数据计算逻辑

**问题3: 导出功能不工作**
- 检查浏览器是否允许下载
- 确认canvas元素正确渲染

### 日志位置
```bash
# Laravel日志
storage/logs/laravel.log

# 查找相关错误
grep "知识图谱" storage/logs/laravel.log
```

## 开发者信息

- **开发日期**: 2025-11-23
- **版本**: v1.0
- **维护者**: Claude Code
- **许可**: MIT
