Files
cicids2017-visualization/visualize_processed_data.py
2025-07-28 22:40:31 -03:00

71 lines
2.8 KiB
Python

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
def visualize_processed_data(input_path):
"""
Gera visualizações para o dataset pré-processado.
Args:
input_path (str): Caminho para o arquivo CSV do dataset pré-processado.
"""
print(f"Carregando o dataset pré-processado de: {input_path}")
df = pd.read_csv(input_path)
# Verifica se a coluna "Label" está presente
if "Label" not in df.columns:
raise ValueError("A coluna 'Label' não foi encontrada no dataset.")
# Exibe informações iniciais sobre o dataset
print(f"✅ Dataset carregado com {df.shape[0]} linhas e {df.shape[1]} colunas.")
print(f"✅ Colunas no dataset: {', '.join(df.columns)}")
# Conversão para rótulos legíveis
label_counts = df["Label"].apply(lambda x: "Ataque" if x == 1 else "Benigno")
# Gráfico de barras da distribuição das classes
plt.figure(figsize=(8, 5))
sns.countplot(x=label_counts)
plt.title("Distribuição das Classes (Dados Tratados)")
plt.xlabel("Classe")
plt.ylabel("Contagem")
plt.grid(True)
plt.tight_layout()
plt.savefig("visualizations/processed_data_label_distribution.png", dpi=300)
plt.close()
print("✅ Gráfico de distribuição das classes salvo como visualizations/processed_data_label_distribution.png")
# Gráfico da mesma feature do 4.1 (exemplo: "Destination_Port")
feature = "Destination_Port"
if feature in df.columns:
plt.figure(figsize=(10, 6))
sns.histplot(df[feature], kde=True)
plt.title(f"Distribuição da Feature '{feature}' (Dados Tratados)")
plt.xlabel(feature)
plt.ylabel("Frequência")
plt.grid(True)
plt.tight_layout()
plt.savefig("visualizations/processed_data_feature_distribution.png", dpi=300)
plt.close()
print(f"✅ Gráfico de distribuição da feature '{feature}' salvo como visualizations/processed_data_feature_distribution.png")
else:
print(f"⚠️ A feature '{feature}' não foi encontrada no dataset.")
# Informações finais
print("✅ Processamento completo!")
print("✅ Gráficos salvos em: 'visualizations/'")
print(f"✅ Total de linhas processadas: {df.shape[0]}")
print(f"✅ Total de colunas processadas: {df.shape[1]}")
if __name__ == "__main__":
input_file = "cicids2017_preprocessed.csv" # Caminho para o dataset pré-processado
if not os.path.exists(input_file):
print(f"Erro: Arquivo {input_file} não encontrado.")
else:
# Cria o diretório para salvar as visualizações, se não existir
os.makedirs("visualizations", exist_ok=True)
# Chama a função para gerar as visualizações
visualize_processed_data(input_file)