import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import rcParams

# 配置中文字体
rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Micro Hei']
rcParams['axes.unicode_minus'] = False

# ==============================
# 1. 加载数据
# ==============================
file_path = '/root/.openclaw/media/inbound/å_ä¹_å_æ_æ_å_è_ªå_ç_æ_ç---6d013ed6-10ff-41ad-aa01-008bd66e8b76.xlsx'
df_report = pd.read_excel(file_path, sheet_name='学习报告')
df_kp = pd.read_excel(file_path, sheet_name='知识点详情')
df_weak = pd.read_excel(file_path, sheet_name='薄弱知识点TOP5')

# 提取数据
student_name = df_report.iloc[0]['学生姓名']
overall_score = df_report.iloc[0]['综合得分']
vocab_score = df_report.iloc[0]['词汇能力得分']
sentence_score = df_report.iloc[0]['句子能力得分']
correct_rate = df_report.iloc[0]['总体正确率']
level = df_report.iloc[0]['学习水平等级']

# ==============================
# 2. 生成能力雷达图
# ==============================
plt.figure(figsize=(6, 6), dpi=100)
# 雷达图维度
labels = ['词义掌握', '语义理解', '句法结构']
scores = [vocab_score, 
          df_kp[df_kp['知识点类型']=='sentence']['weighted_score'].mean(),
          df_kp[df_kp['知识点类型']=='sentence']['Perfect比例(%)'].mean()/100*100]
# 雷达图设置
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
scores = np.concatenate((scores, [scores[0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))

ax = plt.subplot(111, polar=True)
ax.plot(angles, scores, 'o-', linewidth=2, color='#2E86AB')
ax.fill(angles, scores, alpha=0.25, color='#2E86AB')
ax.set_thetagrids(angles * 180/np.pi, labels, fontsize=12)
ax.set_ylim(0,100)
plt.title(f'{student_name} 能力雷达图', y=1.1, fontsize=15)
plt.grid(True)
plt.savefig('能力雷达图.png', bbox_inches='tight')
plt.close()

# ==============================
# 3. 生成薄弱知识点柱状图
# ==============================
plt.figure(figsize=(8, 4), dpi=100)
weak_top3 = df_weak.head(3)
x = np.arange(len(weak_top3['知识点标题']))
y = weak_top3['weighted_score']
bars = plt.bar(x, y, color='#F24C4C', width=0.6)
plt.xticks(x, weak_top3['知识点标题'], rotation=15, fontsize=10)
plt.ylabel('加权得分', fontsize=12)
plt.title('TOP3 薄弱知识点', fontsize=15)
plt.ylim(0, 100)
# 添加数值标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             f'{height:.1f}', ha='center', va='bottom')
plt.savefig('薄弱知识点.png', bbox_inches='tight')
plt.close()

# ==============================
# 4. 生成Markdown可视化报告
# ==============================
report_content = f"""# {student_name} 学习分析可视化报告
---
## 🔹 综合概览
| 指标 | 数值 |
| --- | --- |
| 综合得分 | {overall_score:.1f} |
| 词汇能力得分 | {vocab_score:.1f} |
| 句子能力得分 | {sentence_score:.1f} |
| 总体正确率 | {correct_rate} |
| 学习水平等级 | {level} |

---
## 🔹 能力画像（雷达图）
![能力雷达图](能力雷达图.png)
*当前已覆盖3个核心能力维度，后续将补充发音、流利度维度*

---
## 🔹 薄弱知识点分析
![薄弱知识点TOP3](薄弱知识点.png)
### 提升建议：
1. 重点练习上述3个知识点，每天完成5次对应练习
2. 练习时放慢速度，仔细确认题意后再作答
3. 家长可以配合进行场景对话练习，巩固薄弱知识点

---
## 🔹 后续升级说明
待补充学习时长、思考时间、语音评测数据后，将新增：
- 学习驱动力分析模块
- 知识迁移能力评估
- 口语发音精细化诊断
- 个性化家长建议
"""

with open(f'{student_name}_可视化学习报告.md', 'w', encoding='utf-8') as f:
    f.write(report_content)

print(f"✅ 可视化报告生成完成：{student_name}_可视化学习报告.md，已生成配套可视化图片")
