iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
AI & Data

從0開始的MLFLOW應用搭建系列 第 4

Day 04 – 自動化 EDA + 資料清理

  • 分享至 

  • xImage
  •  

🎯 背景與目標說明

昨天(Day 3),我們已經成功從 Kaggle 抓下 Anime Recommendations Database 的兩個主要檔案:

  • anime.csv:動畫資訊(名稱、類型、描述等)
  • rating.csv:使用者對動畫的評分

今天的任務是:

  1. 自動化 EDA (Exploratory Data Analysis):快速理解資料結構、分佈與缺失值。
  2. 資料清理:處理缺失值與不合理數據,確保後續建模順利。

我們會使用 ydata-profiling(前身 pandas-profiling)自動產生 EDA 報告,並把處理後的資料存回 data/ 目錄。這些乾淨資料將成為後續訓練推薦系統的基礎。


⚙️ 詳細步驟與程式碼範例

我們會在 notebooks/day4_eda_cleaning.ipynb 中操作。

1. 載入套件與資料

import os
import pandas as pd
from ydata_profiling import ProfileReport

DATA_DIR = "/usr/mlflow/data"

anime = pd.read_csv(os.path.join(DATA_DIR, "anime.csv"))
ratings = pd.read_csv(os.path.join(DATA_DIR, "rating.csv"))

print(anime.head())
print(ratings.head())

2. 自動化 EDA

ydata-profiling 產生一份互動式 HTML 報告。

# Anime 資料檔 EDA
anime_report = ProfileReport(anime, title="Anime Dataset Report", explorative=True)
anime_report.to_file(os.path.join(DATA_DIR, "anime_eda_report.html"))

# Ratings 資料檔 EDA
ratings_report = ProfileReport(ratings, title="Ratings Dataset Report", explorative=True)
ratings_report.to_file(os.path.join(DATA_DIR, "ratings_eda_report.html"))

這樣會輸出兩份報告,可以直接在瀏覽器中打開:

  • /usr/mlflow/data/anime_eda_report.html
  • /usr/mlflow/data/ratings_eda_report.html

在html裡面我們可以初步看到資料的分布與相關性,
以下是我初步的觀察:

  • rating 平均是6.47,看起來評分會相較於5分高一些,會員們算是友善XD
    https://ithelp.ithome.com.tw/upload/images/20250915/20178626ZXCinmLXg0.png

  • rating跟type沒有線性相關證據,看起來type並不影響動漫在會員心中的好感,是真粉呀!
    https://ithelp.ithome.com.tw/upload/images/20250915/20178626POHrPySEVd.png

3. 資料清理

根據報告,anime.csvrating.csv 會有以下問題:

  • rating.csv 中有部分評分是 -1(代表使用者看過但未評分)。
  • anime.csv 內可能有缺少 genretype 的動畫。

我們先做最基本的清理:

  1. 移除 -1 評分紀錄。
  2. 缺失值補上 "Unknown"
# 移除無效評分
ratings_clean = ratings[ratings["rating"] != -1]

# 填補缺失值
anime_clean = anime.fillna({
    "genre": "Unknown",
    "type": "Unknown"
})

# 確認結果
print(ratings.shape, "->", ratings_clean.shape)
print(anime.isnull().sum())

4. 輸出乾淨版本

把清理後的資料存成新的檔案,方便後續模型使用。

anime_clean.to_csv(os.path.join(DATA_DIR, "anime_clean.csv"), index=False)
ratings_clean.to_csv(os.path.join(DATA_DIR, "ratings_clean.csv"), index=False)

📊 流程圖

原始 anime.csv / rating.csv
        │
        ▼
   自動化 EDA 報告
        │
        ▼
   檢查缺失與異常值
        │
        ▼
     清理與補值
        │
        ▼
輸出乾淨 anime_clean.csv / ratings_clean.csv


✅ 重點總結

  • 使用 ydata-profiling 可快速產生互動式 EDA 報告,幫助發現缺失值與異常資料。
  • 我們針對 rating = -1 的無效數據進行過濾,並補齊 anime.csv 的缺失值。
  • 清理後的檔案 anime_clean.csvratings_clean.csv 將會是 Day 5 建立 Baseline 推薦模型 的基礎。

🔮 延伸思考(預告)

Day 5,我們會正式建立 第一個推薦模型(User-based Collaborative Filtering),並用 MLflow 紀錄模型參數與評估指標!


上一篇
Day 03 – 從 Kaggle 抓動畫資料
下一篇
Day 05 – 建立 Baseline 推薦模型(User-based Collaborative Filtering )
系列文
從0開始的MLFLOW應用搭建5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言