def std(self, sample=False): """ Standard deviation of value. If sample=True, return the sample standard deviation. """ return models.StdDev(self._name, sample=sample)
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)
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
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")
def stddev(self): return self.row_set.all().aggregate( stddev=models.StdDev('value'))['stddev']