Data Science Python 面试完全指南 2026:Pandas/NumPy/Sklearn + 真题解析
Python 是 Data Science 面试的必考技能,覆盖数据处理(Pandas/NumPy)、机器学习(Sklearn)、统计分析和可视化。本文系统梳理 DS Python 面试的核心考察点、高频题型和真题解析,附 Meta/Google/Bloomberg DS 岗位的 Python 面试真实题目,帮助你在 2026 申请季中脱颖而出。
## DS Python 面试的考察框架
**Data Science Python 面试不是 LeetCode 刷题**。DS 面试的 Python 考察重点在于:能否用 Python 高效地处理真实数据、构建分析 Pipeline,以及实现和解释机器学习模型。 根据 Glassdoor 和 Blind 的面试报告,Top 10 科技公司 DS 岗位的 Python 面试通常分为三个层次: | 层次 | 考察内容 | 代表公司 | |------|----------|----------| | 数据处理层 | Pandas 操作、数据清洗、缺失值处理 | 所有公司 | | 统计分析层 | 假设检验、A/B Test、概率分布 | Meta、Google、Amazon | | 机器学习层 | 模型选择、特征工程、模型评估 | Google、DeepMind、Bloomberg | **UK 市场特点**:英国金融科技和银行业的 DS 岗位(如 Revolut、Barclays、HSBC、Bloomberg)更注重数据处理和统计分析层,ML 层的考察相对较少;而英国科技公司(如 DeepMind、Waymo UK、Palantir London)则三个层次都会深入考察。
## Pandas 核心考察点
**Pandas 是 DS Python 面试中最高频的考察工具**,面试官通常通过 Pandas 题目来评估候选人的数据处理能力和代码效率。 ### 高频考察点 1:GroupBy 与聚合 ```python import pandas as pd # 真题:计算每个用户的月均消费金额,并找出消费最高的前 10% 用户 df = pd.read_csv('transactions.csv') # columns: user_id, date, amount # 解法 df['month'] = pd.to_datetime(df['date']).dt.to_period('M') monthly_avg = ( df.groupby(['user_id', 'month'])['amount'] .sum() .reset_index() .groupby('user_id')['amount'] .mean() .reset_index() .rename(columns={'amount': 'monthly_avg_spend'}) ) # 找出前 10% 用户 threshold = monthly_avg['monthly_avg_spend'].quantile(0.9) top_users = monthly_avg[monthly_avg['monthly_avg_spend'] >= threshold] ``` ### 高频考察点 2:时间序列处理 ```python # 真题:计算用户 7 日滚动留存率 df['date'] = pd.to_datetime(df['date']) df = df.sort_values(['user_id', 'date']) # 计算每个用户的首次登录日期 df['first_login'] = df.groupby('user_id')['date'].transform('min') df['days_since_first'] = (df['date'] - df['first_login']).dt.days # 7 日留存:首次登录后第 7 天是否有活跃记录 retention = df[df['days_since_first'] == 7]['user_id'].nunique() / df['user_id'].nunique() ``` ### 高频考察点 3:数据清洗与缺失值处理 ```python # 真题:处理一张包含 30% 缺失值的用户特征表 # 面试官考察的不是代码,而是你的决策逻辑 # 1. 先分析缺失值的分布 print(df.isnull().sum() / len(df)) # 缺失率 print(df.isnull().mean()) # 同上,更简洁 # 2. 根据业务逻辑选择填充策略 # 数值型:用中位数(对异常值鲁棒) df['age'].fillna(df['age'].median(), inplace=True) # 类别型:用众数或单独的 'Unknown' 类别 df['city'].fillna('Unknown', inplace=True) # 时间序列:用前向填充(forward fill) df['price'].fillna(method='ffill', inplace=True) # 3. 对缺失率 > 50% 的列,考虑删除 cols_to_drop = df.columns[df.isnull().mean() > 0.5] df.drop(columns=cols_to_drop, inplace=True) ``` **面试技巧**:在处理缺失值时,一定要先解释你的决策逻辑(为什么选择这种填充方式),而不是直接写代码。面试官更看重你的数据直觉,而不是代码语法。
## 机器学习 Python 考察点
### Sklearn Pipeline 构建 **真题(Google DS 面试)**:给定一个包含数值特征和类别特征的数据集,构建一个完整的 ML Pipeline,包括特征预处理、模型训练和交叉验证。 ```python from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.impute import SimpleImputer from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score # 定义特征类型 numeric_features = ['age', 'income', 'tenure'] categorical_features = ['city', 'product_type', 'channel'] # 数值特征处理:填充缺失值 + 标准化 numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler()) ]) # 类别特征处理:填充缺失值 + One-Hot 编码 categorical_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='constant', fill_value='missing')), ('onehot', OneHotEncoder(handle_unknown='ignore', sparse_output=False)) ]) # 合并特征处理器 preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features) ] ) # 完整 Pipeline pipeline = Pipeline(steps=[ ('preprocessor', preprocessor), ('classifier', RandomForestClassifier(n_estimators=100, random_state=42)) ]) # 交叉验证 scores = cross_val_score(pipeline, X_train, y_train, cv=5, scoring='roc_auc') print(f'CV AUC: {scores.mean():.4f} (+/- {scores.std()*2:.4f})') ``` ### 模型评估与解释 **面试中最常被忽视的环节**:模型评估不只是看 Accuracy。DS 面试官通常会追问: - 为什么选择 AUC 而不是 Accuracy?(数据不平衡时 Accuracy 会误导) - Precision 和 Recall 的权衡如何决定?(取决于业务场景:欺诈检测 vs 推荐系统) - 如何解释模型的决策?(SHAP values、Feature Importance) ```python import shap # 用 SHAP 解释 RandomForest 的预测 explainer = shap.TreeExplainer(pipeline.named_steps['classifier']) X_processed = pipeline.named_steps['preprocessor'].transform(X_test) shap_values = explainer.shap_values(X_processed) # 可视化特征重要性 shap.summary_plot(shap_values[1], X_processed, feature_names=feature_names) ```
## 统计分析 Python 考察点
**统计分析是 UK DS 面试中最容易被忽视、但实际上最重要的考察点。** 英国金融行业的 DS 岗位(Bloomberg、Barclays、HSBC)对统计基础的要求远高于美国科技大厂。 ### 假设检验 ```python from scipy import stats import numpy as np # 真题:给定两组用户的购买金额数据,判断两组是否存在显著差异 group_a = np.array([45, 52, 48, 61, 39, 55, 47, 58, 43, 51]) group_b = np.array([52, 61, 58, 67, 49, 63, 55, 70, 48, 59]) # 1. 先检验正态性(Shapiro-Wilk 检验) _, p_normal_a = stats.shapiro(group_a) _, p_normal_b = stats.shapiro(group_b) if p_normal_a > 0.05 and p_normal_b > 0.05: # 数据近似正态分布,使用 t 检验 t_stat, p_value = stats.ttest_ind(group_a, group_b) print(f't-statistic: {t_stat:.4f}, p-value: {p_value:.4f}') else: # 数据不符合正态分布,使用非参数检验(Mann-Whitney U) u_stat, p_value = stats.mannwhitneyu(group_a, group_b, alternative='two-sided') print(f'U-statistic: {u_stat:.4f}, p-value: {p_value:.4f}') # 2. 计算效应量(Effect Size) cohens_d = (group_b.mean() - group_a.mean()) / np.sqrt( ((len(group_a)-1)*group_a.std()**2 + (len(group_b)-1)*group_b.std()**2) / (len(group_a) + len(group_b) - 2) ) print(f"Cohen's d: {cohens_d:.4f}") ``` **面试关键点**:不要只报告 p-value,还要解释效应量(Effect Size)和实际业务意义。p < 0.05 只说明统计显著,不代表业务上有意义。
## AT&T Career Data Science Track 的 Python 备考支持
我们的 **Tech Track(Data Science 方向)** 提供系统化的 Python 面试备考支持,包括:Pandas/NumPy/Sklearn 专项训练、ML Pipeline 构建实战、统计分析和 A/B Test 模拟面试,以及 Bloomberg/Meta/Google DS 岗位的完整 Python 面试模拟。如需了解详情,请访问 www.attcareer.com/tech 或扫描页面二维码联系我们。
DS Python 面试需要掌握深度学习(PyTorch/TensorFlow)吗?
对于大多数 DS 岗位(尤其是 UK 金融行业),不需要。深度学习主要在 ML Engineer 和 Research Scientist 岗位中考察。DS 岗位更注重 Pandas/Sklearn 的熟练使用和统计分析能力。但如果你申请的是 DeepMind、Waymo 等 AI 公司的 DS 岗位,则需要掌握基础的 PyTorch。
面试中可以使用 ChatGPT 或 Copilot 吗?
大多数 DS 面试(包括 Take-home Assignment)不允许使用 AI 工具,因为面试官需要评估你的真实能力。但部分公司(如 Palantir)的面试允许使用互联网,这时候重要的是你能快速找到正确答案并解释清楚,而不是死记硬背。
UK DS 面试和美国 FAANG DS 面试哪个更难?
难度不同,侧重点不同。UK 金融行业 DS 面试更注重统计和 SQL,美国 FAANG DS 面试更注重产品分析和 ML 系统设计。如果你同时申请两个市场,建议先攻克 UK 市场的 SQL + 统计,再扩展到 ML 系统设计。
AT&T Career