如何使用多个 CSV 文件进行机器学习异常检测

Posted

技术标签:

【中文标题】如何使用多个 CSV 文件进行机器学习异常检测【英文标题】:How to use multiple CSV files for machine learning anomaly detection 【发布时间】:2021-12-10 12:03:50 【问题描述】:

我有一个关于如何将我的数据转换为可用于我的 ML 模型的形状的问题。我有多个 CSV 文件,我想将它们放入异常检测算法中。我的数据由许多文件组成,每个文件都是来自传感器的记录数据,具有两个特征(强度和深度)和每个数据点的一个时间戳。每个文件都标有 0 = 错误数据和 1 = 良好数据。

假设我有 20 个文件:y 应该是每个文件的标签 y = [[1], [0], ...]X 应该是来自传感器 X = [[data_file0], [data_file1], ..., [data_file19]] 的所有数据,我可以用来训练我的模型。我该怎么做才能以正确的格式获取我的数据?我尝试将每个文件的数据框附加到列表中,并将其转换为数据集和np.array 等等。我也尝试了不同的形状。

    all_files = glob.glob(path + "/*.txt")
    
    df_list = []  
    snr_list = []
    for filename in all_files:
        #Für jede Datei wird ein df angelegt und unwichtige features entfernt
        #try with dataset with filename and all_files
        dataset = tf.data.Dataset.from_tensor_slices(all_files)
        
        def parse_fn(filename):
            return tf.data.Dataset.range(10)
        
        dataset = dataset.interleave(lambda x:
             tf.data.TextLineDataset(x).map(parse_fn, num_parallel_calls=1),
             cycle_length=4, block_length=16)

        #try df_list    
        df = pd.read_csv(filename, index_col=0, header=0, decimal = '.', delimiter = ';')
        df.drop(columns=['ET_original', 'Auslenkung_ET', 'ET_unkorrigiert'], axis = 1, inplace = True)
        
        #Zu jedem Zeitpunkt wird der Startzeitpunkt abgezogen: t0 = 1 ... tn = t_n - t0

        starttime = df.Zeit_ET[0]
        for row in df.itertuples():
            df.at[row.Index, 'Zeit_ET'] = df.Zeit_ET[row.Index] - starttime
        df.Zeit_ET[0] = 1
        
    
        #alle arrays einer List hinzufügen
        df_list.append(df.to_numpy().reshape(-1, 1700, 3))
        

        #other testings
        #test = tf.constant(pd.DataFrame(dic, columns=['1', '1', ' 1']))
        #ps=pd.DataFrame(dic, index=['dsf'])
           
    #df_list, test_df (1 df), und tf_const (1 df) zurückgeben         
    return df_list, df.to_numpy().reshape(-1, 1700, 3), tf.constant(df.to_numpy().reshape(1, 1700, 3), dtype = tf.float32)

#nur für Testzwecke
df_list, test_df, tf_const = Alle_OCT_txt_Daten()

【问题讨论】:

在我可以帮助您回答之前,我需要澄清一些事情。每个传感器是否在相同的准确时间以我们可以将它们全部排列在一个时间列中的方式获取读数? 不,每一对(每一行)数据点都有自己的timetemp。 而且每个文件都有多个带时间戳的数据点? 正如我上面写的,我有多个数据,这是我的一个文件注释的前 6 个数据点:Zeit_ET = t0 = 1 预处理到 ns 的时间戳(参见代码)columns = ['timestamp', 'Intensity', 'depth'], array([[ 1. , 79. , -0.5273184 ], [ 14. , 94. , -0.56211778], [ 29. , 102. , -0.59692583], [ 43. , 109. , -0.57392274], [ 57. , 111. , -0.55091889]])从 1700 开始有 6 行 【参考方案1】:

听起来文件是相同的,但每个文件都有不同的时间戳,对吧。 Juts 将所有内容加载到数据帧中,并在数据帧上运行您的 AI 或 ML 算法。

# import necessary libraries
import pandas as pd
import os
import glob
  
  
# use glob to get all the csv files 
# in the folder
path = 'C:\\your_path_here\\'
csv_files = glob.glob(os.path.join(path, "*.csv"))
  
  
li = []

for filename in csv_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)
print(frame)

【讨论】:

嘿,抱歉回复晚了。不,那没有用 对我来说效果很好。确切的问题是什么?

以上是关于如何使用多个 CSV 文件进行机器学习异常检测的主要内容,如果未能解决你的问题,请参考以下文章

关于如何使用机器学习来做异常检测的7个问题

Kibana:可视化机器学习中的异常

一文读懂!异常检测全攻略!从统计方法到机器学习 ⛵

Elastic:使用 Elastic Stack 进行异常值检测 - airbnb 数据分析

基于机器学习的web异常检测

斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection