fix: stat on class when no evalution
This commit is contained in:
51
models.py
51
models.py
@@ -410,6 +410,7 @@ class ClassGroup(db.Model):
|
||||
'assessments_count': 0,
|
||||
'students_count': len(self.students),
|
||||
'class_averages': [],
|
||||
'student_averages': [],
|
||||
'overall_statistics': {
|
||||
'count': 0,
|
||||
'mean': 0,
|
||||
@@ -418,7 +419,8 @@ class ClassGroup(db.Model):
|
||||
'max': 0,
|
||||
'std_dev': 0
|
||||
},
|
||||
'distribution': []
|
||||
'distribution': [],
|
||||
'student_averages_distribution': []
|
||||
}
|
||||
|
||||
# Calculer les moyennes par évaluation et par élève
|
||||
@@ -468,7 +470,7 @@ class ClassGroup(db.Model):
|
||||
avg = statistics.mean(scores)
|
||||
student_final_averages.append(round(avg, 2))
|
||||
|
||||
# Statistiques globales sur toutes les notes du trimestre
|
||||
# Statistiques globales basées sur les moyennes des élèves (cohérent avec l'histogramme)
|
||||
overall_stats = {
|
||||
'count': 0,
|
||||
'mean': 0,
|
||||
@@ -481,41 +483,21 @@ class ClassGroup(db.Model):
|
||||
distribution = []
|
||||
student_averages_distribution = []
|
||||
|
||||
if all_individual_scores:
|
||||
# Utiliser les moyennes des élèves pour les statistiques (cohérent avec l'histogramme)
|
||||
if student_final_averages:
|
||||
import statistics
|
||||
import math
|
||||
|
||||
overall_stats = {
|
||||
'count': len(all_individual_scores),
|
||||
'mean': round(statistics.mean(all_individual_scores), 2),
|
||||
'median': round(statistics.median(all_individual_scores), 2),
|
||||
'min': round(min(all_individual_scores), 2),
|
||||
'max': round(max(all_individual_scores), 2),
|
||||
'std_dev': round(statistics.stdev(all_individual_scores) if len(all_individual_scores) > 1 else 0, 2)
|
||||
'count': len(student_final_averages),
|
||||
'mean': round(statistics.mean(student_final_averages), 2),
|
||||
'median': round(statistics.median(student_final_averages), 2),
|
||||
'min': round(min(student_final_averages), 2),
|
||||
'max': round(max(student_final_averages), 2),
|
||||
'std_dev': round(statistics.stdev(student_final_averages) if len(student_final_averages) > 1 else 0, 2)
|
||||
}
|
||||
|
||||
# Créer l'histogramme de distribution (bins de 1 point sur 20)
|
||||
bins = list(range(0, 22)) # 0-1, 1-2, ..., 19-20, 20+
|
||||
bin_counts = [0] * (len(bins) - 1)
|
||||
|
||||
for score in all_individual_scores:
|
||||
# Trouver le bon bin
|
||||
bin_index = min(int(score), len(bin_counts) - 1)
|
||||
bin_counts[bin_index] += 1
|
||||
|
||||
# Formatage pour Chart.js
|
||||
for i in range(len(bin_counts)):
|
||||
if i == len(bin_counts) - 1:
|
||||
label = f"{bins[i]}+"
|
||||
else:
|
||||
label = f"{bins[i]}-{bins[i+1]}"
|
||||
|
||||
distribution.append({
|
||||
'range': label,
|
||||
'count': bin_counts[i]
|
||||
})
|
||||
|
||||
# Créer l'histogramme des moyennes des élèves
|
||||
# Créer l'histogramme des moyennes des élèves (distribution principale)
|
||||
if student_final_averages:
|
||||
# Bins pour les moyennes des élèves (de 0 à 20)
|
||||
avg_bins = list(range(0, 22))
|
||||
@@ -533,10 +515,13 @@ class ClassGroup(db.Model):
|
||||
else:
|
||||
label = f"{avg_bins[i]}-{avg_bins[i+1]}"
|
||||
|
||||
student_averages_distribution.append({
|
||||
bin_data = {
|
||||
'range': label,
|
||||
'count': avg_bin_counts[i]
|
||||
})
|
||||
}
|
||||
student_averages_distribution.append(bin_data)
|
||||
# Maintenir la compatibilité avec distribution (même données maintenant)
|
||||
distribution.append(bin_data.copy())
|
||||
|
||||
return {
|
||||
'trimester': trimester,
|
||||
|
||||
Reference in New Issue
Block a user