Install
openclaw skills install calculus-learning-analytics基于作业批改数据,提供学生能力画像、班级学情看板及个性化教学建议,助力高等数学教学决策闭环。
openclaw skills install calculus-learning-analytics基于作业批改数据的学情分析系统,构建学生能力画像、班级整体表现看板、教学建议引擎。实现从数据收集到教学决策的完整闭环。
生成班级学情数据看板
参数:
class_id (string): 班级IDtime_range (string): 时间范围,"week"、"month"、"semester"include_metrics (array): 包含的指标列表visualization_type (string): 可视化类型,"summary"、"detailed"、"export"返回:
{
"dashboard_id": "db_20260416_001",
"class_info": {
"class_id": "math2024-01",
"student_count": 45,
"time_range": "2026-04-01 至 2026-04-15"
},
"overview_metrics": {
"submission_rate": 92.3,
"average_score": 78.5,
"completion_rate": 85.7,
"improvement_rate": 12.3
},
"knowledge_heatmap": [
{
"topic": "导数计算",
"mastery_rate": 88.2,
"common_errors": ["链式法则", "隐函数求导"]
},
{
"topic": "定积分应用",
"mastery_rate": 72.5,
"common_errors": ["积分上下限", "面积计算"]
}
],
"ability_radar": {
"concept_understanding": 75.3,
"computation_ability": 82.1,
"logical_reasoning": 68.7,
"problem_solving": 71.2,
"mathematical_modeling": 65.4
},
"visualizations": {
"heatmap_url": "https://example.com/heatmap.png",
"radar_chart_url": "https://example.com/radar.png",
"trend_chart_url": "https://example.com/trend.png"
}
}
深度分析学生个人学习画像
参数:
student_id (string): 学生IDanalysis_depth (string): 分析深度,"basic"、"standard"、"deep"include_comparison (boolean): 是否包含班级对比generate_recommendations (boolean): 是否生成学习建议返回:
{
"student_id": "stu001",
"basic_info": {
"name": "张三",
"class": "math2024-01",
"total_assignments": 24,
"average_score": 81.5
},
"learning_trend": {
"score_trend": [75, 78, 82, 85, 81, 83, 86],
"submission_trend": [1, 1, 1, 1, 0, 1, 1], # 1=提交,0=未提交
"time_spent_trend": [45, 50, 48, 52, 0, 55, 53] # 分钟
},
"knowledge_mastery": {
"strong_topics": [
{"topic": "导数计算", "mastery": 92, "rank": "top10%"},
{"topic": "函数极限", "mastery": 88, "rank": "top20%"}
],
"weak_topics": [
{"topic": "微分中值定理", "mastery": 62, "rank": "bottom30%"},
{"topic": "泰勒公式", "mastery": 58, "rank": "bottom25%"}
],
"improving_topics": [
{"topic": "不定积分", "from": 65, "to": 78, "improvement": 13}
]
},
"error_patterns": {
"most_common": "计算粗心错误",
"frequency": 8,
"contexts": ["积分计算", "导数运算"],
"time_pattern": "作业后半段出现较多"
},
"personalized_recommendations": {
"immediate": [
"重点复习微分中值定理的应用场景",
"完成泰勒公式专项练习5题"
],
"short_term": [
"每周增加30分钟证明题练习",
"建立错题本,记录计算粗心错误"
],
"long_term": [
"参加数学建模兴趣小组",
"阅读《微积分的历程》拓展视野"
]
},
"comparison_with_class": {
"score_percentile": 75.3,
"submission_rank": "前30%",
"improvement_rank": "前20%"
}
}
生成教学建议和课堂优化方案
参数:
class_id (string): 班级IDfocus_topics (array): 重点关注知识点time_constraint (number): 课堂时间约束(分钟)teaching_style (string): 教学风格,"traditional"、"interactive"、"flipped"返回:
{
"recommendation_id": "rec_001",
"class_analysis": {
"overall_level": "中等偏上",
"main_challenges": ["抽象概念理解", "证明题逻辑"],
"learning_characteristics": "计算能力强,逻辑推理需加强"
},
"next_class_focus": {
"primary_topic": "微分中值定理应用",
"time_allocation": {
"concept_explanation": 20,
"example_demonstration": 15,
"student_practice": 25,
"qna_discussion": 10
},
"key_points": [
"罗尔定理与拉格朗日定理的联系",
"中值定理的几何解释",
"典型应用场景分析"
]
},
"differentiated_instruction": {
"advanced_students": [
"挑战题:中值定理的推广形式",
"阅读材料:《微积分发展史》相关章节"
],
"average_students": [
"巩固练习:标准题型训练",
"小组讨论:定理应用实例"
],
"struggling_students": [
"基础回顾:定理条件理解",
"一对一辅导:具体问题解答"
]
},
"resource_recommendations": {
"videos": [
{
"title": "微分中值定理直观解释",
"url": "https://example.com/video1",
"duration": 8,
"suitable_for": "all"
}
],
"interactive_tools": [
{
"name": "GeoGebra中值定理演示",
"url": "https://geogebra.org/...",
"activity": "拖动观察定理条件变化"
}
],
"practice_sets": [
{
"name": "中值定理基础练习",
"difficulty": "基础",
"count": 6,
"estimated_time": 30
}
]
},
"assessment_suggestions": {
"formative": [
"课堂小测:定理条件判断",
"小组展示:应用实例分享"
],
"summative": [
"单元测试:包含证明和应用题",
"项目作业:实际问题建模"
]
}
}
# 生成月度班级学情看板
openclaw skill calculus-learning-analytics generate_class_dashboard \
--class-id "math2024-01" \
--time-range "month" \
--include-metrics "['submission_rate','average_score','knowledge_mastery']" \
--visualization-type "detailed"
# 深度分析学生学习情况
openclaw skill calculus-learning-analytics analyze_student_profile \
--student-id "stu001" \
--analysis-depth "deep" \
--include-comparison true \
--generate-recommendations true
# 为下周课堂生成教学方案
openclaw skill calculus-learning-analytics generate_teaching_recommendations \
--class-id "math2024-01" \
--focus-topics "['微分中值定理','泰勒公式']" \
--time-constraint 90 \
--teaching-style "interactive"
class AbilityModel:
"""学生能力多维度建模"""
def __init__(self):
self.dimensions = {
'concept_understanding': {
'indicators': ['定义记忆', '定理理解', '概念应用'],
'weight': 0.3
},
'computation_ability': {
'indicators': ['计算速度', '计算准确率', '复杂计算'],
'weight': 0.25
},
'logical_reasoning': {
'indicators': ['证明逻辑', '问题分析', '推理能力'],
'weight': 0.25
},
'problem_solving': {
'indicators': ['策略选择', '方法创新', '结果验证'],
'weight': 0.2
}
}
def calculate_ability_scores(self, student_data):
"""计算各维度能力分数"""
scores = {}
for dim_name, dim_config in self.dimensions.items():
dimension_score = 0
total_weight = 0
for indicator in dim_config['indicators']:
# 从学生数据中提取指标分数
indicator_score = self.extract_indicator_score(
student_data, dim_name, indicator
)
dimension_score += indicator_score
total_weight += 1
scores[dim_name] = dimension_score / total_weight
return scores
class KnowledgeGraphAnalyzer:
"""知识点关联关系分析"""
def __init__(self):
self.graph = KnowledgeGraph()
def analyze_prerequisites(self, weak_topic):
"""分析薄弱知识点的前置依赖"""
prerequisites = self.graph.get_prerequisites(weak_topic)
# 检查学生是否掌握前置知识点
missing_prereqs = []
for prereq in prerequisites:
if not self.check_mastery(prereq):
missing_prereqs.append({
'topic': prereq,
'mastery_level': self.get_mastery_level(prereq),
'recommendation': f'先复习{prereq}'
})
return missing_prereqs
def find_related_errors(self, error_type):
"""发现关联错误模式"""
related_errors = []
# 基于知识图谱查找关联错误
for topic in self.graph.get_related_topics(error_type):
similar_errors = self.find_similar_errors(topic, error_type)
if similar_errors:
related_errors.append({
'topic': topic,
'error_count': len(similar_errors),
'common_pattern': self.extract_pattern(similar_errors)
})
return related_errors
class PerformancePredictor:
"""学生表现预测模型"""
def __init__(self):
self.model = self.load_prediction_model()
def predict_future_score(self, student_history, upcoming_topic):
"""预测学生在未来知识点上的表现"""
# 特征工程
features = self.extract_features(student_history)
# 添加知识点特征
topic_features = self.get_topic_features(upcoming_topic)
features.update(topic_features)
# 模型预测
predicted_score = self.model.predict(features)
confidence = self.model.predict_proba(features)
return {
'predicted_score': predicted_score,
'confidence': confidence,
'key_factors': self.explain_prediction(features)
}
def identify_at_risk_students(self, class_data, threshold=60):
"""识别风险学生"""
at_risk = []
for student in class_data:
# 预测未来表现
prediction = self.predict_future_score(
student['history'],
student['next_topic']
)
if prediction['predicted_score'] < threshold:
at_risk.append({
'student_id': student['id'],
'predicted_score': prediction['predicted_score'],
'risk_factors': prediction['key_factors'],
'intervention_suggested': self.suggest_intervention(student)
})
return at_risk
# 获取深度错误分析
from calculus_error_analyzer import get_error_insights
error_insights = get_error_insights(
class_id="math2024-01",
time_range="month",
analysis_depth="deep"
)
# 整合到学情报告
dashboard_data['error_analysis'] = error_insights
# 基于薄弱点生成练习
from question_type_generator import generate_targeted_practice
practice_set = generate_targeted_practice(
weak_topics=student_profile['weak_topics'],
difficulty="adaptive",
count=10
)
def generate_knowledge_heatmap(self, class_data):
"""生成知识点掌握热力图"""
heatmap_data = []
for topic in self.knowledge_topics:
# 计算班级平均掌握率
mastery_rates = [
student['knowledge_mastery'].get(topic, 0)
for student in class_data
]
avg_mastery = sum(mastery_rates) / len(mastery_rates)
# 识别常见错误
common_errors = self.identify_common_errors(topic, class_data)
heatmap_data.append({
'topic': topic,
'mastery_rate': avg_mastery,
'common_errors': common_errors,
'color_intensity': self.calculate_color(avg_mastery)
})
return heatmap_data
def generate_ability_radar(self, student_scores, class_average):
"""生成能力维度雷达图"""
radar_data = {
'dimensions': list(student_scores.keys()),
'student_scores': list(student_scores.values()),
'class_average': list(class_average.values()),
'max_score': 100
}
# 计算相对优势
relative_strengths = []
for dim in student_scores:
relative = student_scores[dim] - class_average[dim]
relative_strengths.append({
'dimension': dim,
'difference': relative,
'strength': '优势' if relative > 5 else '劣势' if relative < -5 else '平均'
})
radar_data['relative_analysis'] = relative_strengths
return radar_data
analytics_settings:
scoring_weights:
concept_understanding: 0.30
computation_ability: 0.25
logical_reasoning: 0.25
problem_solving: 0.20
prediction_settings:
model: "xgboost"
features: ["historical_scores", "submission_pattern", "error_types"]
horizon: 7 # 预测未来7天
visualization:
color_scheme: "viridis"
chart_types: ["heatmap", "radar", "line", "bar"]
export_formats: ["png", "pdf", "html"]
alert_thresholds:
performance:
at_risk: 60 # 低于60分预警
significant_drop: 15 # 分数下降15分以上
engagement:
missing_submissions: 3 # 连续3次未提交
late_submissions: 5 # 5次以上迟交
progress:
stagnation: 7 # 7天无进步
regression: 10 # 退步10分以上
class AnalyticsCache:
"""学情数据缓存管理"""
def __init__(self):
self.cache_ttl = {
'dashboard': 300, # 5分钟
'student_profile': 600, # 10分钟
'predictions': 1800, # 30分钟
'recommendations': 3600 # 1小时
}
async def get_cached_analysis(self, cache_key, analysis_type):
"""获取缓存的分析结果"""
ttl = self.cache_ttl.get(analysis_type, 300)