def get_index(start_date, group_window, time): index = 0 if 1 == group_window: delta = time - start_date index = delta.days if 2 == group_window: start_date = week_start(start_date) time = week_start(time) delta = time - start_date index = delta.days / 7 elif 3 == group_window: start_date = month_start(start_date) time = month_start(time) index = (time.year - start_date.year) * 12 + (time.month - start_date.month) return index, time
def window_range(anchor_date, group_window): if 1 == group_window: start_time = day_start(anchor_date) elif 2 == group_window: start_time = week_start(anchor_date) end_time = start_time + timedelta(days=7) elif 3 == group_window: start_time = month_start(anchor_date) end_time = start_time + MonthDelta(months=1) return start_time, end_time
def setUp(self): self.day1 = week_start(timezone.now() - timedelta(days=60)) self.day2 = self.day1 + timedelta(days=1) self.day_next_week_1 = self.day1 + timedelta(days=7) self.day_next_week_2 = self.day2 + timedelta(days=7) self.day_next_month_1 = self.day1 + relativedelta(months=1) self.day_next_month_2 = self.day2 + relativedelta(months=1) UserSurvival.objects.create(imei='imei1', firsttime=self.day1, lasttime=self.day1) UserSurvival.objects.create(imei='imei2', firsttime=self.day1, lasttime=self.day2) UserSurvival.objects.create(imei='imei3', firsttime=self.day2, lasttime=self.day_next_month_2) UserSurvival.objects.create(imei='imei4', firsttime=self.day2, lasttime=self.day_next_week_2)
def test_get_survival_rate(self): result = get_survival_rate(self.day1, 2, 2) self.assertEqual(2, result['unit']) self.assertEqual(2, result['user_window']) self.assertEqual(week_start(self.day1), result['start_date']) self.assertEqual(4, result['total']) values = result['values'] self.assertEqual(4, values[0]['y']) self.assertEqual(2, values[1]['y']) self.assertEqual(1, values[2]['y']) self.assertEqual(1, values[3]['y']) self.assertEqual(1, values[4]['y']) for x in range(5, 10): self.assertEqual(0, values[x]['y'])