diff --git a/business_knowledge/docs/学习分析报告V2版本规范.md b/business_knowledge/docs/学习分析报告V2版本规范.md new file mode 100644 index 0000000..9b05575 --- /dev/null +++ b/business_knowledge/docs/学习分析报告V2版本规范.md @@ -0,0 +1,52 @@ +# 学习分析报告V2版本规范 +## 第一板块:能力五角星 (能力画像) +**目标:** 让家长一眼看到孩子的综合实力,而不是冷冰冰的分数。 +- **可视化呈现:** 动态雷达图。 +- **JSON 数据维度:** + - **词义掌握 (Vocab Meaning)**:对应“词汇量和理解深度”。 + - **词汇发音 (Vocab Pron)**:对应“单词读得准不准”。 + - **语义理解 (Sentence Meaning)**:对应“在场景里懂不懂意思”。 + - **句法结构 (Sentence Structure)**:对应“逻辑和组句能力”。 + - **口语流利 (Sentence Pron)**:对应“长句子说得顺不顺”。 + +## 第二板块:挑战攻坚战 (学习摩擦力) +**目标:** 告知家长孩子在哪些具体知识点上“卡壳”了,需要针对性鼓励。 +- **分析逻辑:** 提取 waitTime(思考时间)最长且正确率不稳定的知识点。 +- **数据呈现:** + - **“本周拦路虎”**:列出耗时前三的单词或句子(如:*check in*, *dangerous*)。 + - **表现诊断**: + - *犹豫型*:思考很久但做对了,建议增加熟练度。 + - *盲目型*:思考极短但错了,建议孩子慢下来仔细看。 + +## 第三板块:应用转换率 (合成能力) +**目标:** 解答家长最关心的“为什么单词会背,一说话就卡壳”的问题。 +- **分析逻辑:** 对比 Mid(基础单点练习)与 Core(综合口语/场景应用)的 Perfect 率。 +- **话术转化:** + - **高分转换**:孩子能将学到的单词完美融入对话,具备很强的语言迁移能力。 + - **低分转换**:孩子基础知识扎实,但在真实交流中还比较害羞/迟疑,需要更多情境练习。 + +## 第四板块:口语精细化诊断 (语音报告) +**目标:** 替代点读笔,提供更专业的发音反馈。 +- **数据来源:** soeData 的核心分值。 +- **呈现维度:** + - **“最美发音”**:展示孩子得分最高的长句录音。 + - **“待攻克音标”**:根据 slices 里的得分,总结出孩子总是读不准的音素(如:l/r不分,尾音丢失)。 + +## 第五板块:学习驱动力 (投入度与效率) +**目标:** 让家长看到孩子的努力过程。 +- **数据指标:** + - **总投入时长**:本单元累计学习分钟数。 + - **闯关效率**:计算平均每个知识点的通关频次(例如:平均挑战 1.2 次即获得 Perfect)。 + - **坚持勋章**:根据 updated_at 的连续天数生成激励文案。 + +## 💡 给家长的行动建议 (Actionable Insights) +这套结构最后必须包含**“我该怎么办”**: +1. **弱项强化建议**:针对摩擦力最大的知识点,推送配套的绘本或音频。 +2. **表扬话术建议**:例如“孩子今天在长句朗读上进步很大,建议奖励一个小贴纸”。 +3. **家庭互动作业**:设计一个简单的 Parent-Child Roleplay(家校互动)。 + +## 数据底层对接说明(供开发者参考) +在多维表格中,您可以建立三个字段: +- **Skill_Radar_JSON**:存放五角星数据,用于驱动插件绘图。 +- **Friction_List**:存放 Top 3 困难点。 +- **Parent_Comment**:利用大模型根据上述数据自动生成的“暖心家长评语”。 diff --git a/business_knowledge/scripts/fill_template.py b/business_knowledge/scripts/fill_template.py new file mode 100644 index 0000000..5efd231 --- /dev/null +++ b/business_knowledge/scripts/fill_template.py @@ -0,0 +1,31 @@ +import pandas as pd +from openpyxl import load_workbook + +# 配置路径 +template_path = '/root/.openclaw/media/inbound/å_ä¹_å_æ_æ_å_é_å_ä½_ç_æ_æ_æ_ç_ç---8bd1ca25-8474-4ba1-9893-3c96cc4f197a.xlsx' +data_path = '/root/.openclaw/media/inbound/è_è_²id_2827_å_¼å_ºæ_é_20260316---4093524a-9e3e-4252-b23b-e9cb1be5c322.xlsx' +output_path = '角色ID2827_学习分析报告_最新模板版.xlsx' + +# 读取数据 +df_kp = pd.read_excel(data_path, sheet_name='统计-知识点通过情况') +df_component = pd.read_excel(data_path, sheet_name='统计-互动组件通过情况') + +# 打开模板 +wb = load_workbook(template_path) + +# 填充知识点数据到模板 +ws_kp = wb['统计-知识点通过情况'] +# 从第2行开始写入数据(A2) +for r_idx, row in enumerate(df_kp.values, start=2): + for c_idx, value in enumerate(row, start=1): + ws_kp.cell(row=r_idx, column=c_idx, value=value) + +# 填充互动组件数据到模板 +ws_component = wb['统计-互动组件通过情况'] +for r_idx, row in enumerate(df_component.values, start=2): + for c_idx, value in enumerate(row, start=1): + ws_component.cell(row=r_idx, column=c_idx, value=value) + +# 保存文件 +wb.save(output_path) +print(f"✅ 模板填充完成,已生成报告:{output_path}") diff --git a/business_knowledge/scripts/generate_learning_report.py b/business_knowledge/scripts/generate_learning_report.py new file mode 100644 index 0000000..0e7d83c --- /dev/null +++ b/business_knowledge/scripts/generate_learning_report.py @@ -0,0 +1,123 @@ +import pandas as pd + +# ============================== +# 1. 基础配置 +# ============================== + +file_path = '/root/.openclaw/media/inbound/è_è_²id_2827_å_¼å_ºæ_é_20260316---befdf3d9-0682-46df-aea5-74839af2a1cd.xlsx' +student_name = '角色ID2827' + +# ============================== +# 2. 读取Excel数据 +# ============================== + +kp_stats = pd.read_excel(file_path, sheet_name='统计-知识点通过情况') +component_stats = pd.read_excel(file_path, sheet_name='统计-互动组件通过情况') + +# ============================== +# 3. 数据清洗(防止空值) +# ============================== + +kp_stats = kp_stats.fillna(0) + +# ============================== +# 4. 计算知识点加权得分 +# ============================== + +kp_stats['weighted_score'] = ( + kp_stats['Perfect数量'] * 100 + + kp_stats['Good数量'] * 80 + + kp_stats['Pass数量'] * 60 +) / kp_stats['总数量'] + +# ============================== +# 5. 计算正确率 +# ============================== + +kp_stats['correct_rate'] = ( + kp_stats['Perfect数量'] + + kp_stats['Good数量'] + + kp_stats['Pass数量'] +) / kp_stats['总数量'] + +# ============================== +# 6. 计算能力模块得分 +# ============================== + +vocab_score = kp_stats[kp_stats['知识点类型'] == 'vocab']['weighted_score'].mean() +sentence_score = kp_stats[kp_stats['知识点类型'] == 'sentence']['weighted_score'].mean() + +# ============================== +# 7. 综合得分 +# ============================== + +overall_score = kp_stats['weighted_score'].mean() +overall_correct_rate = kp_stats['correct_rate'].mean() + +# ============================== +# 8. 等级判断 +# ============================== + +def get_level(score): + if score >= 90: + return '优秀' + elif score >= 80: + return '良好' + elif score >= 70: + return '合格' + else: + return '需要提升' + +level = get_level(overall_score) + +# ============================== +# 9. 找出薄弱知识点 +# ============================== + +weak_kp = kp_stats.sort_values('weighted_score').head(5) + +# ============================== +# 10. 生成报告数据 +# ============================== + +report_data = { + '学生姓名': student_name, + '综合得分': round(overall_score, 1), + '词汇能力得分': round(vocab_score, 1), + '句子能力得分': round(sentence_score, 1), + '总体正确率': f"{round(overall_correct_rate*100,1)}%", + '学习水平等级': level +} + +report_df = pd.DataFrame([report_data]) + +# ============================== +# 11. 导出Excel报告 +# ============================== + +output_file = '学习分析报告_自动生成版.xlsx' + +with pd.ExcelWriter(output_file) as writer: + + # 总结报告 + report_df.to_excel( + writer, + sheet_name='学习报告', + index=False + ) + + # 知识点详情 + kp_stats.to_excel( + writer, + sheet_name='知识点详情', + index=False + ) + + # 薄弱知识点 + weak_kp.to_excel( + writer, + sheet_name='薄弱知识点TOP5', + index=False + ) + +print(f"✅ 学习报告生成完成:{output_file}") \ No newline at end of file diff --git a/business_knowledge/scripts/generate_visual_report.py b/business_knowledge/scripts/generate_visual_report.py new file mode 100644 index 0000000..0003cb1 --- /dev/null +++ b/business_knowledge/scripts/generate_visual_report.py @@ -0,0 +1,110 @@ +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,已生成配套可视化图片") diff --git a/daily_summary.log b/daily_summary.log index 58359ea..aae3cf6 100644 --- a/daily_summary.log +++ b/daily_summary.log @@ -115,3 +115,12 @@ cat: /root/.openclaw/workspace-xiaoban/.feishu_token: No such file or directory Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 261 100 18 100 243 414 5600 --:--:-- --:--:-- --:--:-- 6069 404 page not found/root/.openclaw/workspace-xiaoban/daily_summary.sh: line 42: /home/ubuntu/.nvm/versions/node/v24.14.0/bin/openclaw: No such file or directory +[master 08c655c] 每日总结更新 20260316 + 2 files changed, 10 insertions(+), 1 deletion(-) +error: src refspec main does not match any +error: failed to push some refs to 'https://git.valavala.com/ai_member_only/ai_member_xiaoban' +cat: /root/.openclaw/workspace-xiaoban/.feishu_token: No such file or directory + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 261 100 18 100 243 80 1086 --:--:-- --:--:-- --:--:-- 1170 +404 page not found/root/.openclaw/workspace-xiaoban/daily_summary.sh: line 42: /home/ubuntu/.nvm/versions/node/v24.14.0/bin/openclaw: No such file or directory diff --git a/tmp_daily_summary.md b/tmp_daily_summary.md index c474408..b6fa3cd 100644 --- a/tmp_daily_summary.md +++ b/tmp_daily_summary.md @@ -1,3 +1,3 @@ -=== 每日总结 20260316 === +=== 每日总结 20260317 === ## 昨日关键进展 无昨日记忆记录 diff --git a/学习分析报告_自动生成版.xlsx b/学习分析报告_自动生成版.xlsx new file mode 100644 index 0000000..d6a16ce Binary files /dev/null and b/学习分析报告_自动生成版.xlsx differ diff --git a/角色ID2827_学习分析报告_最新模板版.xlsx b/角色ID2827_学习分析报告_最新模板版.xlsx new file mode 100644 index 0000000..93a991d Binary files /dev/null and b/角色ID2827_学习分析报告_最新模板版.xlsx differ diff --git a/角色ID2827_学习分析报告_销售模板版.xlsx b/角色ID2827_学习分析报告_销售模板版.xlsx new file mode 100644 index 0000000..c448e99 Binary files /dev/null and b/角色ID2827_学习分析报告_销售模板版.xlsx differ