Esempio n. 1
0
    def std(self, sample=False):
        """
        Standard deviation of value.

        If sample=True, return the sample standard deviation.
        """
        return models.StdDev(self._name, sample=sample)
Esempio n. 2
0
 def test_functions(self):
     aggregations = [
         Aggregation("population", "population_max", models.Max),
         Aggregation("population", "population_min", models.Min),
         Aggregation("population", "population_avg", models.Avg),
         Aggregation("population", "population_sum", models.Sum),
         Aggregation("population", "population_cnt", models.Count),
     ]
     expected = Country.objects.all().aggregate(
         population_max=models.Max("population"), population_min=models.Min("population"),
         population_avg=models.Avg("population"), population_sum=models.Sum("population"),
         population_cnt=models.Count("population"),
     )
     
     if version.parse(".".join(map(str, django.VERSION))) >= version.parse("2.2.0"):
         aggregations.append(Aggregation("population", "population_stddev", models.StdDev))
         aggregations.append(Aggregation("population", "population_var", models.Variance), )
         expected = expected.aggregate(
             population_stddev=models.StdDev("population"),
             population_var=models.Variance("population")
         )
     
     aggregations = [a.get() for a in aggregations]
     kwargs = dict(aggregations)
     query = Country.objects.all().aggregate(**kwargs)
     self.assertEqual(expected, query)
Esempio n. 3
0
    def generate(self):
        super().generate()

        assessment_set = self.snapshot_assessment_set()
        self.candidate_ratings = {
            result['student_id']: result['rating']
            for result in assessment_set.values('student_id', 'rating')
        }

        self.rating_average = assessment_set.aggregate(
            rating_average=models.Avg('rating'))['rating_average'] or 0
        self.rating_std_dev = assessment_set.aggregate(
            rating_std_dev=models.StdDev('rating'))['rating_std_dev'] or 0

        return self
Esempio n. 4
0
 def stats(self, request, *args, **kwargs):
     """
     stats on rates
     """
     period = request.GET.get('period', 'month')
     if period not in ['week', 'month', 'year']:
         return Response("Invalid period",
                         status=status.HTTP_400_BAD_REQUEST)
     rate_filter = RateFilter(request.GET,
                              queryset=self.queryset,
                              request=request)
     qs = rate_filter.qs.values('currency', 'base_currency')
     if period == 'month':
         qs = qs.annotate(month=Extract('value_date', 'month'))
     if period == 'week':
         qs = qs.annotate(week=Extract('value_date', 'week'))
     qs = qs.annotate(year=Extract('value_date', 'year'),
                      avg=models.Avg('value'),
                      max=models.Max('value'),
                      min=models.Min('value'),
                      std_dev=models.StdDev('value')).order_by(
                          '-year', '-' + period)
     results = [{
         'currency':
         result['currency'],
         'base_currency':
         result['base_currency'],
         'period':
         f"{result['year']}-{str(result[period]).zfill(2)}"
         if period != 'year' else result['year'],
         'avg':
         result['avg'],
         'max':
         result['max'],
         'min':
         result['min'],
         'std_dev':
         result['std_dev'],
     } for result in qs]
     data = {
         'key': request.GET.get('key'),
         'period': period,
         'from_date': request.GET.get('from_date', ''),
         'to_date': request.GET.get('to_date', ''),
         'results': results
     }
     serializer = RateStatSerializer(data)
     return Response(serializer.data, content_type="application/json")
Esempio n. 5
0
 def stddev(self):
     return self.row_set.all().aggregate(
         stddev=models.StdDev('value'))['stddev']