“脏数据不清,分析徒劳”——聊聊数据分析里最容易被忽视的苦差事
今天咱不聊高大上的模型,不聊花里胡哨的算法,咱就聊点“脏活累活”——数据预处理。别看它不起眼,但谁做谁知道,不管你是AI工程师、数据分析师,还是一个Excel小能手,预处理做不好,后面建模、分析、可视化全是“缘木求鱼”。
这事儿说白了就一句话:垃圾进,垃圾出(Garbage In, Garbage Out)。
一、数据预处理到底是干嘛的?
简单来说,预处理就像做饭前洗菜、切菜,是数据分析的前戏,它包括但不限于:
- 缺失值处理
- 异常值处理
- 类型转换
- 编码标准化
- 特征衍生
- 数据清洗和去重
听着复杂?咱们一个一个聊,而且都用代码举例,不整那种纯嘴皮子功夫。
二、缺失值处理:你丢了点啥?
现实中,很多表格都是“缺胳膊少腿”的。比如某公司员工表,缺了好几个年龄和部门:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [28, np.nan, 35, np.nan],
'部门': ['技术部', '市场部', np.nan, '行政部']
})
print(df)
怎么办?一般有三种选择:
- 删掉(适合样本多、缺失不多的时候):
df.dropna(inplace=True)
- 填充(适合缺失比例不大):
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
df['部门'].fillna('未知部门', inplace=True)
- 插值法、建模填补(高级玩法,后期说)
Echo唠叨: 不要一股脑全删,删的是数据,丢的是信息,填的是规则,带来的是偏差,权衡很重要。
三、异常值处理:你是“离群”还是“脱轨”?
有时候数据太奇怪,不是BUG就是“神仙数据”:
df = pd.DataFrame({'工资': [5000, 5500, 5200, 40000, 5300]})
你看,40000是不是太跳脱?可以用箱线图法(IQR)简单判断:
Q1 = df['工资'].quantile(0.25)
Q3 = df['工资'].quantile(0.75)
IQR = Q3 - Q1
outlier_mask = (df['工资'] < Q1 - 1.5 * IQR) | (df['工资'] > Q3 + 1.5 * IQR)
print(df[outlier_mask])
你是保留、剔除、还是做离散化处理,得看业务场景。
Echo唠叨: 异常值不一定是坏数据,它可能就是关键数据,比如风控领域,一个“百万转账”就是诈骗的特征。
四、类型转换:数据类型不对,跑得都费劲
你知道吗?Pandas里"123"
跟123
可不是一个东西,一个是字符串,一个是数值,做数学运算直接报错。
df = pd.DataFrame({'销售额': ['1000', '2000', '3000']})
df['销售额'] = df['销售额'].astype(int)
还有日期字段,一定要转成datetime
类型才能做时间序列分析:
df['日期'] = pd.to_datetime(df['日期'])
五、编码与标准化:模型不懂“男”和“女”
大多数算法不懂人话,比如“性别”这种类别变量,你得把它变成数字。常见做法有:
- 标签编码(适合有序类别):
from sklearn.preprocessing import LabelEncoder
df['性别编码'] = LabelEncoder().fit_transform(df['性别'])
- One-hot编码(适合无序类别):
pd.get_dummies(df, columns=['性别'])
标准化也是老生常谈了,尤其是在做距离相关的算法(比如KNN、聚类)时:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df[['工资', '年龄']])
六、特征衍生:一招秒变老司机
好的特征比复杂的算法更重要,这话在数据圈子传疯了。比如:
- 从时间戳中提取出“星期几”、“是否节假日”
- 从地址里提取省、市、区
- 将用户行为转为频率特征、留存天数等
df['注册天数'] = (pd.to_datetime('2025-06-01') - df['注册时间']).dt.days
这些手工加工出来的特征,往往能让模型性能质的飞跃。
七、总结一下:数据预处理不香吗?
说实话,我刚入行那会儿,天天就想着堆模型、调参数,后来踩了不少坑才明白:
建模就像盖楼,数据预处理才是打地基。
很多人以为数据分析是“模型 + 可视化”,但真相是,80%的时间都在做数据清洗和整理。这工作虽苦,但做得好,后面一顺百顺。