Notebook 操作

Kaggle Notebook 怎么用:添加数据、运行、保存与排错

Kaggle Notebook 使用教程:添加 Input、检查文件路径,用 Iris 公开数据比较基线、保存预测与验证输出,再完成 Save & Run All 和排错。

怎样完成一次可复现的 Kaggle Notebook 运行?

先添加输入数据,核对运行环境和实际路径,再按顺序运行代码并检查输出。Quick Save 保存当前编辑状态,Save & Run All 在干净会话从头运行;只有确认完整版本成功和输出符合要求,才能继续分享或按比赛规则提交。

执行流程

把阅读转成下一步动作

  1. 输入

    确认数据源与路径

    先在 Input 查看数据,再检查文件与版本。

  2. 运行

    从最小检查到完整基线

    按依赖顺序执行,记录环境、参数与验证结果。

  3. 版本

    从干净环境重跑

    核对 Save & Run All 日志与 Output,不只保存编辑画面。

本文目录

Notebook 是代码、数据与运行环境的组合

Kaggle Notebook 是在云端运行代码并组织分析的工作区。Jupyter Notebook 由代码和 Markdown 单元格组成,Script 按文件顺序执行;创建与类型选项见官方 Notebook 文档。第一次使用先完成一个能从头运行的小任务,再扩大数据与模型规模。

还没有数据时,先读数据集选择与下载;还不清楚平台对象时,先读认识 Kaggle。本文解释操作与排错,模型选择和实验改动可以继续看项目工作流。

创建 Notebook 后,先检查这四处

位置 要确认什么 最小检查
Input 已添加的数据源、文件与版本 找到本次需要的一个文件
Session options 语言、加速器、网络与环境设置 选择与本场规则和任务一致的配置
代码单元格 数据、配置、预处理与模型的依赖顺序 从第一格开始运行,不依赖旧变量
Output / 保存版本 实际生成的文件、日志与完整运行状态 确认输出存在且版本可重新执行

只阅读数据页不会自动把文件加入当前 Notebook。使用 Input 的添加入口选择允许使用的数据源,再查看实际挂载目录。代码里出现的路径必须来自本次环境,不能直接照搬他人的电脑路径。

先列路径,再读取数据

下面列出输入目录的第一层内容,帮助区分数据源名称和具体文件。找到目标文件后,用它的实际路径替换占位路径:

from pathlib import Path
import pandas as pd

input_root = Path("/kaggle/input")
print([path.name for path in input_root.iterdir()])
# 将占位路径替换为当前 Input 中真实存在的文件。
csv_path = input_root / "your-dataset" / "train.csv"
sample = pd.read_csv(csv_path, nrows=100)
print(sample.shape)
print(sample.dtypes)

输入数据通常用于读取,自己的中间结果和输出放在 /kaggle/working。若出现权限错误,不修改输入文件;从读取的数据生成新文件。网络下载、外部数据与依赖安装是否允许,仍要按本场规则和当前会话配置确认。

公开方法练习:先跑通 Pipeline,再迁移到赛题

scikit-learn 分类器比较示例由 scikit-learn developers 维护,采用 BSD-3-Clause。它使用合成数据、训练测试划分和 Pipeline 比较方法,适合理解预处理应在哪里拟合。

下面是依据这些方法组织的教学练习。先用 scikit-learn 内置的公开 Iris 数据检查运行环境,不需要下载或上传私人文件;再按下文切换到已挂载的 Kaggle Iris CSV。两条数据来源分别记录,不能因为都叫 Iris 就假定版本和行顺序相同。

完整示例使用 120 行训练、30 行留出验证,对比常数基线、有标准化的逻辑回归和不标准化的逻辑回归。预处理放在 Pipeline 内,只在训练集拟合。代码需 Pandas 与 scikit-learn;在 Kaggle 中输出到 working,在本地则输出到当前目录的 iris-output:

# iris-baseline-example
from pathlib import Path
from time import perf_counter
import pandas as pd
import sklearn
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

print("版本:", {"numpy": np.__version__, "pandas": pd.__version__,
                 "scikit-learn": sklearn.__version__})
