ZhangQiPro/generate_report_data.py
sladro 29b58e6888 chore: ESLint代码规范修复 - 从779个问题降至13个警告
修复内容:
1.  ESLint配置完善
   - 添加浏览器全局变量:setTimeout, localStorage, getComputedStyle等
   - 禁用保留组件名规则 (vue/no-reserved-component-names)

2.  清理未使用的导入(自动修复648个警告)
   - BigScreenPortrait.vue: 移除reactive, mockPortraitData, generateChartData等
   - Evaluate.vue: 移除Search, Refresh, Download等未使用图标组件
   - Portrait.vue: 移除Download, Refresh组件
   - SubmissionDialog.vue: 移除Link组件
   - ReportCenter.vue: 移除onMounted导入

3.  修复未使用的变量
   - ReportAnalysis.vue: 移除未使用的index变量
   - FileUpload.vue: 移除未使用的index变量

修复结果:
- 修复前:779个问题(42错误,737警告)
- 修复后:13个问题(0错误,13警告)
- 修复率:98.3%

剩余13个警告:
- 未使用的error catch变量(4个)
- 未使用的index/role/student参数(7个)
- 未使用的导入DataAnalysis, getChartColors(2个)
- 所有警告不影响代码运行

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 17:29:59 +08:00

271 lines
9.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成mockReportData - 基于真实评分数据生成报告趋势数据
"""
import json
from datetime import datetime, timedelta
import random
# 读取已生成的评价数据
with open('分析报告/generated_evaluations.json', 'r', encoding='utf-8') as f:
evaluations = json.load(f)
# 读取画像数据(用于能力分析)
with open('分析报告/generated_portrait_data.json', 'r', encoding='utf-8') as f:
portrait_data = json.load(f)
# 6门课程对应的月份2024年9月-2025年2月
COURSE_MONTHS = [
'2024-09', # SQL金融数据处理
'2024-10', # Python金融分析
'2024-11', # Matlab金融建模
'2024-12', # 金融数据可视化
'2025-01', # 证券模拟投资竞赛实战
'2025-02', # 期货模拟交易大赛实战
]
COURSE_NAMES = [
'SQL金融数据处理',
'Python金融分析',
'Matlab金融建模',
'金融数据可视化',
'证券模拟投资竞赛实战',
'期货模拟交易大赛实战'
]
def calculate_overall_score(company_score, teacher_score, expert_score):
"""计算综合评分(统一百分制)"""
# 所有分数已经是百分制
# 加权平均企业30%教师40%专家30%
overall = company_score * 0.3 + teacher_score * 0.4 + expert_score * 0.3
return round(overall, 1)
def generate_development_trends():
"""生成发展趋势数据"""
trends = {}
for student_id in range(1, 41):
student_id_str = str(student_id)
# 获取该学生的评价数据
company_eval = evaluations['company'].get(student_id_str, {})
teacher_eval = evaluations['teacher'].get(student_id_str, {})
expert_eval = evaluations['expert'].get(student_id_str, {})
# 基础评分(公司、教师、专家的平均分)
company_base = (company_eval.get('attitude', 3.5) +
company_eval.get('skills', 3.5) +
company_eval.get('communication', 3.5) +
company_eval.get('problemSolving', 3.5)) / 4 * 20 # 转为百分制
teacher_base = (teacher_eval.get('theory', 3.5) +
teacher_eval.get('practice', 3.5) +
teacher_eval.get('innovation', 3.5) +
teacher_eval.get('attitude', 3.5)) / 4 * 20
expert_base = (expert_eval.get('industryKnowledge', 3.5) +
expert_eval.get('technicalDepth', 3.5) +
expert_eval.get('applicationAbility', 3.5) +
expert_eval.get('potential', 3.5)) / 4 * 20
# 生成6个月的趋势数据模拟学习进步曲线
monthly_scores = []
for i, month in enumerate(COURSE_MONTHS):
# 初始分数基于基础评分,随着时间逐步提升
progress_factor = 1 + (i * 0.03) # 每月提升3%
company_score = round(company_base * progress_factor, 1)
teacher_score = round(teacher_base * progress_factor, 1)
expert_score = round(expert_base * progress_factor, 1)
# 计算综合分数(已经是百分制)
overall = calculate_overall_score(
company_score,
teacher_score,
expert_score
)
# 互评分数基于综合分数±5分波动
peer_score = round(overall + random.uniform(-5, 5), 1)
peer_score = max(60, min(100, peer_score)) # 限制在60-100范围
monthly_scores.append({
'month': month,
'overall': overall,
'company': company_score,
'teacher': teacher_score,
'expert': expert_score,
'peer': peer_score
})
trends[student_id] = {
'monthlyScores': monthly_scores
}
return trends
def generate_milestones():
"""生成里程碑数据"""
milestones = {}
# 里程碑事件模板基于6门课程
milestone_templates = [
{
'courses': [0, 1], # SQL和Python课程
'events': [
'完成{course}课程项目',
'{course}期末答辩优秀',
'{course}实践报告获得好评'
]
},
{
'courses': [2, 3], # Matlab和数据可视化
'events': [
'完成{course}课程设计',
'{course}作业获得满分',
'{course}小组项目表现突出'
]
},
{
'courses': [4, 5], # 两个竞赛
'events': [
'参与{course}并获得名次',
'{course}表现优异',
'{course}获得证书'
]
}
]
for student_id in range(1, 41):
student_milestones = []
# 为每个学生随机生成2-4个里程碑
num_milestones = random.randint(2, 4)
selected_indices = random.sample(range(6), num_milestones)
for idx in sorted(selected_indices):
month = COURSE_MONTHS[idx]
course_name = COURSE_NAMES[idx]
# 选择对应的事件模板
if idx in [0, 1]:
event_template = random.choice(milestone_templates[0]['events'])
elif idx in [2, 3]:
event_template = random.choice(milestone_templates[1]['events'])
else:
event_template = random.choice(milestone_templates[2]['events'])
event = event_template.format(course=course_name)
# 分数基于学生该课程的表现从portrait数据获取
portrait = portrait_data['abilityRadar'].get(str(student_id), {})
base_score = portrait.get('average', 75)
score = round(base_score + random.uniform(-5, 10), 1)
score = max(60, min(100, score))
student_milestones.append({
'date': month,
'event': event,
'score': score
})
milestones[student_id] = student_milestones
return milestones
def generate_development_suggestions():
"""生成发展建议数据"""
suggestions = {}
# 优势模板
strengths_templates = [
'金融理论基础扎实,数据分析能力强',
'学习态度认真,能够主动思考问题',
'团队协作意识好,沟通能力较强',
'实践能力突出,善于将理论应用于实际',
'创新思维活跃,勇于尝试新方法',
'代码能力扎实,熟练掌握金融工具',
'逻辑思维清晰,问题分析能力强',
'自学能力强,能够快速掌握新知识'
]
# 劣势模板
weaknesses_templates = [
'量化投资实践经验需要积累',
'创新思维有待提升',
'风险识别能力需要更多练习',
'金融工具使用熟练度需要提高',
'理论知识体系需要进一步完善',
'数据处理效率有待提升',
'复杂问题分析能力需要加强',
'金融市场敏感度需要培养'
]
# 建议模板
suggestions_templates = [
'建议加强量化投资模型的实践学习',
'多参与金融创新项目,培养创新思维',
'定期参加投资论坛,提升专业表达能力',
'深入学习金融科技前沿技术',
'加强金融市场实时跟踪和分析',
'参与更多实战项目,积累实践经验',
'系统学习风险管理理论和方法',
'提升编程能力,掌握更多金融工具'
]
for student_id in range(1, 41):
# 获取学生能力数据
portrait = portrait_data['abilityRadar'].get(str(student_id), {})
scores = portrait.get('scores', [75] * 5)
avg_score = portrait.get('average', 75)
# 根据平均分确定优劣势数量
if avg_score >= 85:
num_strengths = 4
num_weaknesses = 2
elif avg_score >= 75:
num_strengths = 3
num_weaknesses = 3
else:
num_strengths = 2
num_weaknesses = 4
suggestions[student_id] = {
'strengths': random.sample(strengths_templates, min(num_strengths, 3)),
'weaknesses': random.sample(weaknesses_templates, min(num_weaknesses, 3)),
'suggestions': random.sample(suggestions_templates, 3)
}
return suggestions
def main():
print("开始生成报告数据...")
# 生成三部分数据
development_trends = generate_development_trends()
milestones = generate_milestones()
development_suggestions = generate_development_suggestions()
# 组装完整数据
report_data = {
'developmentTrends': development_trends,
'milestones': milestones,
'developmentSuggestions': development_suggestions
}
# 保存到文件
output_file = '分析报告/generated_report_data.json'
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(report_data, f, ensure_ascii=False, indent=2)
print(f"✅ 报告数据生成完成!")
print(f" - 发展趋势: 40名学生 × 6个月")
print(f" - 里程碑: 40名学生 × 2-4个事件")
print(f" - 发展建议: 40名学生")
print(f" - 输出文件: {output_file}")
if __name__ == '__main__':
main()