Ejemplo n.º 1
0
def get_dataset(request, course=None, use_cgpa=True):
    data = {}
    students = None
    active_students = [
        student for student in Student.objects.all()
        if student.user.studentsetup.allow_my_result_for_analysis
    ]
    preferred_students = [
        student for student in Student.objects.all()
        if cgpaData.get_fcgpa(student.id) >= float(
            0.75 * max(cp.get_grades(student.institution)))
        and student.user.studentsetup.allow_my_result_for_analysis
    ]
    if use_cgpa:
        students = preferred_students
        if request.user.student not in students:
            students.append(request.user.student)
    else:
        students = active_students
    for student in students:
        tmp_data = {}
        results = None
        if course:
            results = get_result_queryset(student).filter(course=course)
        else:
            results = get_result_queryset(student)
        for result in results:
            tmp_data[result.course] = float(result.total_score) / 10
        data[student] = tmp_data

    return data
def course_recommendation(request):
    try:
        own_student = request.user.student
    except:
        pass
    courses = {}
    data = {}
    is_new = True
    if request.user.is_authenticated() and hasattr(request.user, 'student'):
        for result in Result.objects.filter(student=request.user.student):
            if result.total_score < 62.5 and cgpaData.get_fcgpa(
                    own_student.id) < float(
                        max(cp.get_grades(own_student.institution)) * 0.8):
                courses[result.course] = result.total_score
        #get the recommendation for each poorly performed course
        for course in courses:
            dataset = get_dataset(request, course=course)
            matches = top_matches(dataset,
                                  request.user.student,
                                  length=5,
                                  algorithm=euclidean_distance_score)
            data['match'] = matches
    if hasattr(request.user, 'student'):
        is_new = not Result.objects.filter(
            student=request.user.student).exists()
    return {'recommendations': data, 'student_is_new': is_new}
Ejemplo n.º 3
0
def cgpa_by_level(request,
                  student_slug,
                  chartID='container',
                  chart_type='area',
                  chart_height=300):
    student = get_object_or_404(Student, slug=student_slug)
    fcgpa = cgpaData.get_fcgpa(student.id)
    grades = cp.get_grades(student.institution)
    degree = cp.get_cgpa_comment(student.institution, fcgpa)

    cgpa = []
    level = []
    pseudo_level = []
    data = {'level': [], 'cgpa': []}
    res = Result.objects.filter(student_id=student.id)
    for r in res:
        pseudo_level.append(r.level)
    for i in range(100, 700, 100):
        if i in pseudo_level:
            data['level'].append(i)
            data['cgpa'].append(cgpaData.get_level_cgpa(i, student.id))

    chart = {
        "renderTo": chartID,
        "type": chart_type,
        "height": chart_height,
        "zoomType": 'xy'
    }
    title = {"text": "%s's CGPA Breakdown" % (student)}
    xAxis = {"title": {"text": 'Level'}, "categories": data['level']}
    yAxis = {
        "title": {
            "text": "CGPA values"
        },
        "min": 0,
        "max": max(grades),
        "tickInterval": 0.5
    }
    series = [{"name": "Student CGPA", "data": data['cgpa']}]

    context = {
        'fcgpa': fcgpa,
        'max_grade': max(grades),
        'degree': degree,
        'chartID': chartID,
        'chart': chart,
        'title': title,
        'xAxis': xAxis,
        'student': student,
        'yAxis': yAxis,
        'series': series,
    }

    return render(request, "analyzer/cgpa_level.html", context)
Ejemplo n.º 4
0
 def get_context_data(self, **kwargs):
     context = super(StudentAnalyticsView, self).get_context_data(**kwargs)
     if Result.objects.filter(student=self.request.user.student).exists():
         context['fcgpa'] = cgpaData.get_fcgpa(self.request.user.student.id)
         context['exam_no'] = Result.objects.filter(student_id=self.request.user.student.id).count()
         context['avg_score'] = "%.2f" % (Result.objects.filter(student_id=self.request.user.student.id).values('total_score')\
                                 .aggregate(avg=Avg('total_score'))['avg'])
         context['high_score'] = Result.objects.filter(student_id=self.request.user.student.id).order_by('-total_score')[0]
     else:
         context['fcgpa'] = max(cp.get_grades(self.request.user.student.institution))
         context['avg_score'] = float(0)
     return context
def performances(request):
    performance_list = {}
    for student in Student.objects.all():
        tmp_dict = {}
        tmp_dict['name'] = student
        tmp_dict['department'] = student.department
        tmp_dict['reg_number'] = student.reg_number
        tmp_dict['user'] = student.user
        try:
            tmp_dict['are_friends'] = Friend.objects.are_friends(
                request.user, student.user)
        except:
            pass
        if student.photo:
            tmp_dict['img'] = student.photo
        else:
            tmp_dict['img'] = 'None'
        tmp_dict['institution'] = student.institution
        if student.result_set.count() > 0:
            tmp_dict['cgpa'] = cgpaData.get_fcgpa(student.id)
        else:
            tmp_dict['cgpa'] = float(max(cp.get_grades(student.institution)))
        performance_list[student] = tmp_dict

    key_list = sorted(performance_list.keys(),
                      key=lambda x: performance_list[x]['cgpa'],
                      reverse=True)
    trending_performances = []
    current_student_rank = None
    count = 0
    for key in key_list:
        count += 1
        if not request.user.is_anonymous() and hasattr(request.user,
                                                       'student'):
            if key == request.user.student:
                current_student_rank = count
        trending_performances.append(performance_list[key])
    return {
        'trending_performances': trending_performances[:5],
        'student_rank': current_student_rank,
    }