X, y = load_iris(return_X_y=True, as_frame=True)
data_source = "scikit-learn load_iris"
# 使用挂载 CSV 时,用下一节的读取代码替换上面两行。
X_train, X_valid, y_train, y_valid = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)
models = {
    "constant": DummyClassifier(strategy="most_frequent"),
    "scaled_logistic": make_pipeline(
        StandardScaler(), LogisticRegression(max_iter=200)
    ),
    "unscaled_logistic": LogisticRegression(max_iter=200),
}
output = Path("/kaggle/working") if Path("/kaggle/working").is_dir() else Path("iris-output")
output.mkdir(parents=True, exist_ok=True)
summary = []
for name, model in models.items():
    started = perf_counter()
    model.fit(X_train, y_train)
    fit_seconds = perf_counter() - started
    started = perf_counter()
    prediction = model.predict(X_valid)
    predict_seconds = perf_counter() - started
    summary.append({
        "model": name, "accuracy": accuracy_score(y_valid, prediction),
        "fit_seconds": fit_seconds, "predict_seconds": predict_seconds,
        "train_rows": len(X_train), "valid_rows": len(X_valid),
        "data_source": data_source, "seed": 42,
    })
    pd.DataFrame({"source_row": X_valid.index, "actual": y_valid.to_numpy(),
                  "prediction": prediction}).to_csv(output / f"{name}-validation.csv", index=False)
    print(name, "混淆矩阵:", confusion_matrix(y_valid, prediction).tolist())
pd.DataFrame(summary).to_csv(output / "validation-summary.csv", index=False)
print(pd.DataFrame(summary).to_string(index=False))
print("输出:", sorted(path.name for path in output.glob("*.csv")))

切换到 Input 中的公开 Iris CSV

先完成下载与字段检查,在 Input 添加公开 uciml/iris。把以下代码放到示例的划分步骤之前,替换 load_iris 和 data_source 两行。若挂载了多个同名文件,先确认目标,避免默默读取错误版本:

paths = list(Path("/kaggle/input").rglob("Iris.csv"))
if len(paths) != 1:
    raise ValueError(f"需要确认唯一的 Iris.csv,当前找到 {len(paths)} 个")
data = pd.read_csv(paths[0])
features = ["SepalLengthCm", "SepalWidthCm", "PetalLengthCm", "PetalWidthCm"]
if not set(features + ["Species"]).issubset(data.columns):
    raise ValueError("文件字段不符,回到 Input 核对数据源和版本")
X = data[features]
y = data["Species"]
if X.isna().any().any() or y.isna().any():
    raise ValueError("存在空值,先排查,再选择处理方式")
data_source = "Kaggle uciml/iris CSV;版本请按当前 Input 记录"

运行后应该看到什么?

2026-10-02 在本地 CPU、Python 3.10.16、NumPy 1.26.4、Pandas 2.2.3、scikit-learn 1.6.0 中执行上面的内置数据分支,得到以下结果。Kaggle 云端、CLI 下载和挂载 CSV 分支没有由这次本地运行验证;其结果需在当前环境重新检查。

检查项 本次内置数据运行结果 你应该检查什么
划分 120 行训练、30 行验证,4 个特征 数据来源、行列数、标签分布与种子
常数基线 10/30 正确,accuracy 0.3333 复杂方法是否优于简单基线
标准化逻辑回归 28/30 正确,accuracy 0.9333 混淆矩阵和两条错误样本
不标准化逻辑回归 29/30 正确,accuracy 0.9667 同一验证集上只比较标准化这一条件
Output 一份 summary,三份 validation CSV summary 有三行;每份预测有 30 行且包含实际标签与预测

这里只相差一条样本,不能据此断定标准化没有价值,或用这次留出验证挑出“普遍最佳模型”。继续研究时先固定评价协议,再比较多次划分或交叉验证。CSV 是学习验证结果,不是任何比赛的 submission.csv。

完成后检查 scaled_logistic-validation.csv 中 actual != prediction 的行,说明错误涉及哪些类别。保存一份环境与数据来源记录,再进入 Save & Run All;版本界面的完整成功状态需要另行核对。希望解释一次差异,可以继续读复现实例与对照记录。

