Chuyển đến nội dung chính

第 3 課:Python/Pandas 機器學習速成課程

DataFrame、過濾、groupby、合併、基本缺失資料處理以及不熟悉 Python 資料的人員的快速 EDA。

🧠 人工智慧與機器學習 — 第 2 課 第 3 課:Python/Pandas 機器學習速成課程

機器學習:從基礎到高級

第 0 部分:新手入門(第 0 週)

亞洲開發網

簡介

您不需要成為 Python 專家才能學習 ML,但您必須熟悉表格資料。本文是一門“速成課程”,重點關注 ML 中最需要的內容:讀取資料、過濾、轉換、檢查遺失的資料以及創建簡單的特徵。

課程目標

  • 使用 Pandas 讀取和探索數據
  • 在訓練模型之前執行最常見的操作
  • 知道何時使用筆記本以及何時將程式碼分開到單獨的文件中

1. 你會經常使用的兩個函式庫

NumPy

用於數組算術和向量化運算。

熊貓

用於表格資料(DataFrame)。

在大多數基本的 ML 專案中,您在 Pandas 上花費的時間比在模型上花費的時間更多。

2. 建立第一個 DataFrame

import pandas as pd

df = pd.DataFrame({
    'dien_tich': [45, 60, 80, 120],
    'so_phong': [1, 2, 3, 4],
    'gia': [1.2, 1.8, 2.6, 4.1]
})

print(df)

結果是一個包含行和列的表格。在機器學習中:

  • 每行通常是一個觀察結果
  • 每列都是一個功能或目標

3. 5 個需要立即記住的 Pandas 動作

快速查看數據

df.head()
df.shape
df.columns
df.info()
df.describe()

選擇列

df['dien_tich']
df[['dien_tich', 'so_phong']]

過濾流

df[df['so_phong'] >= 2]

建立新列

df['gia_m2'] = df['gia'] / df['dien_tich']

安排

df.sort_values('gia', ascending=False)

4. 從 CSV 讀取數據

df = pd.read_csv('data/raw/houses.csv')

讀取資料後的第一件事應該始終是:

print(df.head())
print(df.shape)
print(df.isnull().sum())

目標是回答三個問題:

  1. 資料有多少行和列?
  2. 哪一列缺少資料?
  3. 哪一列是數字,哪一列是文字?

5. 什麼是缺失值?

缺失值是缺失的資料單元格。例如,客戶沒有申報年齡,或系統沒有記錄某個欄位。

檢查:

df.isnull().sum()

基本處理:

  • 如果缺少太多行/列,則跳過
  • 填寫平均數、中位數或眾數
  • 添加了標誌 is_missing

例如:

df['tuoi'] = df['tuoi'].fillna(df['tuoi'].median())

6. 分類變數

許多非數字列,例如:

  • 城市
  • 服務包類型
  • 性別

機器學習模型通常不能直接處理純文本,因此需要轉換。最基本的方式是one-hot編碼。

pd.get_dummies(df, columns=['thanh_pho'], drop_first=True)

7. Groupby 與聚合

這是理解數據和創建特徵的非常強大的技能。

df.groupby('thanh_pho')['gia'].mean()
df.groupby('loai_khach')['doanh_thu'].agg(['mean', 'count'])

應用範例:

  • 按客戶群劃分的平均收入
  • 按城市劃分的購買數量
  • 按服務包劃分的流失率

8. 合併數據

實際上,數據很少駐留在單一表中。

customers = pd.read_csv('customers.csv')
orders = pd.read_csv('orders.csv')

df = customers.merge(orders, on='customer_id', how='left')

重要規則:合併後,始終檢查行號和新產生的空值。

9. 基本特徵工程

特徵工程正在創建額外的列來幫助模型更好地學習。

例如:

  • gia_m2 = gia / dien_tich
  • thoi_gian_su_dung = ngay_hien_tai - ngay_dang_ky
  • tong_chi_tieu_30_ngay

好的特徵通常來自對問題的理解,而不是來自模型技巧。

10. 筆記本還是腳本?

在下列情況下使用筆記本:

  • 探索數據
  • 繪製圖表
  • 快速嘗試想法

在下列情況下使用腳本/模組:

  • 程式碼重複多次
  • 需要重複使用
  • 希望管道清潔且易於維護

實用原則:

  • 筆記本探索
  • src/ 產生程式碼

簡短範例:第一個 EDA

import pandas as pd

df = pd.read_csv('data/raw/customers.csv')

print(df.head())
print(df.shape)
print(df.isnull().sum())
print(df['plan'].value_counts())

df['monthly_spend'] = df['total_spend'] / df['months_active']
print(df[['monthly_spend', 'churn']].head())

練習練習

1.讀取任意CSV檔案並運行 head, info, describe。 2. 根據原始資料建立至少 2 個新特徵。 3. 寫 3 個句子來描述您從 EDA 中學到的知識。

常見錯誤

  • 在不理解該列含義的情況下編輯資料。
  • 使用未來的資訊創建特徵。
  • 合併完成但未檢查行號。

完成標準

  • 可以將 CSV 讀入 DataFrame
  • 可以執行基本的篩選、分組和合併
  • 為問題創造一個新的有意義的特徵