Exemple #1
0
def dashboard(request):
    query_set = Submission.objects.all().values('lang').annotate(
        langcount=Count('lang'))
    print query_set
    #data_source = ModelDataSource(query_set, fields=['user', 'experience_points', 'experience_points'],)
    row = list()
    data = list()
    data.append(['Langages', 'Submisions'])
    for query in query_set:
        languages = ConsoleLanguage.objects.filter(id=query.values()[0])
        for language in languages:
            row.append(language.lang)
        numbers = query.values()[1]
        row.append(numbers)
        data.append(row)
        row = list()
    print data
    #data.append(['c', '5']) not needed for production

    data_matrix = [data]
    data_source = SimpleDataSource(data=data)
    # chart = morris.DonutChart(data_source)
    options = {
        'title': 'Language wise submissions',
        'subtitle': "Total submissions: " + str(Submission.objects.count()),
    }
    chart_language = highcharts.PieChart(data_source, options=options)
    chart_language.html_id = "languagesubmissions"
    # Preparing chart for problem difficulty levels
    query_set = Problem.objects.all().values('difficulty').annotate(
        difficulty_count=Count('difficulty'))
    print query_set
    data = list()
    row = list()
    data.append(['Difficulty', 'Problem Count'])
    for query in query_set:
        row.append(get_difficulty_verbose(query['difficulty']))
        row.append(query['difficulty_count'])
        data.append(row)
        row = list()
    print data
    data_source = SimpleDataSource(data)
    options = {
        'title': 'Problem distribution : Difficulty wise',
        'subtitle': "Total Problems: " + str(Problem.objects.count()),
    }
    chart_difficulty = highcharts.ColumnLineChart(data_source, options=options)
    context = {
        'chart_language': chart_language,
        'chart_difficulty': chart_difficulty,
        'active_tab': 'dashboard',
    }
    chart_difficulty.html_id = "difficultychart"
    return render(request, 'www/dashboard.html', context)
Exemple #2
0
def get_grades(request):
    """ Obtenemos el get de nuestro formulario,
        Si no hay datos alimentamos vacio para evitar errores
    """
    student_id = request.GET.get('student_id', '')
    # Validamos nuestra variable
    if student_id:
        # Realizamos nuestra consulta por student_id orden por type
        queryset = grades.objects(student_id=student_id).order_by('type')
        # Creamos Nuestra lista
        scores_chart = [
            ['type', 'score'],
        ]
        # Agregamos valores a nuestra lista
        for grad in queryset:
            scores_chart.append([
                grad.type,
                grad.score,
            ])
        # Esto nos crea nuestra estadistica
        data_source = SimpleDataSource(data=scores_chart)
        donut_chart = BarChart(data_source)
        context = {'donut_chart': donut_chart, 'student_id': student_id}
        # Pasamos nuestros datos al template
        return render(request, 'myapp/get_grades.html', context)
    else:
        return render(request, 'myapp/get_grades.html')
Exemple #3
0
def get_chart(data, type):

    data_source = []
    data_source.append(['Date', type])
    if (len(data) == 0):
        data_source.append(['No Data', 0])
    for k, v in data.items():
        # date_=""
        # date_=datetime.datetime.strptime(data.index.values[i].astype(str),'%Y-%m-%dT00:00:00.000000000')
        # date_=datetime.datetime.strftime(date_,'%d %b %Y')
        data_source.append([k, v])

    options1 = {
        'title': type,
        'series': [{
            'color': '#000080'
        }],
    }

    #       <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    # <script type="text/javascript">
    #     google.load("visualization", "1", {packages:["corechart"]});
    # </script>                               {{ products_chart.as_html }}

    chart_name = gchart.LineChart(SimpleDataSource(data=data_source),
                                  options=options1,
                                  html_id=type,
                                  width="100%")

    return chart_name
Exemple #4
0
def graphos_test(request):
    #q = Tracker.objects.all()
    #data_source = ModelDataSource(q, fields = ['type', 'contract_value'])
    data = [
        ['Year', 'Sales'],
        [2010, 150],
        [2011, 200],
        [2012, 300],
    ]
    data_source = SimpleDataSource(data=data)
    chart = LineChart(data_source)
    context = {'chart': chart}
    return render(request, 'reports/g_test.html', context)
