Python

數據科學初探:用 pandas、matplotlib、scikit-learn 讀懂 AI 寫的分析程式

pandas 負責讀取與清洗資料,matplotlib 把結果畫成圖表,scikit-learn 用幾行程式碼就能訓練一個預測模型。這三個套件是 AI 數據分析專案最常見的組合,你不需要精通統計,但要能讀懂 AI 寫出來的程式,並看出過擬合、資料洩漏這類讓結果失真卻不會報錯的問題。
數據科學初探:用 pandas、matplotlib、scikit-learn 讀懂 AI 寫的分析程式

數據科學初探:用 pandas、matplotlib、scikit-learn 讀懂 AI 寫的分析程式

九成的 AI Vibe Coding 案子都是從「幫我分析這份資料」開始的。pandasmatplotlibscikit-learn 是這類任務背後最常出現的三個套件,AI 會很樂意幫你把程式寫出來,但你要能讀懂它在做什麼,才有辦法指揮 AI 修改、擴充,甚至在它犯錯的時候抓出來。

這篇文章會依序帶你看過三個套件各自負責什麼、資料清洗為什麼是你的責任而不是 AI 的,最後用三道遞進題(讀懂、改寫、抓錯)練習你剛學到的東西,其中「抓錯」那一題專門練習數據科學裡最難發現的問題:程式能跑、圖表能畫、模型能訓練,但結果是假的。

你將學到什麼

pandas 資料整理

讀取、篩選、分組統計,把 CSV 變成能分析的表格。

資料清洗

缺失值、重複列、型別錯誤,AI 拿到髒資料只會給出錯誤的結論。

matplotlib 視覺化

長條圖、折線圖、直方圖,三種最常用的圖表怎麼畫。

scikit-learn 入門機器學習

幾行程式碼訓練一個預測模型,讀懂 fit、predict、score。

抓出資料洩漏與過擬合

程式能跑、圖表能畫、模型能訓練,但結果可能是假的。

為什麼 Vibe Coder 需要懂數據科學基礎

四個理由
  • 資料分析是最常見的 AI 專案:九成的 AI Vibe Coding 案子都從「幫我分析這份資料」開始,你要能讀懂 pandas 的基本操作。
  • 視覺化讓分析有說服力:matplotlib 把數字變成圖表,讓非技術背景的人也能理解分析結果。
  • scikit-learn 讓機器學習不再神秘:用幾行程式碼訓練一個預測模型,你不需要懂數學,但要能讀懂 AI 給的 sklearn 程式。
  • 讀懂完整的數據分析專案:學完這篇,你就有能力讀懂完整的 AI 數據分析專案,並精準指揮 AI 修改和擴充。
三個套件,三種能力

pandas:讀資料、清洗、篩選、統計,資料整理師。
matplotlib:折線圖、長條圖、散佈圖,視覺化說故事者。
scikit-learn:訓練模型、評估、預測,機器學習入門。

原始資料pandas清理、整理資料matplotlib畫成圖表scikit-learn訓練模型三個套件,三種能力,一條分析流程整理資料、看懂資料、預測資料,各司其職
資料科學三件套的分工:pandas 整理、matplotlib 視覺化、scikit-learn 建模。

10-1 pandas:資料整理的瑞士刀

pandas 是數據分析的標準工具(pip install pandas)。核心資料結構是 DataFrame,你可以把它想成「Python 裡的 Excel 工作表」。

import pandas as pd

# 讀取 CSV
df = pd.read_csv("scores.csv", encoding="utf-8")

# 查看資料
df.head(5)          # 前五行
df.shape            # (行數,欄位數)
df.dtypes           # 每欄的資料型別
df.describe()       # 統計摘要(mean、std、min、max)

# 篩選
passed = df[df["score"] >= 60]
alice  = df[df["name"] == "Alice"]

# 選取欄位
names  = df["name"]              # 單欄(Series)
subset = df[["name", "score"]]   # 多欄(DataFrame)

# 排序
df_sorted = df.sort_values("score", ascending=False)

# 分組統計
df.groupby("class")["score"].mean()   # 各班平均分

# 新增計算欄位(用英文代碼避免中文字面值,正式專案常見做法)
df["grade"] = df["score"].apply(
    lambda x: "A" if x >= 90 else ("B" if x >= 60 else "C")
)  # 90 分以上為 A;60 到 89 分為 B;其餘為 C

資料清洗:分析前的必要步驟

真實資料幾乎都有缺失值、重複列、型別錯誤。AI 拿到髒資料會給出錯誤的分析,清洗是你的責任,不是 AI 的。

# 查看缺失值
df.isnull().sum()           # 每欄的缺失數量

# 處理缺失值
df.dropna()                 # 刪除含缺失值的列
df.fillna(0)                # 填入預設值
df["score"].fillna(df["score"].mean())  # 填入平均值

# 處理重複列
df.duplicated().sum()        # 重複列數量
df.drop_duplicates()         # 刪除重複列

