这次我们来看一个面向零基础学习者的Kaggle竞赛实战指南。如果你对数据科学竞赛感兴趣,但面对海量教程和复杂流程不知如何下手,这篇文章就是为你准备的。它不是一个简单的概念介绍,而是一套由计算机领域专家梳理的、可直接上手的实战方案,覆盖了时序预测、工业分析、金融风控、医疗诊断等多个高价值场景。核心目标很明确:让你能独立跑通一个完整的Kaggle竞赛流程,并将这段经历转化为简历上的亮点。
对于初学者,最大的障碍往往不是算法本身,而是“第一步怎么迈出去”。本文将从最基础的Kaggle平台注册、数据获取开始,逐步深入到十大经典获奖方案的代码解读与复现,最终完成从数据探索、特征工程、模型构建到结果提交的全过程。无论你是想转行数据科学的学生,还是希望提升实战能力的在职开发者,这篇文章都将提供一条清晰的路径。我们将重点关注方案的可复现性、代码的解读方法以及流程中的关键技巧,确保你看完就能动手,做完就有收获。
1. 核心能力速览:这份指南能帮你做什么?
在深入细节之前,我们先通过一个表格快速了解这份Kaggle竞赛指南的核心价值和它能帮你达成的目标。
| 能力项 | 具体说明 |
|---|---|
| 目标用户 | 数据科学/机器学习零基础或入门者,希望系统学习竞赛流程并积累项目经验。 |
| 核心内容 | 精讲十大Kaggle竞赛获奖方案,覆盖时序、金融、医疗、工业等主流场景。 |
| 学习门槛 | 无需深厚数学背景,但需具备基础的Python编程能力和对机器学习的好奇心。 |
| 硬件要求 | 普通笔记本电脑即可。大部分分析可在CPU上完成,部分模型训练可利用Kaggle提供的免费GPU/TPU资源。 |
| 产出成果 | 能够独立完成至少一个完整竞赛流程,获得可提交的结果,并整理出结构清晰、可写进简历的项目报告。 |
| 技能提升 | 掌握数据预处理、特征工程、模型选择与调参、集成学习、结果提交与复盘的全套实战技能。 |
| 学习方式 | 手把手代码解读 + 流程演示,强调“跟着做”和“理解为什么这么做”。 |
这份指南的重点不在于发明新算法,而在于将顶尖选手的获奖方案“翻译”成初学者能理解、能复现的步骤。它解决了“看懂了代码但不知道从何改起”和“流程太散无法串联”的典型痛点。
2. 适用场景与学习边界
2.1 谁最适合学习这份指南?
- 在校学生:尤其是计算机、统计、金融、生物信息等相关专业,希望丰富简历、备战秋招或参与科研项目。
- 转行人士:计划转向数据科学、人工智能领域,急需有说服力的实战项目证明自己的能力。
- 初级从业者:已掌握理论,但缺乏完整的项目闭环经验,希望提升解决真实业务问题的能力。
- 竞赛爱好者:对Kaggle感兴趣但屡战屡败,需要系统的入门方法和经典案例参考。
2.2 能解决什么问题?
- 流程陌生:不清楚Kaggle竞赛从注册到提交的完整步骤,害怕操作失误。
- 方案复杂:看到金牌方案代码量大、技巧多,无从下手学习和修改。
- 场景单一:只接触过一两类问题(如房价预测),对时序、金融、医疗等特定领域的数据特点和处理方法不了解。
- 无法转化:做完练习赛不知道如何总结,无法将经历有效转化为面试时可以讲述的项目经验。
2.3 需要注意的边界
- 不是算法原理课:本文假设你对线性回归、决策树等基础模型有概念性了解。指南的重点是应用和流程,深度的数学推导需要额外学习。
- 无法保证名次:学习经典方案能极大提升你的 baseline 水平和解题思路,但要在当前活跃竞赛中取得顶级排名,还需要创新的特征工程和模型设计。
- 依赖平台资源:部分复杂模型(如深度学习)的训练需要计算资源。我们将充分利用Kaggle Notebook的免费额度,并教你如何优化代码以适应资源限制。
- 数据合规与伦理:在处理金融、医疗等敏感数据时,必须严格遵守竞赛规则,仅将数据用于本次学习目的,不得泄露或用于其他用途。所有分析应在Kaggle平台或本地安全环境中进行。
3. 环境准备与前置条件
开始之前,请确保你的学习环境已经就绪。我们追求的是最低门槛启动。
3.1 基础软件准备
- Python环境:推荐使用Anaconda管理Python环境,避免包冲突。安装Python 3.8或3.9版本(与Kaggle Notebook主流版本兼容)。
- 核心数据科学库:通过以下命令安装必备库。如果你使用Anaconda,大部分库已预装。
pip install numpy pandas matplotlib seaborn scikit-learn xgboost lightgbm catboost - 深度学习库(可选):如果学习涉及深度学习方案,还需安装:
注意:初次安装PyTorch请访问其官网获取适合你系统的安装命令。pip install tensorflow keras torch torchvision
3.2 Kaggle平台准备
这是我们的主战场。
- 注册账号:访问 Kaggle官网 使用邮箱注册。
- 验证账号:可能需要手机号验证,用于参加正式比赛。
- 熟悉界面:花10分钟了解以下核心功能模块:
- Competitions(竞赛):查看所有比赛。
- Datasets(数据集):下载数据或查找额外数据。
- Notebooks(笔记本):在线编写、运行代码的Jupyter环境,自带免费GPU/TPU配额。
- Discussions(讨论区):学习他人思路、提问的宝地。
- 配置API(用于本地开发):
- 在Kaggle网站个人账户设置页面,创建新的API Token,会下载一个
kaggle.json文件。 - 将该文件放在本地目录
~/.kaggle/(Linux/Mac) 或C:\Users\<你的用户名>\.kaggle\(Windows)。 - 设置文件权限为仅当前用户可读(重要!)。
- 之后即可在命令行使用
kaggle命令下载数据。
- 在Kaggle网站个人账户设置页面,创建新的API Token,会下载一个
3.3 学习心态与资料准备
- 选择一个入门竞赛:建议从“Getting Started”或“Playground”类型的比赛开始,例如经典的 Titanic: Machine Learning from Disaster 。这些比赛有大量公开笔记(Notebook)和教程,非常适合练手。
- 准备笔记工具:强烈建议使用Jupyter Notebook或Jupyter Lab(本地或Kaggle在线版均可)。它的交互式单元格特性非常适合数据探索和分步教学。
- 管理你的代码:在本地或GitHub上建立一个项目文件夹,结构如下:
kaggle_learning/ ├── data/ # 存放原始数据和预处理后的数据 ├── notebooks/ # 存放你的Jupyter Notebook文件 ├── src/ # 存放可复用的Python模块(特征工程、模型等) ├── submissions/ # 存放提交的结果文件 └── README.md # 项目说明
4. 十大竞赛场景精讲与流程拆解
我们将十大竞赛方案归类为几个核心场景。每个场景的学习路径是:理解问题 -> 数据初探 -> 借鉴获奖方案核心思路 -> 手把手复现关键步骤 -> 总结套路。
4.1 场景一:时序预测(Time Series Forecasting)
典型竞赛:M5 Forecasting - Accuracy(沃尔玛商品需求预测)、Web Traffic Time Series Forecasting等。核心挑战:数据具有时间依赖性(自相关性),需要处理季节性、趋势和节假日效应。获奖方案精讲要点:
- 数据分解:使用
statsmodels库进行季节性分解,直观观察趋势、季节性和残差。 - 滞后特征与窗口统计:创建过去1天、7天、30天的销量滞后特征,以及滚动均值、标准差等统计特征。
# 示例:创建滞后和滚动平均特征 df['sales_lag1'] = df['sales'].shift(1) df['sales_rolling_mean_7'] = df['sales'].rolling(window=7).mean() - 模型选择:
- 经典统计模型:ARIMA, SARIMAX, Prophet(适合有强季节性的数据)。
- 树模型:LightGBM, XGBoost(需将时间戳转化为年、月、日、星期等特征)。
- 深度学习:LSTM, GRU, Temporal Fusion Transformer (TFT)。
- 验证策略:时间序列交叉验证(TimeSeriesSplit)至关重要,绝不能使用随机划分。
from sklearn.model_selection import TimeSeriesSplit tscv = TimeSeriesSplit(n_splits=5) for train_index, val_index in tscv.split(X): X_train, X_val = X.iloc[train_index], X.iloc[val_index] y_train, y_val = y.iloc[train_index], y.iloc[val_index] # ... 训练和评估模型
4.2 场景二:结构化数据与表格竞赛(金融/工业)
典型竞赛:Porto Seguro’s Safe Driver Prediction(保险风险预测)、IEEE-CIS Fraud Detection(欺诈检测)。核心挑战:特征维度高,可能存在大量匿名特征、类别不平衡、数据噪声大。获奖方案精讲要点:
- 探索性数据分析(EDA):大量使用
pandas_profiling或sweetviz自动生成报告,快速把握数据全貌。 - 特征工程:
- 匿名特征处理:即使不知道含义,也可以计算统计量(如均值、方差、唯一值数量)作为新特征。
- 交叉特征:对重要的类别型特征进行两两组合,挖掘交互信息。
- 目标编码(Target Encoding):用目标变量的统计信息(如均值)对类别特征进行编码,需注意防止过拟合(使用交叉验证或在训练集上计算)。
- 处理不平衡:使用
class_weight参数(树模型)、过采样(SMOTE)、欠采样或评估时采用AUC-PR、F1-score等指标。 - 模型集成:这类比赛的顶级方案几乎都是“花式集成”。
- 堆叠(Stacking):用多个基模型(如LGBM, CatBoost, NN)的预测结果作为新特征,训练一个元模型(如线性回归)。
- 投票/平均:对多个强模型的预测结果进行简单平均或加权平均。
4.3 场景三:计算机视觉(医疗影像)
典型竞赛:RSNA Pneumonia Detection(肺炎检测)、SIIM-ISIC Melanoma Classification(黑色素瘤分类)。核心挑战:数据标注成本高、类别不平衡、需要专业的领域知识进行数据增强。获奖方案精讲要点:
- 数据可视化:使用
matplotlib或opencv查看原始图像和标注框(对于检测任务),理解数据分布和难点。 - 利用预训练模型:这是核心技巧。使用在ImageNet上预训练的模型(如EfficientNet, ResNet, Vision Transformer)作为特征提取器或进行微调。
import tensorflow as tf from tensorflow.keras.applications import EfficientNetB0 from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.models import Model base_model = EfficientNetB0(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) base_model.trainable = False # 先冻结权重,只训练顶层 x = base_model.output x = GlobalAveragePooling2D()(x) predictions = Dense(num_classes, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions) - 数据增强:针对医疗影像,增强策略需保守(如旋转、翻转),避免改变病理特征。使用
albumentations库非常方便。 - 训练技巧:学习率预热(Warmup)、余弦退火(Cosine Annealing)、标签平滑(Label Smoothing)、混合精度训练(以节省显存、加快速度)。
4.4 其他场景(自然语言处理、推荐系统等)
精讲要点:
- NLP竞赛:重点学习Transformer模型(BERT, RoBERTa)的应用,以及如何使用Hugging Face
transformers库快速微调。特征工程侧重于文本清洗、TF-IDF、词向量。 - 推荐系统竞赛:学习协同过滤(矩阵分解)、深度排序模型,以及如何构造用户-物品交互序列特征。
5. 手把手跑通完整竞赛流程(以Titanic为例)
我们以最经典的“泰坦尼克号生存预测”为例,演示一个极简但完整的流程。即使你已有经验,也请跟随此流程,因为它标准化了你未来应对任何新竞赛的步骤。
5.1 第一步:问题理解与数据获取
- 访问竞赛页面:在Kaggle搜索“Titanic”。
- 阅读Overview:了解比赛目标(预测乘客是否生还)、评估指标(准确率)、数据描述。
- 下载数据:在Data标签页下载
train.csv,test.csv,gender_submission.csv。- 方法A(网页):直接点击下载。
- 方法B(命令行):配置好API后,使用命令:
kaggle competitions download -c titanic
- 导入数据:
import pandas as pd train_df = pd.read_csv('./data/titanic/train.csv') test_df = pd.read_csv('./data/titanic/test.csv')
5.2 第二步:探索性数据分析(EDA)
目标是发现数据规律、异常和特征与目标的关系。
# 1. 查看数据概览 print(train_df.info()) print(train_df.describe()) print(train_df.head()) # 2. 检查缺失值 print(train_df.isnull().sum()) # 3. 可视化分析 import seaborn as sns import matplotlib.pyplot as plt # 生存率与性别的关系 sns.barplot(x='Sex', y='Survived', data=train_df) plt.show() # 生存率与船舱等级的关系 sns.barplot(x='Pclass', y='Survived', data=train_df) plt.show() # 年龄分布与生存 sns.histplot(data=train_df, x='Age', hue='Survived', multiple='stack') plt.show()5.3 第三步:特征工程
基于EDA的发现,清洗数据并构造新特征。
# 1. 处理缺失值 train_df['Age'].fillna(train_df['Age'].median(), inplace=True) test_df['Age'].fillna(test_df['Age'].median(), inplace=True) train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace=True) test_df['Fare'].fillna(test_df['Fare'].median(), inplace=True) # 2. 构造新特征 # 家庭规模 train_df['FamilySize'] = train_df['SibSp'] + train_df['Parch'] + 1 test_df['FamilySize'] = test_df['SibSp'] + test_df['Parch'] + 1 # 是否独自一人 train_df['IsAlone'] = (train_df['FamilySize'] == 1).astype(int) test_df['IsAlone'] = (test_df['FamilySize'] == 1).astype(int) # 提取姓名中的头衔 train_df['Title'] = train_df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False) test_df['Title'] = test_df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False) # 3. 编码类别特征 from sklearn.preprocessing import LabelEncoder label_cols = ['Sex', 'Embarked', 'Title'] for col in label_cols: le = LabelEncoder() le.fit(pd.concat([train_df[col], test_df[col]], axis=0)) # 在全集上fit train_df[col] = le.transform(train_df[col]) test_df[col] = le.transform(test_df[col]) # 4. 选择特征列 feature_columns = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked', 'FamilySize', 'IsAlone', 'Title'] X_train = train_df[feature_columns] y_train = train_df['Survived'] X_test = test_df[feature_columns]5.4 第四步:模型训练与验证
from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score from sklearn.metrics import accuracy_score # 初始化模型 model = RandomForestClassifier(n_estimators=100, random_state=42) # 交叉验证评估 cv_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy') print(f'Cross-Validation Accuracy Scores: {cv_scores}') print(f'Mean CV Accuracy: {cv_scores.mean():.4f}') # 在整个训练集上训练最终模型 model.fit(X_train, y_train) # 在训练集上查看表现(仅供初步参考,应以CV为准) train_pred = model.predict(X_train) print(f'Training Accuracy: {accuracy_score(y_train, train_pred):.4f}')5.5 第五步:生成提交文件
# 对测试集进行预测 test_predictions = model.predict(X_test) # 创建提交DataFrame submission_df = pd.DataFrame({ 'PassengerId': test_df['PassengerId'], 'Survived': test_predictions }) # 保存为csv文件 submission_df.to_csv('./submissions/titanic_baseline.csv', index=False) print("Submission file saved!")关键动作:回到Kaggle竞赛页面,在“Submission”标签页上传这个CSV文件,系统会自动评分并显示在排行榜(Leaderboard)上的位置。
6. 从“跑通”到“优化”:借鉴获奖方案的精髓
完成基线模型后,如何提升?这就是需要学习获奖方案的时候。不要试图一次性理解全部代码,而是分模块攻破。
6.1 如何阅读一个复杂的获奖Notebook?
- 先看结构:浏览目录或单元格标题,理解作者的分析流程(EDA -> 特征工程 -> 模型1 -> 模型2 -> 集成 -> 提交)。
- 聚焦特征工程部分:这是提升成绩最有效的环节。看作者创造了哪些新特征(例如,将时间戳拆解为多个周期性特征、对文本进行情感分析、做特征交叉)。
- 看模型部分:注意作者选择了哪些模型,以及为什么(例如,LGBM处理表格数据、CNN处理图像、BERT处理文本)。关注模型初始化的参数。
- 看集成部分:看作者是如何组合多个模型的(平均、加权平均、堆叠)。这是拉开差距的关键。
- 运行并修改:在Kaggle Notebook中Fork一份,逐段运行代码,并尝试修改特征或参数,观察结果变化。
6.2 实践:为Titanic方案添加高级技巧
假设我们阅读了一个金牌方案,发现以下技巧:
- 特征分箱(Binning):将连续特征“Fare”离散化。
- 目标编码:对“Title”和“Pclass”的组合进行目标编码。
- 模型调参:使用网格搜索(GridSearchCV)或贝叶斯优化(BayesianOptimization)为随机森林寻找更优参数。
- 模型融合:结合随机森林、梯度提升树和逻辑回归的预测结果。
你的任务:将上述1-2个技巧加入到你的基线代码中,重新训练并提交,观察排名是否提升。这个过程就是学习的核心。
7. 资源占用与性能优化实战
在本地运行和Kaggle Notebook中,你需要关注计算资源。
7.1 Kaggle Notebook 资源使用技巧
- 开启GPU/TPU:在Notebook设置中,可以免费开启GPU(每周约30小时)或TPU。仅在训练深度学习模型时开启,对于表格数据的树模型,CPU通常更快。
- 内存管理:使用
df.memory_usage(deep=True)查看内存占用。对于大型数据集,使用dtype转换(如float64转float32,object转category)可以大幅节省内存。for col in df.select_dtypes(include=['int64']).columns: df[col] = df[col].astype('int32') for col in df.select_dtypes(include=['float64']).columns: df[col] = df[col].astype('float32') - 会话时长:Kaggle Notebook会话有9小时(GPU)或12小时(CPU)限制。长时间训练时,记得定期保存中间结果(模型权重、特征文件)。
7.2 本地训练优化
- 使用增量学习:对于超大数据集,使用
LGBM或XGBoost的init_model和fit增量训练功能。 - 早停法(Early Stopping):防止过拟合,并节省训练时间。
from lightgbm import LGBMClassifier model = LGBMClassifier(n_estimators=10000) # 设置一个很大的树数量 model.fit(X_train, y_train, eval_set=[(X_val, y_val)], eval_metric='auc', callbacks=[early_stopping(stopping_rounds=100)]) # 早停
8. 常见问题与排查方法
在学习和实践过程中,你一定会遇到各种问题。下表列出了典型问题及解决思路。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 导入数据失败 | 文件路径错误、编码问题、文件损坏 | 检查文件路径、用pd.read_csv的encoding参数尝试‘utf-8‘,‘latin-1‘ | 使用绝对路径,或在Kaggle中确认数据已正确添加到Notebook |
| 内存不足(Memory Error) | 数据集太大,或特征工程产生巨大中间变量 | 使用df.info()查看内存,监控任务管理器 | 1. 使用更省内存的数据类型。2. 分块读取数据(chunksize)。3. 删除不必要的中间变量(del df_temp)。 |
| 模型训练特别慢 | 数据维度太高、模型复杂、未使用GPU | 检查特征数量、模型参数(如n_estimators)、是否在Kaggle中开启了GPU | 1. 进行特征选择。2. 使用更简单的模型先做基线。3. 在Kaggle Notebook中开启GPU加速。 |
| 本地分数高,但提交后分数低(过拟合) | 验证方式不对(如时序问题用了随机划分)、数据泄露 | 检查交叉验证策略是否正确,检查是否有未来信息被用于训练 | 1. 使用时序交叉验证。2. 仔细检查特征工程,确保没有用到测试集信息。3. 增加正则化强度。 |
| Kaggle提交失败 | 提交文件格式不对、列名错误、有缺失值 | 仔细阅读提交格式要求,检查提交文件的列名、顺序和数据类型 | 1. 使用submission_df.to_csv(‘file.csv‘, index=False)。2. 确保PassengerId列正确。3. 确保预测列无空值。 |
| Notebook运行报错(ModuleNotFoundError) | 缺少依赖库 | 查看错误信息,确认缺失的库名 | 在Kaggle Notebook中,使用!pip install package_name安装。在本地,使用conda或pip安装。 |
| GPU无法使用(PyTorch/TensorFlow) | 驱动不匹配、CUDA版本不对、未安装GPU版本 | 运行torch.cuda.is_available()或tf.test.is_gpu_available() | 1. 在Kaggle中确认GPU已开启。2. 本地安装时,严格按官网命令安装对应CUDA版本的PyTorch/TensorFlow。 |
9. 最佳实践与简历撰写建议
9.1 竞赛流程最佳实践
- 从基线开始:永远先建立一个简单的基线模型(如逻辑回归、单棵决策树),提交获得一个基准分数。所有优化都应与基线对比。
- 版本控制:使用Git管理你的代码和Notebook。每次重大修改(新的特征工程、模型尝试)都做一次提交,并记录当时的分数。
- 记录实验:使用Excel、Notion或专门的MLOps工具(如MLflow)记录每次实验的参数、特征和得分。避免重复劳动。
- 利用社区:遇到难题时,先去竞赛的Discussion区搜索,99%的问题都有人问过。提问时,提供清晰的代码、错误信息和你的思考过程。
- 注重可复现性:设置随机种子(
np.random.seed,random_state),确保每次运行结果一致。
9.2 如何将Kaggle经历写进简历?
这是本指南的终极目标。不要只写“参加了Kaggle比赛”,要写成有说服力的项目经验。
糟糕的写法:
- 参与Kaggle Titanic比赛,使用了随机森林模型。
优秀的写法(STAR法则:情境、任务、行动、结果):
- 项目名称:泰坦尼克号乘客生存预测机器学习项目
- 项目描述:基于Kaggle竞赛平台提供的乘客数据,构建机器学习模型以预测其在海难中的生存概率。
- 我的职责:
- 数据探索与清洗:对乘客性别、年龄、舱位等特征进行可视化分析,处理了年龄、登船港口等特征的缺失值,发现了“妇女儿童优先”的显著规律。
- 特征工程:基于领域知识,创造了“家庭规模”、“是否独行”、“姓名头衔”等新特征,并使用目标编码处理类别变量,将基线模型准确率提升了3%。
- 建模与优化:实现了随机森林、梯度提升树(LightGBM)等模型,并利用网格搜索进行超参数调优。最终通过模型融合(投票集成)策略,在测试集上取得了前10%的排名(准确率XX%)。
- 项目复盘:总结了时序交叉验证在防止过拟合中的重要性,以及特征工程在表格数据竞赛中的关键作用。
关键点:量化你的贡献(提升了多少准确率、达到了什么排名)、突出你使用的具体技术(特征工程方法、模型名称、集成策略)、体现你的分析和解决问题的能力。
10. 总结与下一步行动
通过这份指南,你应该已经清晰地看到,从零上手Kaggle并非难事。核心在于将宏大的目标拆解为可执行的步骤:理解问题 -> 获取数据 -> EDA -> 构建基线 -> 学习并借鉴优秀方案 -> 迭代优化 -> 总结复盘。
最值得你立即尝试的,就是选择本文提到的任意一个入门竞赛(如Titanic),严格按照第5章的流程亲手跑一遍。在这个过程中,你一定会遇到第8章列出的某些问题,而解决它们正是你能力提升的时刻。
最容易踩的坑是“只看不练”和“追求完美”。不要等到完全读懂一个金牌方案的所有数学原理才开始编码。先复现,再理解,边做边学。第一个项目的目标不是冲进前10,而是完整地走通流程并成功提交。
下一步,你可以:
- 纵向深入:在Titanic项目上,尝试引入更复杂的特征工程和模型集成,挑战更高的分数。
- 横向拓展:选择一个新的场景(如时序预测的M5比赛),将你学到的流程迁移过去,感受不同场景下的数据特性和解法差异。
- 参与活跃比赛:找一个正在进行的“Playground”或“Getting Started”比赛,与全球选手同台竞技,体验真实的竞赛节奏。
记住,Kaggle是一个绝佳的练兵场,但它的价值最终体现在你能否将在这里学到的数据思维、工程能力和解决问题的框架,应用到真实的业务场景中。现在,打开Kaggle,创建你的第一个Notebook,开始你的数据科学实战之旅吧。建议收藏本文,在后续的每个步骤中遇到困难时,都可以回来查阅对应的章节。