iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
AI & Data

咖狗報到-30天玩轉Kaggle競賽系列 第 9

一起來參加Kaggle競賽-提升實戰經驗9(驗證身分與資料前處理)

  • 分享至 

  • xImage
  •  

1.競賽驗證

這場比賽比較特別,它需要開啟鏡頭進行真人驗證,確保是「真人」參賽。我先完成了這個步驟,不太清楚怎麼做的,可以參考下方的圖片
競賽驗證

驗證完後成後要加入比賽,還需要完成手機號碼驗證
https://ithelp.ithome.com.tw/upload/images/20250922/20161909qTOxAFF9vN.png


2.下載資料集

之前我們學了做法 A:直接從 Kaggle 網頁下載並上傳Kaggle解壓,今天要教大家另一個做法 B —— 用 Kaggle API 下載資料集。


建立專屬這次比賽的虛擬環境

因為我平常跑 Python 的環境是在 Anaconda,所以第一步會先開啟 Anaconda Prompt,建立一個乾淨的虛擬環境:

conda create -n it2025 python=3.9 -y
conda activate it2025

建議自己指定 Python 版本,確保後續套件相容(我指定的是3.9)。

activate後會發現前面從base變成it2025,就表示虛擬環境建立&成功
activate


安裝 Kaggle CLI

在環境中安裝 Kaggle CLI 工具:

pip install kaggle

安裝完可以檢查一下:

kaggle --version

看到下圖就代表安裝成功
kaggle --version


設定 Kaggle API Token

第一次使用需要到kaggle設定 API 金鑰:

  1. Kaggle 官網 登入 → 點右上角頭像 → Setting
  2. 往下滑找到 API 區塊,點選 Create New API Token
    kaggle.json
  3. 系統會下載一個 kaggle.json 檔案
  4. 建立資料夾:
    mkdir C:\Users\自己的使用者名稱\.kaggle
    
  5. 並把 kaggle.json 放進去

小提醒:檔案一定要放在 .kaggle 資料夾底下。


使用 Kaggle API 下載資料集

進入.kaggle資料夾,使用以下指令:

cd C:\Users\user\.kaggle\

使用以下指令下載檔案:

kaggle competitions download -c jigsaw-agile-community-rules -p data\

說明:

  • -c 後面是比賽的 URL slug(網址最後一段)名稱,空格要替換成-,大寫要寫成小寫
  • -p 後面是存放資料的資料夾路徑(我自己選的是 data\

下載完成後如果是要在自己電腦本機端執行可以先解壓縮,若是要丟到colab就可以等放入colab cell再寫程式解壓縮


3.資料前處理-part one

一樣在我們的it2025虛擬環境中,先用pip下載必要套件,這次我會示範在VScode完成這次比賽

pip install -U pandas numpy scikit-learn

讀取檔案

import os
from pathlib import Path
import pandas as pd
import numpy as np 


# 讀檔
train = pd.read_csv("放自己train檔案的路徑")
test  = pd.read_csv("放自己test檔案的路徑")
submission   = pd.read_csv("放自己submission檔案的路徑")

print("train 形狀:", train.shape)
print("test  形狀:", test.shape)
print("sample_submission 欄位:", submission.columns.tolist())

# 顯示前幾筆資料
from IPython.display import display
display(train.head(3))

讀檔

檢查缺失值

首先我先針對train / test .csv 逐欄計算「缺失個數」,並各做成一張表。

import pandas as pd

def missing_table(df: pd.DataFrame, name: str):
    miss = df.isna().sum()
    out = (
         # 用DataFrame產出好讀的表格:資料集名稱 / 欄名 / 缺失個數 
         
        pd.DataFrame({
            "dataset": name,
            "column": df.columns,
            "missing_count": miss.values,
        
        })
        
        .reset_index(drop=True)
    )
    return out

mt_train = missing_table(train, "train")
mt_test  = missing_table(test,  "test")

from IPython.display import display
display(mt_train.head(20))   # train 缺失最多的前 20 欄
display(mt_test.head(20))    # test 缺失最多的前 20 欄

結果顯示train / test .csv 所有欄位的缺失率皆為 0,因此本競賽資料在欄位(column)沒有缺失值問題。

檢查欄位缺失值

這邊寫一個簡單的判斷式,進一步檢查**列(row)**缺失值,結果顯示 train 中不存在空值的情況,也就是說每一筆資料都完整無缺。


# 找出含有缺失值的列
rows_with_nan = train[train.isna().any(axis=1)]

# 若存在缺失值列,則顯示前幾筆
if not rows_with_nan.empty:
    display(rows_with_nan.head())
else:
    print("train 中沒有缺失值的列")

最後來把資料集的欄位依資料型態分成兩類:數值欄位和類別欄位。
這樣做的好處是後面在做建模時,能分別針對不同型態的欄位採取合適的方法,例如對數值欄位做標準化,對類別欄位做 One-Hot 。

# 型別分佈:數值/類別
num_cols = train.select_dtypes(include=["number"]).columns.tolist()
cat_cols = train.select_dtypes(include=["object","category","bool"]).columns.tolist()
print("數值欄:", len(num_cols), "→", num_cols[:8])
print("類別欄:", len(cat_cols), "→", cat_cols[:8])

4.小結

今天我們完成了資料前處理的第一部分:

  1. 成功讀取 train / test / submission 三個檔案
  2. 針對每個欄位與每一列檢查了缺失值,確認資料是否有缺失值
  3. 依資料型態將欄位分為數值欄與類別欄

明天我們會往資料清理與特徵工程前進,針對數值與類別欄位進行標準化、編碼等轉換,為模型訓練做更好的準備!


上一篇
一起來參加Kaggle競賽-提升實戰經驗8(新比賽-Jigsaw ‒ Agile Community Rules Classification))
下一篇
一起來參加Kaggle競賽-提升實戰經驗10(資料前處理-One-Hot Encoding、Frequency Encoding 、Target Encoding)
系列文
咖狗報到-30天玩轉Kaggle競賽10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言