Exemplo n.º 1
0
def add(t0, t1, res):
    dt0 = oldy.str_to_datetime(t0.dt)
    dt1 = oldy.str_to_datetime(t1.dt)
    # print(dt0, dt1, dt1 - dt0, dt1 - dt0 >= GAP)

    if t1.num == t0.num:  # количество включений не изменилось
        # присваиваем часам с dt0.replace по dt1.replace
        # print("Заполнено предыдущим", t1, t0)
        # прикол - мы в любом случае знаем значение для предыдущего часа

        i = dt0.replace(**ROUND_H)
        while i <= dt1.replace(**ROUND_H):
            res[i] = res[dt0.replace(**ROUND_H)]
            i += ONE_HOUR

    else:
        # вариант номер раз: заполним пустышками
        if dt1 - dt0.replace(**ROUND_H) >= GAP:
            i = (dt0 + ONE_HOUR).replace(**ROUND_H)
            while i <= dt1.replace(**ROUND_H):
                print("Заполнено None", i)
                res[i] = None
                i += ONE_HOUR

        # вариант 2: аппроксимируем
        else:
            # F(th) = F1 - (t1 - th) * k, где k = (F(t1) - F(t0)) / (t1 - t0)
            interval = minutes_timdelta(dt1, dt0)
            k = (t1.num - t0.num) / interval
            # print("k = ", k)
            # print("interval = ", interval)
            th = dt1.replace(**ROUND_H)
            # print(th, dt1, "th - t1 = ", minutes_timdelta(dt1, th))
            res[th] = t1.num - k * minutes_timdelta(dt1, th)
Exemplo n.º 2
0
def stats_from_list(lst: list):
    abs_stats = defaultdict(deque)
    rel_stats = {}
    for lift_id, dt, num in lst:
        num = int(num)
        #YYYY-mm-dd HH:MM:SS
        dt = dt[:16]
        dt = oldy.str_to_datetime(dt)

        add_abs_dirty(abs_stats[lift_id], dt, num)
        #add_rel(rel_stats[lift_id]), dt, num)

    return abs_stats
Exemplo n.º 3
0
def events_from_list(lst: list):
    events = {}

    current = {}

    for _, dt, flag, num in lst:
        num = int(num)
        flag = int(flag)
        dt = (oldy.str_to_datetime(dt)).replace(second=0, minute=0)

        if oldy.is_defect_start(num, flag):
            current[num] = True
        elif oldy.is_defect_stop(num, flag):
            current[num] = False

        #print(dt, lift)
        events[dt] = current.copy()

    return events
Exemplo n.º 4
0
def read_stats(lift_input):

    raw_stats = oldy.csvfile_to_list(lift_input + '.csv',
                                     'win')  # читаем файл в список
    stats = iter(raw_stats)

    next = stats.__next__()
    t0 = record(next[1], int(next[2]))
    t0_hour = t0.dt[11:13]

    # Допущение - независимо от минуты в самом первом измерении, это значение записывается в res[час]
    res = {oldy.str_to_datetime(t0.dt).replace(**ROUND_H): t0.num}

    while True:
        try:
            next = stats.__next__()
            t1 = record(next[1], int(next[2]))
            t1_hour = t1.dt[11:13]
            while t1_hour == t0_hour:
                next = stats.__next__()
                t1 = record(next[1], int(next[2]))
                t1_hour = t1.dt[11:13]

            # print(t0.dt, t0.num, t1.dt, t1.num, '\n')
            add(t0, t1, res)

            t0 = t1
            t0_hour = t1_hour

        except StopIteration:
            break

    # print("res start")
    # for dt in sorted(res):
    #     print(dt, res[dt], sep=';')
    # print(("res end"))

    return res
Exemplo n.º 5
0
def liftstats_from_list(lst: list,
                        first_date: datetime,
                        last_date: datetime,
                        use_last=True) -> dict:
    lifts = {}
    for lift_id, dt, num in lst:
        if lift_id not in lifts:
            lifts[lift_id] = Timeseries(first_date, last_date,
                                        timedelta(hours=1), 'XXX')
        num = int(num)
        dt = dt[:13]
        dt = oldy.str_to_datetime(dt)  # это ускоряет обработку в 3 раза

        # в часе может быть несколько записей
        # add_abs
        # add_rel

        if use_last:  # мы или перезапишем последней
            lifts[lift_id][dt] = num
        else:
            if lifts[lift_id][dt] == 'XXX':  # значение по-умолчанию
                lifts[lift_id][dt] = num

    return lifts