gpt4 book ai didi

python - 将多个时间序列数据组合到一个 2d numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:14 25 4
gpt4 key购买 nike

我有一年中来自三个不同传感器的 timeseries 数据,传感器大约每 3 分钟生成一个数据点,传感器不同步,因此它们在不同时间生成数据点输出相对于彼此。

此数据位于一个大约有 50 万条记录的表中的 sqlite 数据库中。我打算使用 javascript 图表库 dygraph 显示此数据,我已经通过按传感器名称执行 sql 查询并保存到 csv 来为每个传感器单独生成 timeseries 图表。我希望有一个图表显示所有数据点,用一条线代表每个传感器。

我创建了一个名为“minutes_array”的字符串类型的 numpy 二维数组,第一列是 unix 时间戳,四舍五入到最接近的分钟,涵盖从传感器时间序列开始到结束的每一分钟,并填充三个空列来自 3 个传感器中每一个的可用数据。

分钟数组

[['1316275620' '' '' '']
['1316275680' '' '' '']
['1316275740' '' '' '']
...,
['1343206920' '' '' '']
['1343206980' '' '' '']
['1343207040' '' '' '']]

然后传感器时间序列数据也四舍五入到最近的分钟,我使用 numpy.in1d 并从上面的“minutes_array”和“sensor_data”数组中获取时间戳,并为与该传感器相关的记录创建一个掩码。

传感器数据

[['1316275680' '215.2']
['1316275860' '227.0']
['1316276280' '212.2']
...,
['1343206380' '187.7']
['1343206620' '189.4']
['1343206980' '192.9']]

mask = np.in1d(minutes_array[:,0], sensor_data[:,0])

[False True False ..., False True False]

然后我希望修改 minutes_array 中的记录,这些记录对于该掩码是正确的,并将 sensor_data 值放入 minutes_array 中时间戳之后的第一列。从我的尝试来看,似乎不可能在应用掩码时改变原始的“minutes_array”,有没有办法在 numpy 中实现这个结果而不使用 for 循环和单独匹配时间戳?

已解决

根据@eumiro 的以下回答,我使用了 solution from the Pandas Docs和上面描述的 'sensor_data' numpy 数组

sensors = ['s1','s2','s3']    
sensor_results = {}
for sensor in sensors:
sensor_data = get_array(db_cursor, sensor)
sensor_results[sensor] = pd.Series(sensor_data[:,1], \
index=sensor_data[:,0])
df = pd.DataFrame(buoy_results)
df.to_csv("output.csv")

最佳答案

50 万不是您无法使用 Python 字典管理的数字。

从数据库中读取所有传感器的数据,填充一个字典,然后构建一个 numpy 数组,或者更好的是,将其转换为 pandas.DataFrame :

import pandas as pd

inp1 = [(1316275620, 1), (1316275680, 2)]
inp2 = [(1316275620, 10), (1316275740, 20)]
inp3 = [(1316275680, 100), (1316275740, 200)]

inps = [('s1', inp1), ('s2', inp2), ('s3', inp3)]

data = {}
for name, inp in inps:
d = data.setdefault(name, {})
for timestamp, value in inp:
d[timestamp] = value
df = pd.DataFrame.from_dict(data)

df 现在是:

            s1  s2   s3
1316275620 1 10 NaN
1316275680 2 NaN 100
1316275740 NaN 20 200

关于python - 将多个时间序列数据组合到一个 2d numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com