def get_or_add_Sectionreport(self, section_obj, semester, user, grades, analysis): _doc = None for _document in Document.objects.filter(semester=semester, document_class=self.section_document_class): try: _section_code = _document.data_dict['section'] if _section_code == section_obj.section_code: _doc = _document break except: pass if _doc is None: _doc = Document() _doc.document_class = self.section_document_class _doc.document_owner = user _doc.semester = semester _data = {} _data['grades'] = grades _data['section'] = int(section_obj.section_code) _data['teacher'] = user.username _data['semester'] = semester.semester_name _data['academic_year'] = semester.semester_academic_year.academic_year_name _data['campus'] = section_obj.section_course.program.department.college.campus.campus_name_en _data['college'] = section_obj.section_course.program.department.college.college_name_en _data['department'] = section_obj.section_course.program.department.department_name_en _data['course'] = section_obj.section_course.course_name _data['filename'] = 'section__' + str(section_obj.section_code) _data['max_grade'] = 100 _stats = {} _stats = Section_Measurment(grades).compute_statistics() if analysis == '' or analysis == None: pass else: _stats['analysis'] = analysis _doc.data_dict = {**_data, **_stats} _doc.save() return _doc
def ImportMyData(self, request, queryset): for __semester in queryset: _course_section_reports_list = {} _department_course_reports_list = {} ___section_report = True ___course_report = True ___department_report = True getOrAdd_tool = getOrAdd() ################################################## IMPORT DATA AND SECTION REPORTS if ___section_report: with open('data.csv', mode='r') as infile: reader = csv.reader(infile) _start = True line = 0 for row in reader: line += 1 print('Handling line : ' + str(line)) if _start: _start = False continue __campus = getOrAdd_tool.get_or_add_Campus( row[16], row[15], row[15]) __college = College.objects.get( college_name_en=row[13], campus=__campus) __department = getOrAdd_tool.get_or_add_Department( __college, row[12], row[11], row[11]) _program_name = 'program__' + row[11] __program = getOrAdd_tool.get_or_add_Program( __department, _program_name, _program_name, row[12]) __course = getOrAdd_tool.get_or_add_Course( __program, row[10], row[9], row[8]) __user = getOrAdd_tool.get_or_add_User( row[0], row[5], row[3], row[1], row[2], row[3], row[4], row[2]) __users = [] __users.append(__user) __section = getOrAdd_tool.get_or_add_Section( __course, row[6], __semester, __users) ############ We create now a new document for a given section # the document with all the data try: _doc = getOrAdd_tool.get_or_add_Sectionreport( __section, __semester, __user, eval(row[26]), row[17]) try: _course_section_reports_list[__course].append( _doc) except KeyError: _course_section_reports_list[__course] = [] _course_section_reports_list[__course].append( _doc) getOrAdd_tool.add_Section_report_version(_doc) except (IndexError, SyntaxError): print("Error in line " + str(line)) ################################################## COURSE REPORTS if ___section_report: for _course in _course_section_reports_list.keys(): if len(_course_section_reports_list[_course] ) > 1: # we have a course with more than a section print( "################################################## Course " + _course.course_name) _course_sections = [] _composed_grades = {} _teachers_list = [] _fused_grades = {} _fused_grades['mids'] = [] _fused_grades['finals'] = [] _fused_grades['totals'] = [] for _section_report in _course_section_reports_list[ _course]: _section_code = _section_report.data_dict[ 'section'] _course_sections.append(_section_code) print("\t Section " + str(_section_code)) _tmp = {} _grades = _section_report.data_dict['grades'] _tmp['finals'] = _grades['finals'] _tmp['mids'] = _grades['mids'] _tmp['totals'] = _grades['totals'] _composed_grades[_section_code] = _tmp _fused_grades['mids'].extend(_grades['mids']) _fused_grades['finals'].extend(_grades['finals']) _fused_grades['totals'].extend(_grades['totals']) if _section_report.document_owner.username not in _teachers_list: _teachers_list.append( _section_report.document_owner.username) __user = _section_report.document_owner _doc.document_class = DocumentClass.objects.get( document_class_name='Course Report') _doc.document_owner = User.objects.get( username='******') _doc.semester = __semester _stats = {} _stats = Course_Measurment( _composed_grades).compute_statistics() _data = {} _data[ 'campus'] = _course.program.department.college.campus.campus_name_en _data[ 'college'] = _course.program.department.college.college_name_en _data[ 'department'] = _course.program.department.department_name_en _data['course_name'] = _course.course_name _data['course_code'] = _course.course_code _data['section'] = str(_course_sections) _data['max_grade'] = 100 _data['teachers'] = _teachers_list _data['semester'] = __semester.semester_name _data[ 'academic_year'] = __semester.semester_academic_year.academic_year_name _data['fused_grades'] = _fused_grades _data['composed_grades'] = _composed_grades _data[ 'filename'] = 'course__' + _course.course_code + '--' + _course.course_name _doc.data_dict = {**_data, **_stats} _doc.save() getOrAdd_tool.add_Course_report_version(_doc) try: _department_course_reports_list[ _course.program.department].append(_doc) except (ValueError, KeyError): _department_course_reports_list[ _course.program.department] = [] _department_course_reports_list[ _course.program.department].append(_doc) ################################################## COURSE REPORTS if ___department_report: for _department in Department.objects.all(): print('######################## Department ' + _department.department_name_en) _Department_means = {} _Department_grades = {} for _program in _department.program_set.all(): for _course in _program.course_set.all(): _mean = 9999.9999 _grades = {} # look for the report _sections_count = Section.objects.filter( semester=__semester, section_course=_course).count() if _sections_count == 0: continue # no sections if _sections_count == 1: # we gather the data from a section report for _report in Document.objects.filter( semester=__semester, document_class=DocumentClass.objects. get(document_class_name='Section report' )): if _report.data_dict[ 'course'] == _course.course_name: _Department_means[ _course.course_name] = float( _report.data_dict['mean']) _Department_grades[ _course. course_name] = _report.data_dict[ 'grades']['totals'] break if _sections_count > 1: # we gather the data from a course report for _report in Document.objects.filter( semester=__semester, document_class=DocumentClass.objects. get(document_class_name='Course Report' )): if _report.data_dict[ 'course_name'] == _course.course_name: _Department_means[ _course. course_name] = _report.data_dict[ 'mean'] _Department_grades[ _course. course_name] = _report.data_dict[ 'fused_grades']['totals'] break if len(_Department_grades.keys()) > 0: print(_Department_means) print(_Department_grades) __sorted_means = OrderedDict( sorted(_Department_means.items(), key=lambda t: t[1])) __low_means = {} __High_means = {} for val in __sorted_means.keys(): if __sorted_means[val] < 60: __low_means[val] = __sorted_means[val] if __sorted_means[val] >= 90: __High_means[val] = __sorted_means[val] print('Low means are ' + str(__low_means)) print('High means are ' + str(__High_means)) _annova_value = -1 _annova_sig = -1 _eta_squared = -1 _eta_test = -1 if len(_Department_means.keys()) >= 2: _annova_value, _annova_sig = scipy.stats.f_oneway( *[ _Department_grades[val] for val in _Department_grades.keys() ]) _eta_squared = float( self.__ss_between_(*[ _Department_grades[val] for val in _Department_grades.keys() ]) / self.__ss_total_(*[ _Department_grades[val] for val in _Department_grades.keys() ])) _eta_test = math.sqrt(_eta_squared) # Find the document _doc = None for _document in Document.objects.filter( semester=__semester, document_class=DocumentClass.objects.get( document_class_name='Department Report')): try: _department_name = _document.data_dict[ 'department'] if _department_name == _department.department_name_en: _doc = _document break except: pass if _doc is None: _doc = Document() _doc.document_owner = User.objects.get( username='******') _doc.document_class = DocumentClass.objects.get( document_class_name='Department Report') _doc.semester = __semester _data = {} _data['low_means'] = __low_means _data['high_means'] = __High_means _data['annova_value'] = float( "{0:.4f}".format(_annova_value)) _data['annova_sig'] = float( "{0:.4f}".format(_annova_sig)) _data['eta'] = float("{0:.4f}".format(_eta_squared)) _data['eta_sig'] = float("{0:.4f}".format(_eta_test)) _data['department'] = _department.department_name_en _data['college'] = _department.college.college_name_en _data[ 'campus'] = _department.college.campus.campus_name_en _data['nbr_courses'] = len(_Department_grades.keys()) _data['semester'] = __semester.semester_name _data[ 'academic_year'] = __semester.semester_academic_year.academic_year_name _data[ 'filename'] = 'department__' + _department.department_name_en print(str(_data)) _doc.data_dict = _data _doc.save() getOrAdd_tool.add_Department_report_version(_doc) from django.contrib import messages messages.info(request, 'Data is Imported ')