Exemple #5
0
def _open_model_trend(request):

    queryset = TemperatureReading.objects.all()
    data = []
    dateSeen = {}
    for t in queryset:
        day = t.datetime.day
        month = t.datetime.month
        year = t.datetime.year
        if year in dateSeen:
            if month in dateSeen[year]:
                if day in dateSeen[year][month]:
                    continue
                else:
                    dateSeen[year][month].append(day)
            else:
                dateSeen[year] = {
                    month: [
                        day,
                    ]
                }
        else:
            dateSeen[year] = {
                month: [
                    day,
                ]
            }

        data.append([int(t.datetime.strftime('%Y%m%d')), float(t.value)])
    data = sorted(data, key=lambda x: x[0])
    data.insert(0, ['Date', 'Value'])
    chart = LineChart(SimpleDataSource(data=data), html_id="line_chart")
    data = {'chart': chart}
    s = chart.as_html()

    return render(template_name='model_popup.html',
                  context=data,
                  request=request)
Exemple #6
0
def bar_chart_maker_simple(data):

    #Graph display options
    opt = {
        'series': {
            'lines': {
                'show': False,
                'steps': False
            },
            'bars': {
                'show': True,
                'barWidth': 1.0,
                'align': 'center',
            },
        },
        'xaxis': {
            'mode': "categories",
            'categories': ["Category One", "Category Two", "Category Three"]
        },
    }

    #passing data to data object for chart drawing
    chart = BarChart(data_source=SimpleDataSource(data=data), options=opt)
    return chart
