每日总结更新 20260317
This commit is contained in:
parent
08c655c1d7
commit
9ad5ca3088
52
business_knowledge/docs/学习分析报告V2版本规范.md
Normal file
52
business_knowledge/docs/学习分析报告V2版本规范.md
Normal file
@ -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**:利用大模型根据上述数据自动生成的“暖心家长评语”。
|
||||||
31
business_knowledge/scripts/fill_template.py
Normal file
31
business_knowledge/scripts/fill_template.py
Normal file
@ -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}")
|
||||||
123
business_knowledge/scripts/generate_learning_report.py
Normal file
123
business_knowledge/scripts/generate_learning_report.py
Normal file
@ -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}")
|
||||||
110
business_knowledge/scripts/generate_visual_report.py
Normal file
110
business_knowledge/scripts/generate_visual_report.py
Normal file
@ -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} |
|
||||||
|
|
||||||
|
---
|
||||||
|
## 🔹 能力画像(雷达图)
|
||||||
|

|
||||||
|
*当前已覆盖3个核心能力维度,后续将补充发音、流利度维度*
|
||||||
|
|
||||||
|
---
|
||||||
|
## 🔹 薄弱知识点分析
|
||||||
|

|
||||||
|
### 提升建议:
|
||||||
|
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,已生成配套可视化图片")
|
||||||
@ -115,3 +115,12 @@ cat: /root/.openclaw/workspace-xiaoban/.feishu_token: No such file or directory
|
|||||||
Dload Upload Total Spent Left Speed
|
Dload Upload Total Spent Left Speed
|
||||||
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 261 100 18 100 243 414 5600 --:--:-- --:--:-- --:--:-- 6069
|
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
|
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
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
=== 每日总结 20260316 ===
|
=== 每日总结 20260317 ===
|
||||||
## 昨日关键进展
|
## 昨日关键进展
|
||||||
无昨日记忆记录
|
无昨日记忆记录
|
||||||
|
|||||||
BIN
学习分析报告_自动生成版.xlsx
Normal file
BIN
学习分析报告_自动生成版.xlsx
Normal file
Binary file not shown.
BIN
角色ID2827_学习分析报告_最新模板版.xlsx
Normal file
BIN
角色ID2827_学习分析报告_最新模板版.xlsx
Normal file
Binary file not shown.
BIN
角色ID2827_学习分析报告_销售模板版.xlsx
Normal file
BIN
角色ID2827_学习分析报告_销售模板版.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user