ZhangQiPro/generate_bigscreen_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

161 lines
5.9 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 -*-
"""
生成大屏数据bigScreenData
"""
import json
# 读取画像数据(包含成绩分布)
with open('分析报告/generated_portrait_data.json', 'r', encoding='utf-8') as f:
portrait_data = json.load(f)
# 读取评价数据(包含评分)
with open('分析报告/generated_evaluations.json', 'r', encoding='utf-8') as f:
evaluations = json.load(f)
def calculate_grade_distribution():
"""计算成绩分布 - 基于40名学生的真实平均分"""
grades = {
'excellent': 0, # 优秀 90-100
'good': 0, # 良好 80-89
'average': 0, # 中等 70-79
'pass': 0, # 及格 60-69
'fail': 0 # 不及格 0-59
}
# 从画像数据中获取每个学生的平均分
for student_id, data in portrait_data['abilityRadar'].items():
avg_score = data['average']
if avg_score >= 90:
grades['excellent'] += 1
elif avg_score >= 80:
grades['good'] += 1
elif avg_score >= 70:
grades['average'] += 1
elif avg_score >= 60:
grades['pass'] += 1
else:
grades['fail'] += 1
return [
{ 'grade': '优秀(90-100)', 'count': grades['excellent'], 'color': '#10b981' },
{ 'grade': '良好(80-89)', 'count': grades['good'], 'color': '#3b82f6' },
{ 'grade': '中等(70-79)', 'count': grades['average'], 'color': '#f59e0b' },
{ 'grade': '及格(60-69)', 'count': grades['pass'], 'color': '#ef4444' },
{ 'grade': '不及格(0-59)', 'count': grades['fail'], 'color': '#6b7280' }
]
def calculate_ability_matrix():
"""计算能力矩阵 - 5维度数据采集、数据清洗、数据分析、结果解读、工具实操"""
dimensions = ['数据采集', '数据清洗', '数据分析', '结果解读', '工具实操']
# 计算每个维度的班级平均值
dimension_averages = [0, 0, 0, 0, 0]
student_count = len(portrait_data['abilityRadar'])
for student_id, data in portrait_data['abilityRadar'].items():
scores = data['scores']
for i in range(5):
dimension_averages[i] += scores[i]
# 计算平均值
dimension_averages = [round(avg / student_count, 1) for avg in dimension_averages]
# 选择3名代表性学生展示
students = [
{
'name': '优秀组',
'values': dimension_averages, # 使用班级平均值
'color': '#06b6d4'
},
{
'name': '良好组',
'values': [round(v * 0.95, 1) for v in dimension_averages], # 稍低于平均
'color': '#3b82f6'
},
{
'name': '中等组',
'values': [round(v * 0.88, 1) for v in dimension_averages], # 更低
'color': '#10b981'
}
]
return {
'dimensions': dimensions,
'students': students
}
def calculate_real_time_data():
"""计算实时统计数据"""
# 统计已完成评价的学生数
evaluated_count = 0
total_evaluations = 0
total_score = 0
for student_id in range(1, 41):
sid = str(student_id)
has_company = sid in evaluations['company']
has_teacher = sid in evaluations['teacher']
has_expert = sid in evaluations['expert']
if has_company and has_teacher and has_expert:
evaluated_count += 1
total_evaluations += 3
# 计算综合分数
company = evaluations['company'][sid]
teacher = evaluations['teacher'][sid]
expert = evaluations['expert'][sid]
# 企业评分(百分制)
company_avg = (company['attitude'] + company['skills'] +
company['communication'] + company['problemSolving']) / 4 * 20
# 教师评分(百分制)
teacher_avg = teacher['courseGrade']
# 专家评分(百分制)
expert_avg = (expert['industryKnowledge'] + expert['technicalDepth'] +
expert['applicationAbility'] + expert['potential']) / 4 * 20
# 综合评分(加权平均)
overall = company_avg * 0.3 + teacher_avg * 0.4 + expert_avg * 0.3
total_score += overall
avg_score = round(total_score / evaluated_count, 1) if evaluated_count > 0 else 0
completion_rate = round((evaluated_count / 40) * 100, 1)
return {
'studentCount': 40,
'evaluationCount': total_evaluations,
'completionRate': completion_rate,
'averageScore': avg_score
}
# 生成大屏数据
bigscreen_data = {
'gradeDistribution': calculate_grade_distribution(),
'abilityMatrix': calculate_ability_matrix(),
'practiceStats': [
{ 'label': '实习课程数', 'value': 6, 'icon': 'Reading', 'trend': '+6门' },
{ 'label': '专业数', 'value': 1, 'icon': 'OfficeBuilding', 'trend': '金融工程' },
{ 'label': '实习人数', 'value': 40, 'icon': 'User', 'trend': '2023级' },
{ 'label': '辅导老师数', 'value': 5, 'icon': 'UserFilled', 'trend': '校内+企业' },
{ 'label': '实习企业数', 'value': 8, 'icon': 'School', 'trend': '知名企业' }
],
'realTimeData': calculate_real_time_data()
}
# 保存到JSON文件
output_file = '分析报告/generated_bigscreen_data.json'
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(bigscreen_data, f, ensure_ascii=False, indent=2)
print(f"✅ 大屏数据生成完成!")
print(f" - 成绩分布: {len(bigscreen_data['gradeDistribution'])}个档次")
print(f" - 能力矩阵: {len(bigscreen_data['abilityMatrix']['dimensions'])}个维度")
print(f" - 实践统计: {len(bigscreen_data['practiceStats'])}项指标")
print(f" - 实时数据: 学生{bigscreen_data['realTimeData']['studentCount']}人,完成率{bigscreen_data['realTimeData']['completionRate']}%")