-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreprocessing.py
More file actions
82 lines (62 loc) · 2.5 KB
/
preprocessing.py
File metadata and controls
82 lines (62 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""
Preprocessing para MECAL_module
Renomeia colunas do dataset OpenVAS para o formato esperado pelo MECAL.
"""
import os
import pandas as pd
def preprocess_dataset(input_path: str, output_path: str) -> pd.DataFrame:
"""
Lê o dataset original do OpenVAS e renomeia as colunas de texto.
Renomeações:
- definition.description -> descrição
- definition.solution -> solução
Todas as demais colunas são preservadas.
Args:
input_path: Caminho do dataset original
output_path: Caminho para salvar o dataset preprocessado
Returns:
DataFrame preprocessado
"""
print(f"Lendo dataset de: {input_path}")
df = pd.read_csv(input_path)
print(f"Shape original: {df.shape}")
print(f"Colunas originais: {list(df.columns)}")
# Renomear colunas de texto livre
column_mapping = {
'definition.description': 'descrição',
'definition.solution': 'solução',
}
for old_col, new_col in column_mapping.items():
if old_col in df.columns:
print(f" Renomeando: {old_col} -> {new_col}")
else:
print(f" AVISO: Coluna '{old_col}' não encontrada!")
df = df.rename(columns=column_mapping)
# Remover prefixo de colunas que ainda contêm "." (ex: asset.host_name -> host_name).
# Aplica-se a qualquer coluna remanescente com ponto — generalizado para qualquer schema.
dot_rename = {
col: col.rsplit(".", 1)[-1]
for col in df.columns
if "." in col
}
if dot_rename:
for old, new in dot_rename.items():
print(f" Simplificando: {old} -> {new}")
df = df.rename(columns=dot_rename)
# Remover linhas com valores nulos nas colunas essenciais
essential_cols = [c for c in ['descrição', 'solução'] if c in df.columns]
original_len = len(df)
df = df.dropna(subset=essential_cols)
removed = original_len - len(df)
if removed > 0:
print(f"Removidas {removed} linhas com valores nulos")
print(f"Shape final: {df.shape}")
print(f"Colunas finais: {list(df.columns)}")
df.to_csv(output_path, index=False)
print(f"Dataset salvo em: {output_path}")
return df
if __name__ == "__main__":
this_dir = os.path.dirname(os.path.abspath(__file__))
input_path = os.path.join(this_dir, "dataset", "dataset_original.csv")
output_path = os.path.join(this_dir, "dataset", "preprocessed.csv")
preprocess_dataset(input_path, output_path)