【人工智能概论】 数据集与数据标准化

文章介绍了ServerMachineDataset(SMD)数据集的获取与处理,包括数据的来源、结构以及标准化过程。数据集包含28台机器的38维信息,训练集与测试集比例1:1,无标签训练,有标签测试。处理涉及将txt转为csv,统一时间格式,合并测试集的标签。提供的代码实现了数据转换与整合功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【人工智能概论】 数据集与数据标准化


一. 数据集获取与数据集简介

  • Server Machine Dataset(SMD)
  1. 下载链接:https://github.com/NetManAIOps/OmniAnomaly/tree/master/ServerMachineDataset
  2. 数据集简介:
  • 数据集收集的是28个机器连续5周的数据,相邻两组数据间间隔一分钟。
  • 总共收集28个机器的数据,每个机器收集38个维度(变量)的信息。
  • 训练集与测试集的数据量是1:1的,训练集无label,测试集有label。
  • 时间信息是隐匿的
  1. 数据文件中内容说明:
  • 文件名采用machine-x-y.txt的形式,其中x代表组,y是组里的index,每一个machine-x-y代表一个具体的机器。
  • train:包含数据的前半部分,作为训练集,无标签。
  • test: 包含数据的后半部分,作为测试集,有标签。
  • test_label: 测试集标签,表明某一时间节点处是否处于异常状态。
  • interpretation_label: 该数据集给出异常点的具体异常维度。

二. 数据集标准化处理

2.1 处理后的数据集文件结构

  • SMD —|
  •       |-- train
    
  •       |-- test (注:label与数据合并到一个文件中了)
    

2.2 格式细节

  • 时间采用datatime格式,如果时间信息是隐匿的,则赋予数字编号0-n。
  • label列名统一用"label",0为正常,1为异常。
  • 数据的记录形式从txt文件调整成csv文件。

三.处理代码

# 将SMD数据集的保存形式从txt转变成csv,且将测试集的label与测试集关联起来。

import os
import numpy as np
import pandas as pd

# 指定SMD原始数据集的位置
dataset_folder = './datasets/ServerMachineDataset'

# 处理后的数据集保存路径
output_folder = './processed_datasets_csv/SMD'
os.makedirs(output_folder, exist_ok=True)

def load_and_save(category,filename):
    # category用于区分式训练集还是测试集。
    # 函数的功能是将txt文件转换成csv文件,并保存到合适位置。

    # 生成保存数据的文件夹,如果已经存在则此指令忽略,不进行报错。
    os.makedirs(os.path.join(output_folder,category),exist_ok=True)

    # 读取文件,并用" , "进行分隔,以便于后续保存成csv文件
    temp = np.genfromtxt(os.path.join(dataset_folder,category,filename),dtype=np.float32,delimiter=',')

    # 获取特征数量,此处应该是38。
    fea_len = len(temp[0,:])

    # 弄一个空列表以便于,后续修改数据的列名。
    header_list = []

    for i in range(fea_len):
        # 为每一列的标题准备名称 col_i,i是变量。
        header_list.append("col_%d"%i)

    # 把temp转化成DataFrame格式,并且指定列标签。
    data = pd.DataFrame(temp, columns=header_list).reset_index()

    # 在原数据上(inplace=True)把列标签index重命名成timestamp,便于理解
    data.rename(columns={'index': 'timestamp'}, inplace=True)

    # 如果是test还要把数据和label合并到一个文件下。
    if category == "test":

        # 读取标签信息
        temp1 = np.genfromtxt(os.path.join(dataset_folder, "test_label", filename),
                         dtype=np.float32,
                         delimiter=',')

        # 将temp1转化成DataFrame格式,并给它这一列命名成“label”。
        data1 = pd.DataFrame(temp1, columns=["label"]).reset_index()

        # 同样的,在原数据上(inplace=True)把列标签index重命名成timestamp
        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) # 输出成csv文件




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'):# 由前置内容不难知所有的数据都是采用.txt文件的形式保存,因此要找到以.txt形式结尾的文件
                load_and_save(category, filename)  # 将数据集的txt文件保存成csv文件


if __name__ == "__main__":
    load_data()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值