示例#1
0
    def moving_median_abs_dev(self, year=None, month=None, day=None, weeks=4):
        """
        The moving median absolute deviation of cycle time for every day in the last N weeks.
        See http://en.wikipedia.org/wiki/Median_absolute_deviation
        """

        end_date = make_end_date(year, month, day)
        start_date = end_date - relativedelta(weeks=weeks)
        start_date = make_start_date(date=start_date)

        qs = self.done().filter(
            done_date__lte=end_date,
            done_date__gte=start_date,
        ).scalar('_cycle_time')

        cycle_times = [t for t in qs if t is not None]
        median_cycle_time = median(cycle_times)

        if median_cycle_time is not None:
            absolute_deviations = [math.fabs(median_cycle_time - c) for c in cycle_times]
            mad = median(absolute_deviations)
        else:
            mad = None

        if mad is None:
            mad = 0

        return int(round(mad))
示例#2
0
    def moving_median_abs_dev(self, year=None, month=None, day=None, weeks=4):
        """
        The moving median absolute deviation of cycle time for every day in the last N weeks.
        See http://en.wikipedia.org/wiki/Median_absolute_deviation
        """

        end_date = make_end_date(year, month, day)
        start_date = end_date - relativedelta(weeks=weeks)
        start_date = make_start_date(date=start_date)

        qs = self.done().filter(
            done_date__lte=end_date,
            done_date__gte=start_date,
        ).scalar('_cycle_time')

        cycle_times = [t for t in qs if t is not None]
        median_cycle_time = median(cycle_times)

        if median_cycle_time is not None:
            absolute_deviations = [
                math.fabs(median_cycle_time - c) for c in cycle_times
            ]
            mad = median(absolute_deviations)
        else:
            mad = None

        if mad is None:
            mad = 0

        return int(round(mad))
示例#3
0
def state_transition_counts(state, months, count_type="exit", raw=False):
    end = make_end_date(date=datetime.datetime.now())

    start = end - relativedelta(months=months)
    start = make_start_date(date=start)

    counts = []
    data = []

    current_date = start
    while current_date <= end:
        if current_date.weekday() == 5:  # Saturday
            current_date += relativedelta(days=2)
        elif current_date.weekday() == 6:  # Sunday
            current_date += relativedelta(days=1)

        range_start = make_start_date(date=current_date)
        range_end = make_end_date(date=current_date)

        if count_type == "exit":
            kwargs = dict(
                exited__gte=range_start,
                exited__lte=range_end,
            )
        elif count_type == "enter":
            kwargs = dict(
                entered__gte=range_start,
                entered__lte=range_end,
            )

        count = StateLog.objects.filter(
            state=state,
            **kwargs
        ).count()

        data.append((current_date, count))
        counts.append(count)
        current_date = current_date + relativedelta(days=1)

    counts.sort()

    print "%s\t%s" % (start, end)
    print "Median\t%s" % median(counts)
    print "Average\t%s" % average(counts)
    print "Min\t%s" % counts[0]
    print "Max\t%s" % counts[-1]

    hist = histogram(counts)
    keys = hist.keys()
    keys.sort()
    for k in keys:
        print "%s\t%s" % (k, hist[k])

    if raw is True:
        for date, count in data:
            print "%s\t%s" % (date, count)
def state_transition_counts(state, months, count_type="exit", raw=False):
    end = make_end_date(date=datetime.datetime.now())

    start = end - relativedelta(months=months)
    start = make_start_date(date=start)

    counts = []
    data = []

    current_date = start
    while current_date <= end:
        if current_date.weekday() == 5:  # Saturday
            current_date += relativedelta(days=2)
        elif current_date.weekday() == 6:  # Sunday
            current_date += relativedelta(days=1)

        range_start = make_start_date(date=current_date)
        range_end = make_end_date(date=current_date)

        if count_type == "exit":
            kwargs = dict(
                exited__gte=range_start,
                exited__lte=range_end,
            )
        elif count_type == "enter":
            kwargs = dict(
                entered__gte=range_start,
                entered__lte=range_end,
            )

        count = StateLog.objects.filter(state=state, **kwargs).count()

        data.append((current_date, count))
        counts.append(count)
        current_date = current_date + relativedelta(days=1)

    counts.sort()

    print "%s\t%s" % (start, end)
    print "Median\t%s" % median(counts)
    print "Average\t%s" % average(counts)
    print "Min\t%s" % counts[0]
    print "Max\t%s" % counts[-1]

    hist = histogram(counts)
    keys = hist.keys()
    keys.sort()
    for k in keys:
        print "%s\t%s" % (k, hist[k])

    if raw is True:
        for date, count in data:
            print "%s\t%s" % (date, count)
示例#5
0
 def median(self, weeks=4):
     med = median(self.cycle_times(weeks))
     if med is not None:
         med = int(round(med))
     return med
示例#6
0
 def median(self, weeks=4):
     med = median(self.cycle_times(weeks))
     if med is not None:
         med = int(round(med))
     return med