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)