我是 Python 和 ML 的新手,我正在尝试使用 csv 文件并创建一个模型来预测主机响应的持续时间。我所做的第一件事是使用 Pandas 解析 csv 文件中的日志,现在我有 csv 文件,其中的列按以下顺序排列并附有示例: _time host duration202 2020-09-26T10:56:33.630+0200 malcon 850203 2020-09-26T10:56:33.630+0200 malcon2 878703 2020-09-25T21:26:04.651+0200 malcon 973我想做的第一件事是使用一些模型进行异常检测,但也许有一种更简单的方法来完成我想要的事情。我希望按时间戳获取每 3 分钟间隔高于 800 的持续时间值,并根据我一周内的数据预测这些值。我从代码开始,该代码会发现持续时间值高于或等于 800,但不知道如何将它们与时间关联并定义间隔。到目前为止我的代码是:import pandas as pddata = pd.read_csv("example_all.csv")df = pd.DataFrame(data,columns=['_time','host','duration'])high = (df.loc[df['duration'] >= 800])print(high) 任何提示和建议将不胜感激!谢谢!更新:我正在尝试使用滚动功能,但我认为我没有正确理解它,并且我有点迷失其中。正如此处所建议的,我使用 to_datetime 函数转换时间戳并按时间对数据进行排序。不幸的是,我找不到一种方法来指定持续时间高于 800 的 3 分钟时间间隔。我的代码现在看起来像这样:import pandas as pddata = pd.read_csv("example_all.csv")data["_time"] = pd.to_datetime(data["_time"], utc='true')df = pd.DataFrame(data,columns=['_time','host','duration'])df.sort_values('_time')high = (df.loc[df['duration'] >= 800])print(high)输出: _time host duration202 2020-09-26 08:56:33.630000+00:00 malcon 850203 2020-09-26 08:56:33.630000+00:00 malcon2 850702 2020-09-25 19:26:05.573000+00:00 malcon 878703 2020-09-25 19:26:04.651000+00:00 malcon 973704 2020-09-25 19:26:03.667000+00:00 malcon 993...
1 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
如果您要查找任何 >= 800 的值,并且在前 3 分钟内未记录任何 < 800 的值,则此方法将起作用:
import pandas as pd
from pandas.tseries.offsets import Minute
data = pd.read_csv("example_all.csv", parse_dates=[0])
data = data.sort_values('_time')
def all_over_800(values):
return values.map(lambda x: x >= 800).all()
data['over_threshold'] = data[['_time', 'duration']].rolling(
Minute(3), on='_time').apply(lambda win: all_over_800(win))['duration']
请注意,center窗口选项未针对日期时间偏移窗口实现,因此检查前 3 分钟(或根据顺序后的 3 分钟)是此方法的唯一选项。如果您不介意对数据帧进行两次排序,则可以结合前面和后面的结果来检查样本的两侧。
添加回答
举报
0/150
提交
取消