> al_1 = Alert.objects.filter(creation_date__regex=today).values
> ('dimension1').annotate(Sum('metric1')).order_by('dimension1')
>
> and
>
> al_2 = Alert.objects.filter(creation_date__regex=yesterday).values
> ('dimension1').annotate(Sum('metric1')).order_by('dimension1')
>
> They are almost the same except that al_1 is for today's data and al_2
> is for yesterday's data. They summarize data in column "metric1" that
> is grouped and ordered by "dimension1".
>
> Sample data from al_1:
>
> [{'metric1__sum': 0.0, 'dimension1': u'1'}, {'metric1__sum': 14.0,
[snip]
> What I need to do is to find a ratio value for each "dimension1"
> between its today's value and yesterday's value. For example, for
> dimension1 = '110085', I need to find 2758.0 / 2658.0 = 1.04.
> Then I compare this value "1.04" with a threshold and process
> further.
You can do something like
>>> map1 = dict((d['dimension1'], d['metric1__sum']) for d in al_1)
>>> map2 = dict((d['dimension1'], d['metric1__sum']) for d in al_2)
>>> ratios = [(dim, metric/map2[dim]) for dim, metric in
map1.iteritems() if map2.get(dim, 0) != 0]
>>> results = [(dim, ratio) for dim, ratio in ratios if ratio >=
threshold]
It may lose ordering if that is significant (dicts aren't ordered
by default), and skips over those where there are problems (items
don't exist in the opposite map, or the previous value was 0
making for a divide-by-zero problem).
Things might change a little depending on what you'd expect on
those edge cases (dim in a1 but not in a2; dim in a2 but not in
a1; a2.metric = 0)
-tim
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---