
1) 【一句话结论】针对恶意软件样本日志的清洗,需分步骤处理缺失标签(标记为“未知”)与噪声(去重+格式验证),并通过缺失率、重复率、格式正确率等指标评估数据质量,确保清洗后数据完整、准确、一致,为后续分析提供可靠基础。
2) 【原理/概念讲解】数据清洗是数据预处理的核心环节,用于处理数据中的缺失值、噪声(如重复、错误格式)等异常。缺失值处理需根据变量类型(分类/连续)选择方法:分类变量缺失可标记为“未知”或删除(若比例低);连续变量可用均值/中位数插补。噪声处理中,重复记录通过唯一标识(如样本ID)去重,格式错误通过正则表达式验证(如样本ID的十六进制长度)。类比:数据清洗如同整理杂乱的房间,缺失标签是物品无标签,噪声是重复物品或损坏标签,清洗后物品有正确标签且无重复,便于后续整理(分析)。
3) 【对比与适用场景】以缺失值处理为例,对比不同方法:
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 删除 | 直接移除含缺失值的记录 | 简单,但损失样本 | 缺失比例极低(<5%) | 可能导致样本偏差 |
| 插补(均值/中位数) | 用统计量填充缺失值 | 保留样本量 | 连续变量,缺失比例中等(5%-20%) | 可能引入偏差 |
| 标记(分类变量) | 将缺失值标记为特殊类别(如“未知”) | 保留所有样本 | 分类变量,缺失比例高 | 需在模型中处理特殊类别 |
对于噪声处理(重复记录),去重基于唯一标识(如样本ID),适用于记录唯一标识可区分的情况;格式验证用正则表达式,适用于结构化数据(如样本ID的固定格式)。
4) 【示例】(伪代码):
import pandas as pd
import re
# 1. 读取数据
df = pd.read_csv('malware_logs.csv')
# 2. 处理缺失标签(分类变量)
df['category'] = df['category'].fillna('未知') # 标记为未知类别
# 3. 处理噪声数据
# 去重:保留唯一样本ID的记录
df = df.drop_duplicates(subset='sample_id')
# 格式验证:检查sample_id是否为32位十六进制字符串
pattern = re.compile(r'^[a-f0-9]{32}$')
df['is_valid_id'] = df['sample_id'].apply(lambda x: bool(pattern.match(x)))
df = df[df['is_valid_id']] # 保留格式正确的记录
# 4. 数据质量评估
missing_rate = df['category'].isnull().mean() # 缺失率
duplicate_rate = (len(df) - len(df.drop_duplicates())) / len(df) # 重复率
valid_rate = df['is_valid_id'].mean() # 格式正确率
print(f"缺失率: {missing_rate:.2%}, 重复率: {duplicate_rate:.2%}, 格式正确率: {valid_rate:.2%}")
5) 【面试口播版答案】面试官您好,针对360安全卫士恶意软件样本日志的清洗问题,我会设计一个分步骤的流程。首先,处理缺失的样本分类标签,对于分类变量缺失值,采用标记为“未知”类别的方式,因为直接删除会损失样本信息,标记后仍能保留样本存在但类别未知的特征。其次,处理噪声数据,包括重复记录和格式错误的样本ID,去重操作通过样本ID列保留唯一记录,格式验证用正则表达式过滤不符合规范的ID(如确保样本ID是32位十六进制字符串)。然后,评估数据质量,通过计算缺失率、重复率和格式正确率等指标,比如缺失率低于5%则认为标签完整,重复率低于1%则噪声少,格式正确率接近100%则数据格式规范。这样清洗后数据更干净,为后续分析提供可靠基础。
6) 【追问清单】
7) 【常见坑/雷区】