71 lines
2.8 KiB
Python
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)
|
|
|