def handle(self, *args, **options): print "Computing discipline statistics" for division_set in DivisionSet.objects.all(): for discipline in Discipline.objects.all(): print "Computing... {}: {}".format(discipline, division_set) discipline_stats, created = DisciplineStats.objects.get_or_create( discipline=discipline, division_set=division_set, ) discipline_distribution = Counter() for subject in discipline.subject_set.all(): subject_stats = SubjectStats.objects.get( subject=subject, division_set=division_set) discipline_distribution += Counter( subject_stats.distribution) discipline_stats.distribution = discipline_distribution discipline_stats.mean, discipline_stats.stdev, \ discipline_stats.letter_grades = utils.distribution_stats( discipline_distribution) discipline_stats.save() print "Computing ranks..." discipline_stats_list = DisciplineStats.objects.filter( letter_grades__gte=1000).filter( division_set=division_set).order_by('mean') count = discipline_stats_list.count() for rank, stat in enumerate(discipline_stats_list): stat.my_rank = rank + 1 stat.rank_count = count stat.save()
def handle(self, *args, **options): print "Computing division statistics" # Create the division sets if they don't exist if not DivisionSet.objects.exists(): print "Creating division sets" init_division_sets() for division_set in DivisionSet.objects.all(): for subject in Subject.objects.all(): print "Computing... {}: {}".format(subject, division_set) subject_stats, created = SubjectStats.objects.get_or_create(subject=subject, division_set=division_set) subject_distribution = Counter() divisions = division_set.data['divisions'] courses = subject.course_set.filter(division__in=divisions) for course in courses: subject_distribution += Counter(course.distribution) subject_stats.distribution = subject_distribution subject_stats.mean, subject_stats.stdev, \ subject_stats.letter_grades = utils.distribution_stats( subject_distribution) subject_stats.save() print "Computing ranks..." subject_stats_list = SubjectStats.objects.filter(letter_grades__gte=1000).filter(division_set=division_set).order_by('mean') count = subject_stats_list.count() for rank, stat in enumerate(subject_stats_list): stat.my_rank = rank + 1 stat.rank_count = count stat.save()
def get_context_data(self, **kwargs): context = {} division = DivisionSet.objects.get(slug='undergraduate') courses = [] overall_distribution = Counter() subject_stats = SubjectStats.objects.filter(division_set=division) \ .filter(letter_grades__gte=1000).order_by('mean') for stat in subject_stats: if 'Interdisciplinary' in stat.subject.canonical: continue info = {} info['short_name'] = stat.subject.short_name info['full_name'] = stat.subject.canonical info['slug'] = stat.subject.slug info['discipline'] = stat.subject.discipline.name info['avg'] = stat.mean info['grade'] = utils.lettergrade(stat.mean) info['std'] = stat.stdev info['num'] = stat.letter_grades info['dist'] = stat.formatted_distribution info['rank'] = stat.my_rank overall_distribution += Counter(stat.distribution) courses.append(info) context['data'] = json.dumps(courses) context['overall_avg'], context['overall_std'], context['overall_num'] \ = utils.distribution_stats(overall_distribution) return context
def handle(self, *args, **options): print "Computing course statistics" for course in Course.objects.all(): print "Computing... {}".format(course) course_distribution = Counter() for section in course.section_set.all(): course_distribution += Counter(section.distribution) course.distribution = course_distribution course.mean, course.stdev, course.letter_grades = utils.distribution_stats( course.distribution) course.save()
def handle(self, *args, **options): print "Computing section statistics" for section in Section.objects.all(): print "Computing... {}".format(section) grade_counts = section.gradecount_set.filter(grade__letter=True) section_distribution = Counter() for gc in grade_counts: name = gc.grade.name section_distribution[name] += gc.count section.distribution = section_distribution section.mean, section.stdev, section.letter_grades = utils.distribution_stats( section.distribution) section.save()
def handle(self, *args, **options): print "Computing division statistics" # Create the division sets if they don't exist if not DivisionSet.objects.exists(): print "Creating division sets" init_division_sets() for division_set in DivisionSet.objects.all(): for subject in Subject.objects.all(): print "Computing... {}: {}".format(subject, division_set) subject_stats, created = SubjectStats.objects.get_or_create( subject=subject, division_set=division_set) subject_distribution = Counter() divisions = division_set.data['divisions'] courses = subject.course_set.filter(division__in=divisions) for course in courses: subject_distribution += Counter(course.distribution) subject_stats.distribution = subject_distribution subject_stats.mean, subject_stats.stdev, \ subject_stats.letter_grades = utils.distribution_stats( subject_distribution) subject_stats.save() print "Computing ranks..." subject_stats_list = SubjectStats.objects.filter( letter_grades__gte=1000).filter( division_set=division_set).order_by('mean') count = subject_stats_list.count() for rank, stat in enumerate(subject_stats_list): stat.my_rank = rank + 1 stat.rank_count = count stat.save()
def handle(self, *args, **options): print "Computing discipline statistics" for division_set in DivisionSet.objects.all(): for discipline in Discipline.objects.all(): print "Computing... {}: {}".format(discipline, division_set) discipline_stats, created = DisciplineStats.objects.get_or_create( discipline=discipline, division_set=division_set ) discipline_distribution = Counter() for subject in discipline.subject_set.all(): subject_stats = SubjectStats.objects.get(subject=subject, division_set=division_set) discipline_distribution += Counter(subject_stats.distribution) discipline_stats.distribution = discipline_distribution discipline_stats.mean, discipline_stats.stdev, discipline_stats.letter_grades = utils.distribution_stats( discipline_distribution ) discipline_stats.save() print "Computing ranks..." discipline_stats_list = ( DisciplineStats.objects.filter(letter_grades__gte=1000) .filter(division_set=division_set) .order_by("mean") ) count = discipline_stats_list.count() for rank, stat in enumerate(discipline_stats_list): stat.my_rank = rank + 1 stat.rank_count = count stat.save()