gpt4 book ai didi

python - 聚合时间序列数据

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

我以 CSV 格式向我提供了 AWS EC2 实例 CPU 利用率和其他指标数据,如下所示:

Date,Time,CPU_Utilization,Unit
2016-10-17,09:25:00,22.5,Percent
2016-10-17,09:30:00,6.534,Percent
2016-10-17,09:35:00,19.256,Percent
2016-10-17,09:40:00,43.032,Percent
2016-10-17,09:45:00,58.954,Percent
2016-10-17,09:50:00,56.628,Percent
2016-10-17,09:55:00,25.866,Percent
2016-10-17,10:00:00,17.742,Percent
2016-10-17,10:05:00,34.22,Percent
2016-10-17,10:10:00,26.07,Percent
2016-10-17,10:15:00,20.066,Percent
2016-10-17,10:20:00,15.466,Percent
2016-10-17,10:25:00,16.2,Percent
2016-10-17,10:30:00,14.27,Percent
2016-10-17,10:35:00,5.666,Percent
2016-10-17,10:40:00,4.534,Percent
2016-10-17,10:45:00,4.6,Percent
2016-10-17,10:50:00,4.266,Percent
2016-10-17,10:55:00,4.2,Percent
2016-10-17,11:00:00,4.334,Percent
2016-10-17,11:05:00,4.334,Percent
2016-10-17,11:10:00,4.532,Percent
2016-10-17,11:15:00,4.266,Percent
2016-10-17,11:20:00,4.266,Percent
2016-10-17,11:25:00,4.334,Percent

很明显,每 5 分钟报告一次。我无权访问 aws-cli。我需要处理这个问题并每 15 分钟报告一次平均利用率以进行可视化。也就是说,对于每个小时,我需要找到前 15 分钟、接下来的 15 分钟等值的平均值。因此,我将每小时报告 4 个值。

示例输出如下:

Date,Time,CPU_Utilization,Unit
2016-10-17,09:30:00,14.517,Percent
2016-10-17,09:45:00,40.414,Percent
2016-10-17,10:00:00,33.412,Percent
2016-10-17,10:15:00,26.785,Percent
...

一种方法是读取整个文件(有 10000 多行),然后对于每个日期,找到属于 15 分钟一个窗口的值,计算它们的平均值并对所有值重复。这似乎不是最好和最有效的方法。有更好的方法吗?谢谢。

最佳答案

由于您的输入数据实际上非常小,我建议使用 np.genfromtxt 立即读入它。然后,您可以通过检查何时达到整刻钟来找到适当的范围,并通过计算还剩多少整刻钟来结束。然后你可以使用np.reshape将数组转换为包含每刻钟行的形式,然后对这些行进行平均:

import numpy as np

# Read in the data:
data = np.genfromtxt("data.dat", skip_header=1,
dtype=[("date", "|S10"),
("time", "|S8"),
("cpu_usage", "f8")],
delimiter=',', usecols=(0, 1, 2))

# Find the first full quarter:
firstQuarterHour = 0
while not (int(data[firstQuarterHour]["time"][3:5]) % 15 == 0):
firstQuarterHour += 1
noOfQuarterHours = data[firstQuarterHour:].shape[0]/3

# Create a reshaped array
reshaped = data[firstQuarterHour:firstQuarterHour+3*noOfQuarterHours+1].reshape(
(noOfQuarterHours, 3))

# Average over cpu_usage and take the appropriate dates and times:
cpu_usage = reshaped["cpu_usage"].mean(axis=1)
dates = reshaped["date"][:, 0]
times = reshaped["time"][:, 0]

现在您可以使用这些数组,例如通过 np.savetxt 保存到另一个文本文件中.

关于python - 聚合时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40461365/

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