将基于UNIX时间戳的自定义数据进行分组

2024-09-27 21:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以UNIX epoch时间戳为键的数据条目dict,还有一些值(可以是Boolean、int、float、枚举字符串)。我正在尝试设置一个方法,该方法使用开始时间、结束时间和存储箱大小(x分钟、x小时或x天),在这些时间之间将dict中的值放入其中一个存储箱的数组中

从本质上讲,我尝试将在某个特定时间测量的真实世界中的数据转换为发生在某个时间步长上的数据,从time=0开始,一直到time=T,在调用方法时可以设置时间步长的长度

我试着按照以下思路做一些事情:

def binTimeSeries(dict, startTime, endTime, timeStep):
 bins = []
 #floor begin time to a timeStep increment
 #ciel end time to a timeStep increment
for key in dict.keys():
 if key > floorStartTime and key < cielEndTime:
  timeDiff = (key - floorStartTime)
  binIndex = floor(timeDiff/timeStep)
  bins[binIndex].append(dict[key])

我很难确定什么时间格式适合从UNIX epoch timestamp转换为,它可以处理给定变量floorcielmodulo间隔的timeStep操作,然后如何实际执行这些操作。我已经搜索了这个,但是我对datetimepandas的形式主义感到困惑,哪个更适合这个


Tags: to数据方法keytime时间unixdict
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:14

也许是这样的?与其问垃圾箱的大小(每个垃圾箱的间隔),不如问你想要多少个垃圾箱。这样你就可以保证每个箱子大小相同(覆盖相同的间隔)

在下面的示例中,我生成了一些伪数据,我称之为data。我随意选择的开始和结束时间戳,以及箱子的数量。我计算结束时间戳和开始时间戳之间的差异,我称之为duration,这会产生两个时间戳之间的总持续时间(我意识到重新计算这个值有点愚蠢,就像我之前在end_time_stamp定义中硬编码它一样,但它只是为了完整性而存在)。bin_interval(以秒为单位)可以通过将持续时间除以箱子的数量来计算

最后我做了所有的事情,只使用普通的旧UNIX/POSIX时间戳,没有任何转换。但是,我将提到datetime.datetime有一个名为fromtimestamp的方法,它接受POSIX时间戳并返回一个填充了年、月、秒等的datetime对象

此外,在我的例子中,我最后添加到垃圾箱的只有钥匙-只是为了演示-您必须修改它以满足您的需要

def main():

    import time

    values = ["A", "B", "C", "D", "E", "F", "G"]

    data = {time.time() + (offset * 32): value for offset, value in enumerate(values)}

    start_time_stamp = time.time() + 60
    end_time_stamp = start_time_stamp + 75

    number_of_bins = 12

    assert end_time_stamp > start_time_stamp
    duration = end_time_stamp - start_time_stamp

    bin_interval = duration / number_of_bins

    bins = [[] for _ in range(number_of_bins)]

    for key, value in data.items():
        if not (start_time_stamp <= key <= end_time_stamp):
            continue
        for bin_index, current_bin in enumerate(bins):
            if start_time_stamp + (bin_index * bin_interval) <= key < start_time_stamp + ((bin_index + 1) * bin_interval):
                current_bin.append(key)
                break

    print("Original data:")
    for key, value in data.items():
        print(key, value)

    print(f"\nStart time stamp: {start_time_stamp}")
    print(f"End time stamp: {end_time_stamp}\n")

    print(f"Bin interval: {bin_interval}")
    print("Bins:")
    for current_bin in bins:
        print(current_bin)

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

Original data:
1573170895.1871762 A
1573170927.1871762 B
1573170959.1871762 C
1573170991.1871762 D
1573171023.1871762 E
1573171055.1871762 F
1573171087.1871762 G

Start time stamp: 1573170955.1871762
End time stamp: 1573171030.1871762

Bin interval: 6.25
Bins:
[1573170959.1871762]
[]
[]
[]
[]
[1573170991.1871762]
[]
[]
[]
[]
[1573171023.1871762]
[]

相关问题 更多 >

    热门问题