From 27b8f01ffac2e8aa47e499e8ac0a5846e5b68227 Mon Sep 17 00:00:00 2001
From: JM Van Thong
Date: Fri, 7 Dec 2012 17:26:33 -0500
Subject: [PATCH] Added the following analyzers: StudentsActive,
OverallGradeDistribution, StudentsDropoffPerDay.
---
lms/djangoapps/instructor/views.py | 43 +++++++++----
.../courseware/instructor_dashboard.html | 63 ++++++++++++++-----
2 files changed, 80 insertions(+), 26 deletions(-)
diff --git a/lms/djangoapps/instructor/views.py b/lms/djangoapps/instructor/views.py
index f638d55f61..5c743561a9 100644
--- a/lms/djangoapps/instructor/views.py
+++ b/lms/djangoapps/instructor/views.py
@@ -274,36 +274,52 @@ def instructor_dashboard(request, course_id):
analytics_json = None
students_enrolled_json = None
+ students_active_json = None
daily_activity_json = None
students_daily_activity_json = None
students_per_problem_correct_json = None
+ overall_grade_distribution = None
+ dropoff_per_day = None
if idash_mode == 'Analytics':
- req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsPerHomework&course_id=%s" % course_id)
- analytics_json = req.json
- # get the day
+ # get current day
to_day = datetime.today().date()
from_day = to_day - timedelta(days=7)
- # number of students active in the past 7 days (including current day)
- req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsDailyActivity&course_id=%s&from=%s" % (course_id,from_day))
- students_daily_activity_json = req.json
-
- # number of students per problem who have problem graded correct
- req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsPerProblemCorrect&course_id=%s&from=%s" % (course_id,from_day))
- students_per_problem_correct_json = req.json
-
# number of students enrolled in this course
req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsEnrolled&course_id=%s" % course_id)
students_enrolled_json = req.json
- # number of students active in the past 7 days (including current day) --- online version!
+ # number of students active in the past 7 days (including current day), i.e. with at least one activity for the period
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsActive&course_id=%s&from=%s" % (course_id,from_day))
+ students_active_json = req.json
+
+ # number of students per problem who have problem graded correct
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsPerProblemCorrect&course_id=%s&from=%s" % (course_id,from_day))
+ students_per_problem_correct_json = req.json
+
+ # grade distribution for the course
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=OverallGradeDistribution&course_id=%s" % (course_id,))
+ overall_grade_distribution = req.json
+
+ # number of students distribution drop off per day
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsDropoffPerDay&course_id=%s&from=%s" % (course_id,from_day))
+ dropoff_per_day = req.json
+
+ # the following is ++incorrect++ use of studentmodule table
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsDailyActivity&course_id=%s&from=%s" % (course_id,from_day))
+ students_daily_activity_json = req.json
+
+ # number of students active in the past 7 days (including current day) --- online version! experimental
to_day = datetime.today().date()
from_day = to_day - timedelta(days=7)
req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=DailyActivityAnalyzer&course_id=%s&from=%s&to=%s" % (course_id,from_day, to_day))
daily_activity_json = req.json
+ req = requests.get(settings.ANALYTICS_SERVER_URL + "get_analytics?aname=StudentsPerHomework&course_id=%s" % course_id)
+ analytics_json = req.json
+
#----------------------------------------
# context for rendering
context = {'course': course,
@@ -320,9 +336,12 @@ def instructor_dashboard(request, course_id):
'djangopid' : os.getpid(),
'analytics_json' : analytics_json,
'students_enrolled_json' : students_enrolled_json,
+ 'students_active_json' : students_active_json,
'daily_activity_json' : daily_activity_json,
'students_daily_activity_json' : students_daily_activity_json,
'students_per_problem_correct_json' : students_per_problem_correct_json,
+ 'overall_grade_distribution' : overall_grade_distribution,
+ 'dropoff_per_day' : dropoff_per_day,
}
return render_to_response('courseware/instructor_dashboard.html', context)
diff --git a/lms/templates/courseware/instructor_dashboard.html b/lms/templates/courseware/instructor_dashboard.html
index f15647ccd2..b06eb43944 100644
--- a/lms/templates/courseware/instructor_dashboard.html
+++ b/lms/templates/courseware/instructor_dashboard.html
@@ -176,23 +176,16 @@ function goto( mode)
##-----------------------------------------------------------------------------
%if modeflag.get('Analytics'):
- Number of students enrolled: ${students_enrolled_json['data']['nb_students_enrolled']}
+
+ Number of students enrolled: ${students_enrolled_json['data']['nb_students_enrolled']}
+
+
+ Number of active students for the past 7 days: ${students_active_json['data']['nb_students_active']}
-
Daily activity for the past 7 days:
-
- | Day | Number of students |
- % for k,v in students_daily_activity_json['data'].items():
-
- | ${k} | ${v} |
-
- % endfor
-
-
+ Number of active students per problems who have this problem graded as correct:
-
-
Number of students with correct problems for the past 7 days:
| Problem | Number of students |
% for k,v in students_per_problem_correct_json['data'].items():
@@ -204,7 +197,38 @@ function goto( mode)
-
Students who attempted at least one exercise:
+ Grade distribution:
+
+
+
+
+
+
+
Number of students who dropped off per day before becoming inactive:
+
+
+
+
+
+
Students who attempted at least one exercise: