|
|
@ -16,6 +16,7 @@ def input_csv_to_df(file_path: str) -> pd.DataFrame:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def averaging_df(df: pd.DataFrame):
|
|
|
|
def averaging_df(df: pd.DataFrame):
|
|
|
|
|
|
|
|
logger.info(f"Total: {len(df)} averaging...")
|
|
|
|
numeric_features = df.dtypes[df.dtypes != 'object'].index
|
|
|
|
numeric_features = df.dtypes[df.dtypes != 'object'].index
|
|
|
|
scaler = QuantileTransformer()
|
|
|
|
scaler = QuantileTransformer()
|
|
|
|
df[numeric_features] = scaler.fit_transform(df[numeric_features])
|
|
|
|
df[numeric_features] = scaler.fit_transform(df[numeric_features])
|
|
|
@ -27,21 +28,37 @@ def averaging_df(df: pd.DataFrame):
|
|
|
|
def clean_data(df: pd.DataFrame) -> pd.DataFrame:
|
|
|
|
def clean_data(df: pd.DataFrame) -> pd.DataFrame:
|
|
|
|
df = df.replace([np.inf, -np.inf], np.nan)
|
|
|
|
df = df.replace([np.inf, -np.inf], np.nan)
|
|
|
|
df = df.dropna(axis=0) # 删除具有NaN值的行
|
|
|
|
df = df.dropna(axis=0) # 删除具有NaN值的行
|
|
|
|
df = get_ddos_df(df)
|
|
|
|
# df = get_ddos_df(df)
|
|
|
|
df = drop_columns(df, UNIQUE_COLUMNS)
|
|
|
|
df = drop_columns(df, UNIQUE_COLUMNS)
|
|
|
|
# df = drop_unique_columns(df)
|
|
|
|
# df = drop_unique_columns(df)
|
|
|
|
df = df.iloc[:, 7:]
|
|
|
|
df = df.iloc[:, 7:]
|
|
|
|
return df
|
|
|
|
return df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def slice_df(df: pd.DataFrame):
|
|
|
|
|
|
|
|
logger.info(f"Total: {len(df)} slicing...")
|
|
|
|
|
|
|
|
ddos_df = select_label_rows(df, 'DDoS')
|
|
|
|
|
|
|
|
normal_df = select_label_rows(df, 'BENIGN')
|
|
|
|
|
|
|
|
return ddos_df, normal_df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def process(df: pd.DataFrame, label: str = None):
|
|
|
|
def process(df: pd.DataFrame, label: str = None):
|
|
|
|
df = clean_data(df)
|
|
|
|
|
|
|
|
df_clean_data = averaging_df(df)
|
|
|
|
ddos_df, normal_df = slice_df(df)
|
|
|
|
create_dir(IMG_SAVE_PATH)
|
|
|
|
|
|
|
|
generate_and_save(df_clean_data)
|
|
|
|
ddos_df = averaging_df(clean_data(ddos_df))
|
|
|
|
|
|
|
|
normal_df = averaging_df(clean_data(normal_df))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger.info(f"DDoS: {len(ddos_df)}, Normal: {len(normal_df)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ddos_save_path = f"{IMG_SAVE_PATH}/ddos"
|
|
|
|
|
|
|
|
benign_save_path = f"{IMG_SAVE_PATH}/benign"
|
|
|
|
|
|
|
|
create_dir(ddos_save_path)
|
|
|
|
|
|
|
|
generate_and_save(ddos_df, ddos_save_path)
|
|
|
|
|
|
|
|
create_dir(benign_save_path)
|
|
|
|
|
|
|
|
generate_and_save(normal_df, benign_save_path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_and_save(df_clean_data: pd.DataFrame):
|
|
|
|
def generate_and_save(df_clean_data: pd.DataFrame, save_path: str = IMG_SAVE_PATH):
|
|
|
|
row_length = len(df_clean_data.columns)
|
|
|
|
row_length = len(df_clean_data.columns)
|
|
|
|
col_length = len(df_clean_data)
|
|
|
|
col_length = len(df_clean_data)
|
|
|
|
count = 0
|
|
|
|
count = 0
|
|
|
@ -61,7 +78,7 @@ def generate_and_save(df_clean_data: pd.DataFrame):
|
|
|
|
logger.info(f"Shape: {ims.shape}")
|
|
|
|
logger.info(f"Shape: {ims.shape}")
|
|
|
|
array = np.array(ims, dtype=np.uint8)
|
|
|
|
array = np.array(ims, dtype=np.uint8)
|
|
|
|
new_image = Image.fromarray(array)
|
|
|
|
new_image = Image.fromarray(array)
|
|
|
|
new_image.save(f"{IMG_SAVE_PATH}/{saves_count}.png")
|
|
|
|
new_image.save(f"{save_path}/{saves_count}.png")
|
|
|
|
count = 0
|
|
|
|
count = 0
|
|
|
|
ims = []
|
|
|
|
ims = []
|
|
|
|
|
|
|
|
|
|
|
|