# 型別轉換
df["score"] = df["score"].astype(int)
df["date"]  = pd.to_datetime(df["date"])
df["name"]  = df["name"].str.strip()     # 去空白

# 輸出
df.to_csv("cleaned.csv", index=False, encoding="utf-8")
df.to_json("report.json", force_ascii=False, indent=2)
給 AI 的資料清洗提示詞

「請對這個 DataFrame 進行清洗:①列出每欄的缺失值數量和建議處理方式;②刪除重複列;③確認每欄型別正確;④去除字串欄位前後空白;⑤輸出清洗報告(清洗前後各欄的 unique 數量)。」

10-2 matplotlib:把資料畫成圖

matplotlib 是 Python 最基礎的視覺化套件(pip install matplotlib),AI 產出的數據分析程式幾乎都用它。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Arial Unicode MS'  # 中文字型

scores = [75, 82, 91, 68, 95, 77]
names  = ["Alice", "Bob", "Carol", "Dave", "Eve", "Frank"]

# 長條圖
plt.figure(figsize=(8, 4))
plt.bar(names, scores, color="steelblue")
plt.title(" 學生成績分佈"); plt.ylabel(" 分數")
plt.savefig("bar.png", dpi=150, bbox_inches="tight")
plt.close()

# 折線圖
months = ["1月", "2月", "3月"]
sales  = [100, 130, 115]
plt.plot(months, sales, marker="o", color="tomato")
plt.title(" 月銷售量"); plt.savefig("line.png", dpi=150)
plt.close()

# 直方圖(分佈)
plt.hist(scores, bins=5, color="mediumseagreen")
plt.title(" 成績分佈直方圖"); plt.savefig("hist.png", dpi=150)
plt.close()
Vibe Coder 觀察重點

看到 AI 產出 matplotlib 程式,確認三件事:①有 plt.close()(不關閉會造成記憶體洩漏);②有設中文字型(否則中文顯示為方框);③用 savefig 而不是 plt.show()(伺服器環境沒有視窗)。

10-3 scikit-learn:五行程式碼入門機器學習

scikit-learn(pip install scikit-learn)提供統一 API:fit() 訓練、predict() 預測、score() 評估。不需要懂數學,但要能讀懂 AI 寫的 sklearn 程式。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
import pandas as pd

# 準備資料
df = pd.read_csv("students.csv")
X = df[["study_hours", "attendance"]]  # 特徵(input)
y = df["passed"]                         # 標籤(output:0 或 1)

# 切分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 訓練模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 預測並評估
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f" 準確率:{acc:.2%}")
print(classification_report(y_test, y_pred))
Vibe Coder 觀察重點:train_test_split

test_size=0.2 留 20% 資料做測試,random_state=42 讓每次分割結果相同(可重現)。看到 AI 沒有切分訓練集和測試集,模型評估的準確率就是假的。

三道遞進題:讀懂、改寫、抓錯

三種能力,三種練法

讀懂:追蹤完整數據分析流程;改寫:從分析到視覺化再到模型,串成完整流程;抓錯:資料洩漏、過擬合、型別錯誤。

題目一 讀懂(基礎)

說明以下程式的每個步驟在做什麼:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("sales.csv")
df["date"] = pd.to_datetime(df["date"])
df = df.dropna(subset=["revenue"])

monthly = df.groupby(
    df["date"].dt.to_period("M")
)["revenue"].sum().reset_index()
monthly.columns = ["month", "total"]

plt.figure(figsize=(10, 4))
plt.plot(monthly["month"].astype(str), monthly["total"])
plt.xticks(rotation=45)
plt.title(" 月營收趨勢")
plt.tight_layout()
plt.savefig("revenue.png", dpi=150)
plt.close()

任務:逐步說明 to_period("M")groupbyxticks(rotation=45) 的作用。

答案拆解
  1. to_period("M") 把 datetime 轉成月份期間(如 2026-01),讓 groupby 按月分組而非按日分組。
  2. groupby(月份)["revenue"].sum() 計算每月的 revenue 總和,reset_index() 把分組 key 變成普通欄位。
  3. xticks(rotation=45) 讓 X 軸標籤旋轉 45 度,防止月份文字重疊;tight_layout() 自動調整邊距避免標籤被截斷。

題目二 改寫(進階)

Vibe Coder 的數據流程思維

好的數據分析程式有清晰的流程結構:載入、清洗、分析、視覺化、輸出,每個步驟是獨立函式。這樣 AI 才能精準修改某一步,不會動到其他部分。

請 AI 把以下分析程式重構為流程化架構:

import pandas as pd, matplotlib.pyplot as plt

df = pd.read_csv("students.csv")
df = df.dropna()
df = df[df["score"] >= 0]
avg = df.groupby("class")["score"].mean()
plt.bar(avg.index, avg.values)
plt.savefig("result.png")
plt.close()
給 AI 的提示詞

