【人工智能概论】 数据集与数据标准化
一. 数据集获取与数据集简介
- Server Machine Dataset(SMD)
- 下载链接:https://github.com/NetManAIOps/OmniAnomaly/tree/master/ServerMachineDataset
- 数据集简介:
- 数据集收集的是28个机器连续5周的数据,相邻两组数据间间隔一分钟。
- 总共收集28个机器的数据,每个机器收集38个维度(变量)的信息。
- 训练集与测试集的数据量是1:1的,训练集无label,测试集有label。
- 时间信息是隐匿的
- 数据文件中内容说明:
- 文件名采用machine-x-y.txt的形式,其中x代表组,y是组里的index,每一个machine-x-y代表一个具体的机器。
- train:包含数据的前半部分,作为训练集,无标签。
- test: 包含数据的后半部分,作为测试集,有标签。
- test_label: 测试集标签,表明某一时间节点处是否处于异常状态。
- interpretation_label: 该数据集给出异常点的具体异常维度。
二. 数据集标准化处理
2.1 处理后的数据集文件结构
2.2 格式细节
- 时间采用datatime格式,如果时间信息是隐匿的,则赋予数字编号0-n。
- label列名统一用"label",0为正常,1为异常。
- 数据的记录形式从txt文件调整成csv文件。
三.处理代码
import os
import numpy as np
import pandas as pd
dataset_folder = './datasets/ServerMachineDataset'
output_folder = './processed_datasets_csv/SMD'
os.makedirs(output_folder, exist_ok=True)
def load_and_save(category,filename):
os.makedirs(os.path.join(output_folder,category),exist_ok=True)
temp = np.genfromtxt(os.path.join(dataset_folder,category,filename),dtype=np.float32,delimiter=',')
fea_len = len(temp[0,:])
header_list = []
for i in range(fea_len):
header_list.append("col_%d"%i)
data = pd.DataFrame(temp, columns=header_list).reset_index()
data.rename(columns={'index': 'timestamp'}, inplace=True)
if category == "test":
temp1 = np.genfromtxt(os.path.join(dataset_folder, "test_label", filename),
dtype=np.float32,
delimiter=',')
data1 = pd.DataFrame(temp1, columns=["label"]).reset_index()
data1.rename(columns={'index': 'timestamp'}, inplace=True)
data = pd.merge(data, data1, how="left", on='timestamp')
print(category,",",filename,",",data.shape)
data.to_csv(os.path.join(output_folder,category,filename.split('.')[0]+".csv"),index=False)
def load_data():
for category in ["train","test"]:
file_list = os.listdir(os.path.join(dataset_folder, category))
for filename in file_list:
if filename.endswith('.txt'):
load_and_save(category, filename)
if __name__ == "__main__":
load_data()