
Kaggle
用 Kaggle 免费课程与 Notebook 系统入门数据科学
面向零基础读者的 Kaggle 学习路径:从 Python、Pandas、数据清洗、可视化到机器学习入门,再用公开 Notebook 练习探索性分析与建模,最后了解竞赛分类与参与方式。文中给出每一步的具体操作、代码示例与常见坑,帮助你把平台当成练习场而不是刷榜场。
Kaggle 最初只是一个规模不大的数据科学竞赛站点,如今已经发展成一个综合性的数据科学平台:既有竞赛,也有大量公开数据集、公开 Notebook、免费短课程和讨论区。对刚开始学数据科学的人来说,它解决的核心问题是没有练习素材、没有参照答案、没有反馈——你可以在这里找到别人写好的完整分析过程,也可以把自己的代码跑在真实数据上。这篇教程面向零基础或刚入门、希望把 Kaggle 当作学习平台而不是刷榜平台的读者,按顺序讲清楚每一步该做什么、用什么命令、看什么结果。如果你更习惯在本地环境里整理和运行代码,可以配合 Kaggle 的在线 Notebook 一起使用。
需要先说明一点:Kaggle 上的题目和真实业务问题确实存在差距,数据往往已经被清洗过,评价指标也相对单一。但这不影响它作为学习平台的价值——重点是把每一个环节的方法练熟,而不是纠结题目是否贴近生产环境。
准备工作
账号与访问方式
使用 Kaggle 的全部功能需要一个注册账号,注册后可免费使用在线 Notebook(Kaggle Notebooks)、下载公开数据集、参加大部分公开竞赛、学习平台上的短课程。课程本身免费,完成课程后可以获得相应的结业证明。具体可用的功能范围、算力配额与竞赛规则以官网当前信息为准,平台会不定期调整。
在线 Notebook 的好处是环境已经预装好常用的数据科学库,不需要自己配置 Python 环境;缺点是运行时长和资源有上限,长时间训练任务需要留意配额。如果你打算在本地运行,需要准备:
- Python 3 环境(建议用虚拟环境隔离依赖)
- 常用库:
pandas、numpy、matplotlib、seaborn、scikit-learn - 一个能打开 Notebook 的编辑器,例如 JupyterLab 或 VS Code
安装与配置
本地环境可以用 pip 一次性装好基础依赖:
python -m venv kaggle-env
source kaggle-env/bin/activate # Windows 用 kaggle-env\Scripts\activate
pip install pandas numpy matplotlib seaborn scikit-learn jupyterlab
如果希望用命令行下载数据集,可以安装 Kaggle 官方命令行工具,并在账号设置页面生成 API 令牌,把下载到的凭据文件放到用户目录下的 .kaggle 文件夹中:
pip install kaggle
mkdir -p ~/.kaggle
# 将下载的 kaggle.json 放入 ~/.kaggle/ 后执行
chmod 600 ~/.kaggle/kaggle.json
kaggle datasets list -s "titanic"
凭据文件包含账号密钥,不要提交到代码仓库,也不要在公开 Notebook 里明文粘贴。
操作步骤
第一步:补齐编程与数据处理基础
数据科学的第一步是能写代码。Python 是目前数据科学领域使用最广的语言,平台上的短课程里有一门约 5 小时的 Python 课程,分为 8 个模块,覆盖变量、函数、循环、列表与字典等基础内容,足够支撑后续的数据处理练习。非技术背景的读者在最初阶段会觉得吃力,这是正常的,把每个模块的练习题亲手敲一遍比看视频更有效。
接下来是 Pandas。它是 Python 里最常用的数据处理库,负责读写数据、做预处理与变换、把数据整理成便于分析的结构。数据分析和建模都要求数据以表格(DataFrame)形式组织,这一步基本绕不开 Pandas。平台上的 Pandas 课程约 4 小时,要求先具备 Python 基础,重点讲索引、筛选、分组聚合、合并与缺失值处理。
一个最小的 Pandas 练习可以这样写:
import pandas as pd
df = pd.read_csv("train.csv")
print(df.shape)
print(df.dtypes)
print(df.isna().sum().sort_values(ascending=False).head(10))
print(df.describe(include="all").T)
这四行输出分别告诉你数据规模、字段类型、缺失值分布和数值分布,是拿到任何新数据集时都值得先跑一遍的检查。
第二步:学习数据清洗
Kaggle 上的数据集通常已经比较干净,但真实数据不会。常见问题包括:大量缺失值、量纲不一致(例如年龄以年为单位、收入以千为单位)、存在离群点、因为录入错误或日期格式不统一导致的数据不一致。很多算法要求特征处在相近的尺度上,所以缩放和异常值处理不是可选项。
平台上的数据清洗短课程覆盖了这些典型问题及处理思路,虽然不穷尽所有技巧,但足以让你上手。练习时可以刻意对一份干净数据做“破坏”,再尝试修复,例如:
# 制造缺失与量纲差异,再处理
df.loc[df.sample(frac=0.05).index, "Age"] = None
df["Age"] = df["Age"].fillna(df["Age"].median())
from sklearn.preprocessing import StandardScaler
num_cols = ["Age", "Fare"]
df[num_cols] = StandardScaler().fit_transform(df[num_cols])
清洗的目标不是把所有值都填上,而是让每一列在进入模型前处于可解释、可比较的状态。填充策略、缩放方式都要记录在 Notebook 里,方便回看。
第三步:练习数据可视化
人脑从图形中提取模式的速度远高于读表格,可视化也是向业务方传达结论的主要手段。需要掌握的是:什么类型的分析适合什么图(分布用直方图或箱线图、类别对比用条形图、两变量关系用散点图、时间趋势用折线图),以及如何通过配色、标注、分面把趋势和异常凸显出来。
平台上的数据可视化课程会带你过一遍常见图表与选择原则。练习时建议每画一张图都先问自己“这张图要回答什么问题”,再决定图表类型,而不是先选图再找数据。
import matplotlib.pyplot as plt
import seaborn as sns
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sns.histplot(df["Age"], bins=30, ax=axes[0])
sns.boxplot(x="Survived", y="Age", data=df, ax=axes[1])
plt.tight_layout()
plt.show()
第四步:理解机器学习项目的完整流程
平台上的机器学习入门课程会讲清楚一个数据科学项目的流水线:理解问题、准备数据、划分训练集与验证集、选择模型、训练、评估、迭代。完成这门课之后,你应该能独立实现一个预测模型,并说清每一步为什么存在。
紧接着是中级机器学习课程,内容涉及更复杂的模型与流程组织方式。学完之后可以尝试把整个流程整理成自己的模板,遇到同类问题时直接复用。特征工程是模型效果提升的关键环节,平台上有专门课程讲如何识别有效特征、变换特征使其适配算法、构造新特征、以及在特征过多时做筛选。
这些课程都不是体系化的完整教材,不会覆盖某个主题下的每一个概念,但足以让你具备自己继续学下去的能力。这一点比“学完就精通”的预期更现实。
第五步:用公开 Notebook 练探索性分析
课程学完后,重点转向动手。数据科学项目里大约七到八成的时间花在数据探索上,而探索性分析没有固定大纲,做法取决于数据集、要解决的问题、业务方给的输入以及数据中发现的线索。不存在唯一正确的路径,目标是尽可能覆盖更多角度,把关键信息挖出来。
Kaggle 上有大量高质量的公开 Notebook 可以作为范本。例如一份关于房价数据的综合分析 Notebook,思路与真实项目中的分析流程一致:先整体理解数据,再用单变量分析理解目标变量,用多变量分析理解自变量与目标之间的关系,最后对正态性、同方差性、线性等假设做检验。另一份 Notebook 则演示了如何分析同时包含表格、文本和图像的数据集,帮助你针对不同数据类型选择不同方法。
阅读这类 Notebook 的正确方式是逐行执行、逐段理解,而不是从头拉到尾。遇到不认识的函数就查文档,遇到不理解的图就自己改参数重画。把别人的分析改造成自己的版本,比单纯复制更有价值。
第六步:按问题类型练习建模
数据科学问题大致可以归入回归、分类、聚类、自然语言处理、计算机视觉这几类。每类问题都有相对标准的处理套路,通过完整跑通一个 Notebook 来学习,比只看理论有效得多。可以按下面的顺序各挑一份文档完善的公开 Notebook 练习:
- 回归:从房价预测类 Notebook 入手,学习特征处理、模型集成与排行榜提交。
- 分类:Titanic 是经典的入门分类题,公开解答里能看到缺失值填充、类别编码、交叉验证的完整写法。
- 聚类:客户分群类 Notebook 演示 K-Means 的用法与结果解读。
- 自然语言处理:短信垃圾信息识别这类数据集适合练习文本清洗、向量化与分类。
- 计算机视觉:基于 Keras 的卷积网络 Notebook 可以让你看到图像数据的加载、增强与训练流程。
这些 Notebook 大多由有经验的人撰写,除了方法本身,还能学到代码组织与注释规范。逐行执行并尝试改动参数、替换模型,是吸收这些内容最快的方式。
第七步:了解竞赛分类并参与
Kaggle 的竞赛分为多个类别,Featured 竞赛是其中一类,通常由机构或企业出题,有明确的评价指标和排行榜。此外还有面向研究的竞赛、面向初学者的练习赛等。参与竞赛的流程大致是:阅读竞赛规则与数据说明、下载或在线加载数据、在 Notebook 中训练并生成提交文件、上传查看排行榜分数、根据反馈迭代。
提交文件通常是一个包含 ID 列和预测列的 CSV,具体列名与格式必须严格按竞赛页面的说明来写,格式错误会导致提交失败。排行榜分数只反映验证集上的表现,不要为了刷分而过度拟合公开榜单,这是竞赛中最常见的坑之一。
一个完整示例
下面用 Titanic 数据集走一遍从加载到生成提交文件的最小流程,可以在 Kaggle Notebook 中直接运行,也可以在本地下载数据后运行。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
features = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
X = train[features]
y = train["Survived"]
numeric_features = ["Age", "Fare", "SibSp", "Parch", "Pclass"]
categorical_features = ["Sex", "Embarked"]
preprocess = ColumnTransformer([
("num", Pipeline([
("imputer", SimpleImputer(strategy="median")),
]), numeric_features),
("cat", Pipeline([
("imputer", SimpleImputer(strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore")),
]), categorical_features),
])
model = Pipeline([
("preprocess", preprocess),
("clf", RandomForestClassifier(n_estimators=200, random_state=42)),
])
X_train, X_valid, y_train, y_valid = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
model.fit(X_train, y_train)
pred = model.predict(X_valid)
print("validation accuracy:", accuracy_score(y_valid, pred))
model.fit(X, y)
submission = pd.DataFrame({
"PassengerId": test["PassengerId"],
"Survived": model.predict(test[features]).astype(int),
})
submission.to_csv("submission.csv", index=False)
print(submission.head())
这段代码做了几件事:用 ColumnTransformer 分别处理数值列和类别列,数值列用中位数填充缺失值,类别列用众数填充后做独热编码;把预处理和模型串成 Pipeline,避免训练集与验证集之间的信息泄漏;用分层抽样划分验证集,保证正负样本比例一致;最后在全部训练数据上重新拟合,并对测试集生成提交文件。
运行后先看验证集准确率,再检查 submission.csv 的列名、行数和 ID 是否与竞赛要求一致。确认无误后上传,观察排行榜分数与本地验证分数是否接近——差距过大通常意味着数据划分或预处理有问题。
注意事项
- 不要把 Kaggle 题目等同于真实业务问题。平台数据通常已经清洗,评价指标单一,缺少业务约束。学习时应关注方法本身,而不是只追求排行榜名次。
- 不要跳过基础直接学算法。没有 Python、Pandas 和数据分析的基础,直接上手模型往往只能复制代码而无法解释结果。
- 探索性分析没有标准答案。不要因为找不到“正确做法”而焦虑,目标是尽可能多地覆盖角度,把发现记录下来。
- 注意信息泄漏。在划分验证集之前做全局填充或缩放,会让验证分数虚高。把预处理放进 Pipeline 是更稳妥的做法。
- 提交格式必须严格匹配。列名、行数、ID 顺序出错都会导致提交失败,上传前先本地检查一遍。
- 留意在线 Notebook 的资源与时长限制。长时间训练任务可能被中断,具体配额以官网当前信息为准。
- 保护账号凭据。API 令牌等同于账号密码,不要写进公开 Notebook 或提交到代码仓库。
- 课程与竞赛规则会变化。课程内容、可用功能、竞赛规则和算力配额都可能调整,动手前以官网当前信息为准。