「請把這段程式重構為流程化架構,拆成四個函式:load_data(回傳 DataFrame)、clean_data(清洗後回傳 DataFrame)、analyze(回傳分析結果 dict)、visualize(接收結果,輸出圖表)。每個函式加 docstring 和中文註解,main 函式串接四步驟。」

答案拆解
  1. 流程化結構讓每個步驟可以獨立測試。例如 clean_data 可以單獨測試清洗邏輯,不需要跑整個流程。
  2. analyze 回傳 dict 而非直接畫圖,讓分析結果可以被其他函式(如 visualize、export)重複使用。
  3. main 函式用 if __name__ == "__main__" 包住,可以 import 這個模組的函式而不自動執行分析。

題目三 抓錯(高階)

數據科學的錯誤最難發現:程式能跑、圖表能畫、模型能訓練,但結果是假的。找出以下機器學習程式的所有問題:

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

df = pd.read_csv("data.csv")
X = df.drop("label", axis=1)
y = df["label"]

model = LogisticRegression()
model.fit(X, y)                           # 問題一

y_pred = model.predict(X)                 # 問題二
print(f" 準確率:{accuracy_score(y, y_pred)}")  # 問題三

df2 = pd.read_csv("new_data.csv")
df2["score"] = df2["score"].fillna(df2["score"].mean())  # 問題四

任務:找出四個問題,說明危險原因。

答案拆解:四個問題

問題一:沒有切分訓練集和測試集,直接用全部資料訓練。模型可能「死背」訓練資料(過擬合),對新資料效果差。應用 train_test_split()

問題二:用訓練集(X)做預測,這是資料洩漏(Data Leakage)。模型評估必須用它沒見過的測試集(X_test)。

問題三:訓練集準確率接近 100% 不代表模型好,代表它把訓練資料背起來了。必須評估 y_test 和 y_pred(測試集)。

問題四:用 new_data 的平均值填補缺失值,實際部署應用訓練集的平均值,不能用新資料計算,這也是一種資料洩漏。

術語速查表

術語說明
pandas / DataFramePython 資料分析套件;DataFrame 是二維表格資料結構,類似 Excel 工作表。
df.head(n)顯示前 n 列(預設 5),快速查看資料內容。
df.describe()數值欄的統計摘要:count、mean、std、min、25%、50%、75%、max。
df.isnull().sum()各欄缺失值(NaN)的數量,清洗前必查。
df.groupby(col)依指定欄分組,後接聚合函式如 .mean().sum().count()
df.apply(func)對每列(或每欄)套用函式,常搭配 lambda 建立計算欄位。
matplotlib.pyplotPython 基礎視覺化套件,plt.bar()plt.plot()plt.hist() 是最常用的三種。
plt.savefig()儲存圖表到檔案,伺服器環境比 plt.show() 更常用,之後必加 plt.close()
scikit-learnPython 機器學習套件,統一 API:fit() 訓練、predict() 預測、score() 評估。
train_test_split()切分訓練集(訓練模型用)和測試集(評估模型用),防止用訓練資料評估造成過度樂觀。
過擬合(Overfitting)模型把訓練資料「背起來」,訓練準確率高但對新資料效果差。切分測試集可以偵測。
資料洩漏(Data Leakage)測試集資訊不應出現在訓練過程中(包含填補缺失值的統計量),否則評估結果不可信。

重點整理與完成清單

完成這篇之後,你現在能做什麼

讀懂有資料庫、API、安全防護、合規設計的中型 Python 專案;指揮 AI 建立完整數據分析流程;精準識別安全漏洞並要求修正。

完成清單

  • 能用 pandas 讀取、清洗、篩選、分組統計資料
  • 能用 matplotlib 畫長條圖、折線圖、直方圖
  • 能讀懂 sklearn 的 fit / predict / score 流程
  • 知道訓練集和測試集的差異,能識別資料洩漏
  • 完成作業題目一:說明 to_period、groupby、xticks 的作用
  • 完成作業題目二:請 AI 重構為流程化架構
  • 完成作業題目三:找出過擬合、資料洩漏四個問題

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

不懂統計也能學數據科學嗎?
可以。這篇文章的目標不是精通統計,而是讀懂 AI 寫出的 pandas、matplotlib、scikit-learn 程式,並能指揮 AI 修改與抓錯。
為什麼資料清洗比模型訓練更重要?
真實資料幾乎都有缺失值、重複列、型別錯誤。AI 拿到髒資料一樣能跑出結果,但結論是錯的,清洗是使用者的責任,不是 AI 的。
什麼是過擬合?
模型把訓練資料背起來,訓練準確率很高,但碰到新資料表現卻很差。切分訓練集和測試集可以偵測這個問題。
什麼是資料洩漏?
測試集的資訊不小心被用在訓練過程中,例如用全部資料的平均值去填補缺失值,會讓模型評估的準確率看起來比實際更好。
學完這篇之後可以做什麼?
能讀懂含有資料庫、API、安全防護的中型 Python 專案,指揮 AI 建立完整的數據分析流程,並精準抓出資料品質與模型評估的問題。