Exemple #7
0
def graphview(request, difftime, contid):
    ldatetime = datetime.now() - timedelta(minutes=int(difftime))
    indexint = calendar.timegm(ldatetime.timetuple())
    mk_id = indexint * 10**9
    evndata = []

    start_evn_id = indexint / (10**5)
    start_data_id = indexint / (10**5)

    try:
        tzu = TZUser.objects.get(user=request.user)
        tzobj = tzu.usertimezone
    except ObjectDoesNotExist:
        tzobj = 'UTC'

    if contid == "":
        cont = ControllerInfo.objects.all()[0:1].get()
        return redirect('receivedata.views.graphview',
                        difftime=difftime,
                        contid=cont.controllerid)

    disLevel = dict(Event.LEVEL_CHOICES)
    for evn in Event.objects.filter(controllerid=contid,
                                    id__gt=mk_id).order_by('-id')[0:10]:
        list = {
            'id':
            evn.id,
            'measureddate':
            evn.measureddate.astimezone(
                pytz.timezone(tzobj)).strftime('%Y-%m-%d %H:%M:%S'),
            'level':
            disLevel[evn.level],
            'code':
            evn.code,
            'message':
            evn.message,
        }
        evndata.append(list)

    if len(evndata) > 0:
        start_evn_id = evndata[0]['id'] / (10**5)

    data = [[
        "measured data", "Battery-Power", "DEG-Power", "Grid-Power",
        "Load-Power", "PV-Power"
    ]]
    data2 = [[
        "measured data",
        "Battery-SoC",
        "Battery-Voltage",
    ]]
    data3 = [[
        "measured data",
        "Battery-Cell",
        "Inner",
        "Outer",
    ]]

    idlist = []

    for obj in MeasuredBattery.objects.filter(controllerid=contid,
                                              id__gt=mk_id).order_by('id'):
        try:
            mdeg = MeasuredDEG.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mdeg = MeasuredDEG()
            mdeg.status = 0
            mdeg.power = 0
        try:
            mgrid = MeasuredGrid.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mgrid = MeasuredGrid()
            mgrid.status = 0
            mgrid.power = 0
        try:
            mload = MeasuredLoad.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mload = MeasuredLoad()
            mload.power = 0
        try:
            mpv = MeasuredPV.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mpv = MeasuredPV()
            mpv.power = 0
        try:
            mt1 = MeasuredTemperature.objects.filter(
                controllerid=obj.controllerid,
                deviceindex=0,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mt1 = MeasuredTemperature()
            mt1.temperature = 0
        try:
            mt2 = MeasuredTemperature.objects.filter(
                controllerid=obj.controllerid,
                deviceindex=1,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mt2 = MeasuredTemperature()
            mt2.temperature = 0

        settime = calendar.timegm(
            obj.measureddate.astimezone(
                pytz.timezone(tzobj)).timetuple()) * 1000,
        list = [
            settime,
            smart_str(obj.power),
            smart_str(mdeg.power),
            smart_str(mgrid.power),
            smart_str(mload.power),
            smart_str(mpv.power),
        ]
        data.append(list)
        list2 = [
            settime,
            smart_str(obj.soc),
            smart_str(obj.voltage),
        ]
        data2.append(list2)

        list3 = [
            settime,
            smart_str(obj.celltem),
            smart_str(mt1.temperature),
            smart_str(mt2.temperature),
        ]
        data3.append(list3)

        start_data_id = obj.id / (10**5)
        if len(data) > 50:
            del data[1]
            del data2[1]
            del data3[1]

    chart = flot.LineChart(
        SimpleDataSource(data=data),
        html_id="line_chart1",
        options={'xaxis': {
            'mode': 'time',
            'timeformat': '%H:%M'
        }})
    chart2 = flot.LineChart(SimpleDataSource(data=data2),
                            html_id="line_chart2",
                            options={
                                'xaxis': {
                                    'mode': 'time',
                                    'timeformat': '%H:%M'
                                },
                                'yaxes': [{
                                    'position': 'left',
                                    'min': 0,
                                    'max': 100
                                }, {
                                    'position': 'right',
                                    'min': 0,
                                    'max': 65
                                }]
                            })
    chart3 = flot.LineChart(
        SimpleDataSource(data=data3),
        html_id="line_chart3",
        options={'xaxis': {
            'mode': 'time',
            'timeformat': '%H:%M'
        }})

    cdata2 = chart2.get_series_objects()

    cdata2[1]['yaxis'] = 2

    arealist = AreaInfo.objects.values('areaid', 'areanm')
    continfo = ControllerInfo.objects.get(pk=contid)
    placeid = continfo.placeid
    placeinfo = PlaceInfo.objects.get(pk=placeid.placeid)
    areaid = placeinfo.areaid
    placelist = PlaceInfo.objects.filter(
        areaid_id__exact=areaid.areaid).values('placeid', 'placenm')
    contlist = ControllerInfo.objects.filter(
        placeid_id__exact=placeid.placeid).values('controllerid',
                                                  'controllernm')

    #jarealist=json.dumps(list(arealist))
    #jplacelist=json.dumps(placelist)
    #jcontlist=json.dumps(contlist)

    my_context = {
        'evnlist': evndata,
        'cdata1': chart.get_series_objects_json(),
        'cdata2': json.dumps(cdata2),
        'cdata3': chart3.get_series_objects_json(),
        'contid': contid,
        'difftime': difftime,
        'startevnid': start_evn_id,
        'startdataid': start_data_id,
        'areaid': areaid.areaid,
        'placeid': placeid.placeid,
        'arealist': arealist,
        'placelist': placelist,
        'contlist': contlist,
    }

    return render_to_response(["graphview.html"],
                              my_context,
                              context_instance=RequestContext(request))
Exemple #8
0
def getdatapower(request, dataid, contid):

    mk_id = int(dataid) * 10**5 + 99999

    data = [[
        "measured data", "Battery-Power", "DEG-Power", "Grid-Power",
        "Load-Power", "PV-Power"
    ]]
    data2 = [[
        "measured data",
        "Battery-SoC",
        "Battery-Voltage",
    ]]
    data3 = [[
        "measured data",
        "Battery-Cell",
        "Inner",
        "Outer",
    ]]

    try:
        tzu = TZUser.objects.get(user=request.user)
        tzobj = tzu.usertimezone
    except ObjectDoesNotExist:
        tzobj = 'UTC'

    for obj in MeasuredBattery.objects.filter(controllerid=contid,
                                              id__gt=mk_id).order_by('id'):
        try:
            mdeg = MeasuredDEG.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mdeg = MeasuredDEG()
            mdeg.status = 0
            mdeg.power = 0
        try:
            mgrid = MeasuredGrid.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mgrid = MeasuredGrid()
            mgrid.status = 0
            mgrid.power = 0
        try:
            mload = MeasuredLoad.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mload = MeasuredLoad()
            mload.power = 0
        try:
            mpv = MeasuredPV.objects.filter(
                controllerid=obj.controllerid,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mpv = MeasuredPV()
            mpv.power = 0
        try:
            mt1 = MeasuredTemperature.objects.filter(
                controllerid=obj.controllerid,
                deviceindex=0,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mt1 = MeasuredTemperature()
            mt1.temperature = 0
        try:
            mt2 = MeasuredTemperature.objects.filter(
                controllerid=obj.controllerid,
                deviceindex=1,
                uniquekey=obj.uniquekey)[0:1].get()
        except ObjectDoesNotExist:
            mt2 = MeasuredTemperature()
            mt2.temperature = 0

        settime = calendar.timegm(
            obj.measureddate.astimezone(
                pytz.timezone(tzobj)).timetuple()) * 1000,
        list = [
            settime,
            smart_str(obj.power),
            smart_str(mdeg.power),
            smart_str(mgrid.power),
            smart_str(mload.power),
            smart_str(mpv.power),
        ]
        data.append(list)
        list2 = [
            settime,
            smart_str(obj.soc),
            smart_str(obj.voltage),
        ]
        data2.append(list2)

        list3 = [
            settime,
            smart_str(obj.celltem),
            smart_str(mt1.temperature),
            smart_str(mt2.temperature),
        ]
        data3.append(list3)

        dataid = obj.id / (10**5)

        if len(data) > 50:
            break

    chart = flot.LineChart(
        SimpleDataSource(data=data),
        html_id="line_chart1",
        options={'xaxis': {
            'mode': 'time',
            'timeformat': '%H:%M'
        }})
    chart2 = flot.LineChart(SimpleDataSource(data=data2),
                            html_id="line_chart2",
                            options={
                                'xaxis': {
                                    'mode': 'time',
                                    'timeformat': '%H:%M'
                                },
                                'yaxes': [{
                                    'position': 'left',
                                    'min': 0,
                                    'max': 100
                                }, {
                                    'position': 'right',
                                    'min': 0,
                                    'max': 65
                                }]
                            })
    cdata2 = chart2.get_series_objects()
    cdata2[1]['yaxis'] = 2
    chart3 = flot.LineChart(
        SimpleDataSource(data=data3),
        html_id="line_chart3",
        options={'xaxis': {
            'mode': 'time',
            'timeformat': '%H:%M'
        }})
    alldata = {
        'data1': chart.get_series_objects(),
        'data2': cdata2,
        'data3': chart3.get_series_objects(),
        'startdataid': dataid
    }

    return HttpResponse(json.dumps(alldata))
Exemple #9
0
def home(request):
    #grab all data
    data = Tracker.objects.all()
    #grab data filed to open items
    open = Tracker.objects.filter(end_date__isnull=True)
    acount = 0.0
    asum = 0.0
    cat_sum_dict = {}
    cat_count_dict = {}
    #run through open items and calculate averages
    for t in open:
        ed = date.today()
        sd = t.start_date
        day = ed - sd
        acount = acount + 1
        asum = asum + day.days
        #make sure the key exists in the dictionary
        if t.type in cat_sum_dict:
            a = 1 + 1
        else:
            cat_sum_dict[t.type] = 0.0
        #make sure the key exists in the dictionary
        if t.type in cat_count_dict:
            b = 1 + 1
        else:
            cat_count_dict[t.type] = 0.0
        #write the intances data to the dictionary
        cat_sum_dict[t.type] = cat_sum_dict[t.type] + day.days
        cat_count_dict[t.type] = cat_count_dict[t.type] + 1
    #cacluate all average
    all_average = asum / acount

    #calcualte avg by category
    cat_avg = {}
    for cat in cat_sum_dict.keys():
        avg = cat_sum_dict[cat] / cat_count_dict[cat]
        cat_avg[cat] = avg
    data = [['Label', 'Value'], ['Days', int(all_average)]]
    if int(all_average) > 14:
        gmax = int(all_average)
    else:
        gmax = 14
    speed_data = SimpleDataSource(data=data)
    speed_chart = GaugeChart(speed_data,
                             width=400,
                             height=200,
                             options={
                                 'greenFrom': 0,
                                 'greenTo': 5,
                                 'yellowFrom': 5,
                                 'yellowTo': 7,
                                 'redFrom': 7,
                                 'redTo': gmax,
                                 'max': gmax
                             })

    context = {
        'data': data,
        'all_average': all_average,
        'cat_avg': cat_avg,
        'chart': speed_chart
    }
    return render(request, 'reports/home.html', context)
Exemple #10
0
def stats(request):
    data = [['Date']]
    if Task.objects.filter(user=request.user.id):
        if not request.GET:
            data[0].append('Tasks Completed')
            init_dates(data, 1)
            retrieve_line_data(data, 'all', request)
            # A counter to keep track of where in the date array we are
        else:
            cntr = 1
            weeks = 2
            if 'weeks' in request.GET.keys():
                weeks = int(request.GET['weeks'])
            if 'category' in request.GET:
                num_fields = len(request.GET.getlist('category'))
                init_dates(data, num_fields, weeks)
                for field in request.GET.getlist('category'):
                    data[0].append(field)
                    retrieve_line_data(data, field, request, weeks, cntr)
                    cntr += 1
            else:
                num_fields = 1
                init_dates(data, num_fields, weeks)
                data[0].append('all')
                retrieve_line_data(data, 'all', request, weeks, cntr)
                cntr += 1
        pie = get_pie(request)
        recently_finished = SimpleDataSource(data)
        recently_finished_chart = LineChart(
            recently_finished,
            options={
                'title': 'Daily Tasks Completed',
                'width': 800,
                'legend': {
                    'position': 'bottom'
                },
                'vAxis': {
                    'viewWindow': {
                        'min': 0,
                        'max': 25
                    },
                    'ticks': [i for i in range(0, 26, 2)]
                }
            })
        completed = len(
            Task.objects.filter(user=request.user.id, completed=True))
        late = len(
            Task.objects.filter(user=request.user.id,
                                date_completed__gt=F('end_time'))
            | Task.objects.filter(user=request.user.id,
                                  end_time__lt=datetime.datetime.now(),
                                  date_completed__isnull=True))
        completed_late = len(
            Task.objects.filter(user=request.user.id,
                                completed=True,
                                date_completed__gt=F('end_time')))
        ratio_on_time = ((completed - completed_late) * 100) / max(
            late + completed - completed_late, 1)
        first_completed = Task.objects.all().aggregate(
            Min('date_completed'))['date_completed__min']
        if first_completed:
            beginning_of_time = (datetime.datetime.now().date() -
                                 first_completed).days + 1
            avg = round((completed / max(beginning_of_time, 1)), 3)
        else:
            avg = 0
        context = {
            'chart': recently_finished_chart,
            'completed': completed,
            'ratio_on_time': round(ratio_on_time, 3),
            'avg': avg,
            'valid': '',
            'show_bad_prompt': 'hidden',
            'pie': pie,
            'categories': Task.CATEGORIES
        }
        return context
    else:
        context = {'valid': 'hidden', 'show_bad_prompt': ''}
        return context
Exemple #11
0
def get_pie(request):
    if 'pie_category' not in request.GET or request.GET[
            'pie_category'] == 'all':
        pie_data = [['Task Type', "Completed"]]
        non_zero = False
        for cat in [
                'Homework', 'Chore', 'Work', 'Errand', 'Lifestyle', 'Others'
        ]:
            num_completed = len(
                Task.objects.filter(user=request.user.id,
                                    completed=True,
                                    category=cat))
            pie_data.append([cat, num_completed])
            non_zero = (num_completed > 0) or non_zero
        if non_zero:
            pie = PieChart(SimpleDataSource(pie_data),
                           options={
                               'title': 'Tasks Completed by Category',
                               'width': 1050
                           }).as_html()
        else:
            pie = "No completed tasks to display."
    else:
        pie_data = [["Task Status", "Count"]]
        num_completed = len(
            Task.objects.filter(user=request.user.id,
                                completed=True,
                                category=request.GET['pie_category']))
        num_uncompleted = len(
            Task.objects.filter(user=request.user.id,
                                completed=False,
                                category=request.GET['pie_category']))
        completed_late = len(
            Task.objects.filter(user=request.user.id,
                                completed=True,
                                date_completed__gt=F('end_time'),
                                category=request.GET['pie_category']))
        uncompleted_late = len(
            Task.objects.filter(user=request.user.id,
                                end_time__lt=datetime.datetime.now(),
                                date_completed__isnull=True,
                                category=request.GET['pie_category']))
        pie_data.append(['Completed: On-time', num_completed - completed_late])
        pie_data.append(['Completed: Late', completed_late])
        pie_data.append([
            'Not completed: Not Yet Late', num_uncompleted - uncompleted_late
        ])
        pie_data.append(['Not completed: Late', uncompleted_late])
        non_zero = (num_completed > 0) or (num_uncompleted > 0) or (
            completed_late > 0) or (uncompleted_late > 0)
        if non_zero:
            pie = PieChart(SimpleDataSource(pie_data),
                           options={
                               'title': request.GET['pie_category'] +
                               " On-Time Completion Rate",
                               'width': 1050
                           }).as_html()
        else:
            pie = "No completed tasks to display for the " + request.GET[
                'pie_category'].lower() + " category."
    return pie
Exemple #12
0
def profile(request):
    # Difficulty wise submissions pie chart
    query_set = Submission.objects.select_related().filter(
        sub_made_by=request.user).values('prob__difficulty').annotate(
            subcount=Count('prob__difficulty'))
    print query_set
    options = {
        'title':
        'Difficulty wise submissions',
        'subtitle':
        "Total submissions: " +
        str(Submission.objects.filter(sub_made_by=request.user).count()),
    }
    data = list()
    row = list()
    data.append(['Difficulty', 'submissions'])
    for query in query_set:
        row.append(get_difficulty_verbose(query['prob__difficulty']))
        row.append(query['subcount'])
        data.append(row)
        row = list()
    print data
    data_source = SimpleDataSource(data)
    chart = highcharts.ColumnChart(data_source, options=options)
    chart.html_id = "difficultychart"
    # Topic wise submissions pie chart
    query_set = Submission.objects.select_related().filter(
        sub_made_by=request.user).values('prob__topic__topic_name').annotate(
            count=Count('prob__topic__topic_name'))
    options = {
        'title':
        'Topic wise submissions',
        'subtitle':
        "Total submissions: " +
        str(Submission.objects.filter(sub_made_by=request.user).count()),
    }
    row = list()
    data = list()
    data.append(['Topic', 'Submissions'])
    for query in query_set:
        row.append(query['prob__topic__topic_name'])
        row.append(query['count'])
        data.append(row)
        row = list()
    data_source = SimpleDataSource(data)
    topic_chart = highcharts.PieChart(data_source, options=options)
    topic_chart.html_id = "otherchart"
    # Other chart
    query_set = Submission.objects.select_related().filter(
        sub_made_by=request.user).annotate(
            month=TruncMonth('attempted')).values('month').annotate(
                submissions=Count('id'))[:12]
    options = {
        'title':
        'Monthly  submissions',
        'subtitle':
        "Total submissions: " +
        str(Submission.objects.filter(sub_made_by=request.user).count()),
    }
    data = list()
    data.append(['Month', 'Submissions'])
    for query in query_set:
        count = query['submissions']
        month = str(query['month'].strftime('%B')) + ", " + str(
            query['month'].strftime('%Y'))
        row.append(month)
        row.append(count)
        data.append(row)
        row = list()
    print data
    data_source = SimpleDataSource(data)
    monthly_chart = highcharts.LineChart(data_source, options=options)
    monthly_chart.html_id = 'monthlychart'
    subs = Submission.objects.filter(
        sub_made_by=request.user).order_by('-attempted')[:10]
    context = {
        'topic_chart': topic_chart,
        'monthly_chart': monthly_chart,
        'chart': chart,
        'submissions': subs,
        'active_tab': 'profile',
    }
    return render(request, 'www/profile.html', context)