Quick Save 与 Save & Run All 怎么选

官方文档说明:Quick Save 保存编辑器当前状态,不从头执行 Notebook;Save & Run All 创建干净会话,从上到下运行完整 Notebook。探索时可以保存草稿,准备分享、形成项目记录或进入代码赛提交流程时,应检查完整运行版本。

完整版本至少确认:输入版本固定、依赖可获得、随机种子和配置记录、所有单元格成功、输出文件存在、日志没有秘密信息。编辑会话里“刚刚运行成功”和保存版本“从头运行成功”是两个检查点。

若准备参赛,按参赛检查表核对样本标识、列名、行数、输出路径与代码赛限制。运行成功仍不等于平台已经接受了一次有效提交。

常见错误,从第一条报错开始排查

现象 常见原因 检查动作
FileNotFoundError 数据没挂载、目录或大小写不同 对照 Input 和实际文件列表
NameError / 单格成功、整本失败 单元格乱序或依赖旧会话变量 重新启动,从第一格依次运行
ModuleNotFoundError 环境或依赖未声明 记录版本,按允许的方式补依赖,再完整重跑
PermissionError 试图写入输入目录 将自己的输出写入 working 目录
内存不足 / 会话超时 全量读取、大型中间数组或运行范围过大 先缩小样本、列和模型;实测耗时及内存
网络请求失败 会话设置、网络服务或比赛限制 先核对允许条件,再看错误与日志
Output 没有文件 写入路径不对或保存版本未完整执行 检查生成路径、日志和当前版本

资源配额与硬件可用性会变化,不把旧截图的 GPU 型号、运行时长或剩余额度当作当前承诺。普通电脑起步可以参考CPU 项目指南。

完成一次运行后,留下可复查记录

记录来源、数据版本、环境、配置、验证方法、输出说明和一次失败原因。希望学习他人的方案时,按公开方案复现指南区分原方法、自己的复现与新增实验。

先自行完成一次干净重跑,再决定需要讨论数据、运行环境还是验证设计。描述具体报错和最小复现步骤,比只提供“代码跑不了”更容易定位问题;公开分享前删除凭据与私人信息。

现在卡在哪一步?

选择当前进度,先看对应检查;需要讨论时,我们再确认支持范围与费用。

先按本文完成一个小任务;遇到卡点,准备公开来源和一句问题即可。

检查实际输入路径

FAQ:常见问题

Kaggle Notebook 一定要开 GPU 吗?

不需要。数据检查和小型表格基线通常可以先用 CPU;是否使用加速器取决于任务、模型与实测成本。账号可用资源和比赛限制需要在当前界面核对。

Quick Save 成功,是否说明代码可以从头运行?

不能。Quick Save 不执行完整代码;检查可复现性需要在干净会话按顺序执行,并确认日志、输出和依赖。Save & Run All 用于这种完整版本检查。

为什么单个单元格能运行,完整版本却失败?

常见原因是依赖之前交互会话中的变量、临时安装、文件或运行顺序。先从第一条错误定位,统一输入、依赖和配置,再从干净会话重跑。

输出一个 CSV 就能提交到所有比赛吗?

不能。预测文件赛、代码赛、Simulation 与 Hackathon 的提交方式不同。输出字段、执行条件、网络限制和有效状态必须按本场官方说明检查。

参考依据(官方一手资料)

涉及规则、资格、截止日期和评价方式的信息,请始终以 Kaggle 官方页面最新内容为准。

下一步

先完成干净运行,再解决具体卡点

能完整运行,就继续做一次验证与复盘;仍有报错时,联系时发送第一条错误、当前环境和已尝试的检查,确认需要的支持。省去账号凭据与私人数据,辅导范围和费用另行明确。

继续验证与复盘比赛辅导与 Review

添加微信,咨询竞赛与项目方案

先发送项目名称和一句需求,确认起步方向;需要辅导时再讨论支持内容与费用。

添加后发送:Kaggle 项目咨询

微信二维码
展开完整咨询模板(可选)