コード例 #1
0
ファイル: DB_Tools.py プロジェクト: medzarka/wKKU
    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
コード例 #2
0
    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 ')