Преобразование данных CSV сетевого потока в массив Numpy - PullRequest
0 голосов
/ 21 марта 2019

С этим довольно трудно, поэтому просим совета.

У меня есть несколько больших CSV-документов (80 столбцов, 100 тыс. Строк), содержащих потоки трафика.Столбцы представляют различные функции потоков трафика и столбец меток для типа трафика (Benign, DDoS, Bot и т. Д.).

Моя конечная цель - разбить эти CSV-файлы на небольшие массивные массивы, а затемиметь дополнительный столбец для типа метки с 0 или 1 в строках.(0 = нормальный трафик, 1 = любой тип вредоносного трафика).Цифровые массивы могут быть представлены в виде изображений, и я могу использовать эти данные для передачи в виртуальную сеть.

До сих пор я пытался разбить его на более мелкие этапы, и мой подход заключался в извлечении данных с использованием панд вВ кадре данных выберите столбцы данных, которые я буду использовать, и прочитайте данные как фрагменты.У меня есть две основные проблемы - это перемаркировка столбца Label в 0 или 1.Я получаю следующую ошибку: AttributeError: у объекта «TextFileReader» нет атрибута «Метка», когда я пытаюсь сделать это с np. Где я читаю чанками, он работает, если я не читаю его чанками, но потом у меня возникают проблемы с памятьюпри преобразовании кадра данных в массив np.Еще одна проблема, с которой я сталкиваюсь, заключается в том, как преобразовать эти блоки данных в свои собственные файлы.Поскольку я сейчас получаю пустые npy файлы (320 байт на файл ..)

Буду признателен за любые идеи, ура

import glob
import os
import numpy as np
import pandas as pd


mycsvdir = '/home/my/path/CSV_Data/'

csvfiles = glob.glob(os.path.join(mycsvdir, '*.csv'))

my_list = []

for csvfile in csvfiles:


    df = pd.read_csv(csvfile, sep = ',', usecols = ['Dst Port', 'Protocol', 'Flow Duration', 'Tot Fwd Pkts', 'Tot Bwd Pkts', 'Flow IAT Mean', 
 'Flow IAT Std', 'Flow IAT Max', 'Flow IAT Min', 'Fwd IAT Tot', 'Fwd IAT Mean', 'Fwd IAT Std', 'Fwd IAT Max', 'Fwd IAT Min', 
 'Bwd IAT Tot', 'Bwd IAT Mean', 'Bwd IAT Std', 'Bwd IAT Max', 'Bwd IAT Min', 'Label'],  dtype=None, low_memory=False, chunksize = 1000)

    for chunk in df:
        x=my_list.append(chunk)
        x['Label'] = np.where( df.Label == 'Benign', 0, 1) 

    np.save(csvfile, np.array(x))
...