不能用scikit-learn做基础EDA,因其专为建模设计,缺乏describe()、hist()、corr()等统计与可视化功能,强行使用会污染原始数据、增加冗余步骤且无法交互调试;EDA应仅用pandas+seaborn+matplotlib完成数据概览、分布分析、相关性探索等。
直接用 pandas 做 EDA,scikit-learn 不参与——它不提供统计摘要、分布图或相关性热力图这类功能;强行套用只会绕远路、出错。
为什么不能用 scikit-learn 做基础 EDA
scikit-learn 的设计目标是模型训练与评估,不是数据探索。它没有 describe()、hist()、corr() 或 pairplot() 这类方法。试图用 StandardScaler().fit_transform() 替代缺失值检查,或拿 train_test_split() 当数据概览工具,结果只会是:数据没看明白,还提前引入了缩放/分割的副作用。
- 所有 EDA 前提是原始数据状态,而
scikit-learn的多数变换器(如OneHotEncoder)默认丢弃未见过的类别、填充nan为 0 或报错,会污染初始观察 -
scikit-learn的ColumnTransformer要求列名严格匹配,但 EDA 阶段常需临时增删列、重命名、分组聚合——这些操作在ColumnTransformer里无法交互式调试 - 绘图、异常点定位、偏态判断等依赖可视化与直觉,
scikit-learn不含任何绘图能力,硬接matplotlib会导致代码割裂、逻辑跳转
真正高效的 EDA 流程:只用 pandas + seaborn + matplotlib
一个能跑通的最小闭环就是:read_csv → info()/isna().sum() → describe(include='all') → hist() 或 sns.boxplot() → corr(numeric_only=True) → sns.heatmap()。整个过程无需 import sklearn。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
- 检查缺失:用
df.isna().sum()比SimpleImputer(strategy='most_frequent').fit(df)快 10 倍,且不修改原数据 - 查看分布:
df['SalePrice'].skew()直接返回偏度值,比先PowerTransformer再拟合模型更轻量 - 识别高相关特征:
df.corr(numeric_only=True)['SalePrice'].abs().sort_values(ascending=False)一行搞定,不用碰feature_selection.SelectKBest - 类别变量分析:
df['MSZoning'].value_counts(normalize=True)看比例,比OrdinalEncoder编码后统计更直观
scikit-learn 什么时候才该介入
仅当 EDA 明确暴露问题并需要系统化处理时:数据已理解清楚,下一步是建模准备。此时才用 scikit-learn 封装可复用、可部署的转换逻辑。
- 缺失值策略确定后,再用
SimpleImputer(strategy='median')——而不是边画图边 impute - 发现某列有大量稀疏类别,才上
OneHotEncoder(drop='if_binary'),而非一上来就编码 - 确认数值特征量纲差异大(比如
LotArea是千级,OverallQual是 1–10),才加StandardScaler;否则可能白费力气 - 要用
Pipeline把清洗+缩放+训练串起来,但 Pipeline 前必须已有清晰的 EDA 结论,否则 pipeline 里塞的全是拍脑袋参数
EDA 的本质是“人主导的快速试错”,而 scikit-learn 是“机器执行的确定流程”。把后者提前塞进前者,就像用数控机床雕木头初胚——精度高,但连刀都还没找准下在哪。