Pandas 生態系統在 Python 資料科學領域中扮演著重要的角色,提供豐富的工具和函式庫,簡化資料處理、分析和建模的流程。本篇文章將著重於 Pandas 與其他相關套件的整合應用,包含使用 scikit-learn 進行線性迴歸、運用 XGBoost 進行分類別任務,以及如何結合 DuckDB 進行資料函式庫操作。這些技術的整合應用能大幅提升資料分析的效率和模型訓練的效能,對於資料科學家和機器學習工程師而言至關重要。

探索性資料分析

往往你會獲得一些你對其知之甚少的資料集。在這本文中我們展示了手動篩選資料的一些方法;但也有許多工具可以幫助自動化潛在繁瑣任務並幫助你更快地理解資料。

YData Profiling

YData Profiling 自稱為「領先的資料檔案包」,能自動標準化生成詳細報告以及統計資料和視覺化圖表。儘管我們在視覺化章節中展示了手動探索資料的一些方式;但此工具可作為快速生成多種有用報告和特性的一種方式。

讓我們再看一下之前提到過的車輛資料集。目前我們只選擇了一小部分欄位來保持 YData Profiling 的最低需求;對於大型資料集而言效能通常會下降:

df = pd.read_csv(
    "data/vehicles.csv.zip",
    dtype_backend="numpy_nullable",
    usecols=[
        "id",
        "engId",
        "make",
        "model",
        "cylinders",
        "city08",
        "highway08",
        "year",
        "trany",
    ]
)
print(df.head())

內容解密:

此段程式碼從壓縮檔案載入車輛資料集並選擇指定欄位以進行簡單分析;因為完整處理可能會造成效能下降所以選擇部分欄位進行範例操作;最後列印前五筆資料進行展示。

在此圖示中展示了 YData Profiling 生成的一些典型報告:統計量、缺失值分佈、類別分佈、相關性矩陣等。

內容解密:

此圖示展示了 YData Profiling 生成的一些典型報告:統計量、缺失值分佈、類別分佈、相關性矩陣等。這些報告能夠幫助使用者快速瞭解資料集的基本特徵和潛在問題。

YData Profiling:深度資料分析報告生成

在資料科學的實務中,快速且全面地瞭解資料結構與特性是至關重要的。YData Profiling 是一個強大的工具,能夠幫助我們輕鬆生成詳細的資料包告,讓我們能夠迅速掌握資料的基本情況。玄貓將帶領大家瞭解如何使用 YData Profiling 來生成資料分析報告,並探討其在實務中的應用。

為何需要 YData Profiling?

在開始進行深度資料分析之前,瞭解資料的基本情況是非常重要的。YData Profiling 可以幫助我們生成包含許多常見視覺化圖表的報告,這些圖表能夠描述我們在 DataFrame 中的各個欄位。無論是連續型還是類別型資料,YData Profiling 都能提供豐富的視覺化效果,讓我們能夠更直觀地理解資料。

YData Profiling 的使用方法

YData Profiling 的使用非常簡單。以下是使用 YData Profiling 生成資料包告的步驟:

from ydata_profiling import ProfileReport

# 假設 df 是我們的 DataFrame
profile = ProfileReport(df, title="Vehicles Profile Report")

如果我們是在 Jupyter Notebook 中執行這段程式碼,可以直接在 Notebook 中檢視報告:

profile.to_widgets()

如果不是在 Jupyter Notebook 中執行,可以將報告匯出為本地 HTML 檔案:

profile.to_file("vehicles_profile.html")

報告內容解析

高層次概述

在檢視報告時,第一個部分是高層次概述,這部分會列出缺失資料的單元格數量、重複行的數量等基本資訊。這些資訊能夠幫助我們快速瞭解資料的基本狀況。

欄位詳細分析

接下來,每個欄位都會被詳細分析。對於連續型資料,YData Profiling 會自動生成直方圖:

此圖示

內容解密:

此圖示說明瞭對於連續型資料,YData Profiling 會自動生成直方圖以展示其分佈情況。直方圖能夠幫助我們快速瞭解資料的分佈範圍和集中趨勢。

對於類別型資料,YData Profiling 則會生成詞雲圖:

此圖示

內容解密:

此圖示說明瞭對於類別型資料,YData Profiling 會自動生成詞雲圖以展示各類別出現頻率。詞雲圖能夠讓我們直觀地瞭解哪些類別在資料中佔比較大。

此外,YData Profiling 還會生成相關性熱圖,幫助我們瞭解不同連續型變數之間的相關性:

此圖示

內容解密:

此圖示說明瞭 YData Profiling 的相關性熱圖功能。熱圖透過顏色深淺來展示不同變數之間的相關性強度,讓我們能夠快速找出潛在的相關關係。

資料驗證:確保資料品質

「垃圾進、垃圾出」這句話在資料科學中非常重要。無論程式碼多麼優秀,如果開始時就使用了低品質的資料,最終得到的分析結果也將是低品質的。常見的問題包括意外缺失值、重複值以及模型實體之間的破損關係等。

幸運的是,有許多工具可以幫助我們自動化地驗證輸入和輸出到模型中的資料,從而確保工作結果的可信度。其中一個強大的工具就是 Great Expectations。

Great Expectations 的應用

Great Expectations 是一個開源工具,旨在幫助我們管理和驗證資料品質。以下是如何使用 Great Expectations 的基本步驟:

import great_expectations as gx
context = gx.get_context()

首先,我們需要建立一個上下文(context),這是 Great Expectations 的核心概念之一。接著,我們可以新增一個資料來源和資料資產:

datasource = context.data_sources.add_pandas(name="pandas_datasource")
data_asset = datasource.add_dataframe_asset(name="vehicles")

然後,我們可以定義一個批次(batch),這裡假設我們使用的是 pandas DataFrame:

batch_definition_name = "dataframe_definition"
batch_definition = data_asset.add_batch_definition_whole_dataframe(batch_definition_name)
batch = batch_definition.get_batch(batch_parameters={"dataframe": df})

這樣我們就可以開始對資料進行驗證了。例如,確保某一欄位不包含任何空值:

city_exp = gx.expectations.ExpectColumnValuesToNotBeNull(column="city08")
result = batch.validate(city_exp)
print(result)

如果應用於其他欄位時失敗了呢?例如,「cylinders」欄位可能包含空值:

cylinders_exp = gx.expectations.ExpectColumnValuesToNotBeNull(column="cylinders")
result = batch.validate(cylinders_exp)
print(result)

視覺化與資料科學應用

在資料分析與資料科學領域,視覺化和機器學習工具是不可或缺的。無論是透過視覺化來更好地理解資料,還是利用機器學習模型來預測未來趨勢,這些工具都能夠顯著提升分析效率和準確性。以下,玄貓將帶領大家探討如何利用視覺化工具和機器學習函式庫來增強資料分析能力。

視覺化工具的選擇

在視覺化工具的選擇上,Python 提供了多種選項,從簡單的靜態圖表到互動式的動態圖表。其中,Plotly 和 PyGWalker 是兩個非常強大且易於使用的工具。

Plotly

Plotly 是一個廣受歡迎的視覺化函式庫,特別適合在 Jupyter Notebook 中使用。它能夠生成具有高度互動性的圖表,讓使用者可以透過滑鼠滑動、放大等操作來探索資料。

import pandas as pd
import plotly.express as px

# 讀取資料集
df = pd.read_csv(
    "data/vehicles.csv.zip",
    dtype_backend="numpy_nullable",
    dtype={
        "rangeA": pd.StringDtype(),
        "mfrCode": pd.StringDtype(),
        "c240Dscr": pd.StringDtype(),
        "c240bDscr": pd.StringDtype()
    }
)

# 使用 Plotly 生成散點圖
fig = px.scatter(df, x="city08", y="highway08",
                 hover_data={"make": True, "model": True, "year": True})
fig.show()

內容解密:

這段程式碼展示瞭如何使用 Plotly 生成互動式散點圖。首先,我們從 CSV 檔案中讀取資料集,並指定特定欄位的資料型別。接著,我們使用 plotly.express 模組中的 scatter 函式來生成散點圖,並透過 hover_data 引數新增滑鼠懸停時顯示的資料欄位。最後,使用 fig.show() 函式顯示圖表。

PyGWalker

如果你希望有一個更加自由的資料探索工具,PyGWalker 是一個不錯的選擇。它允許使用者透過拖曳操作來生成各種圖表,非常適合快速原型設計和資料探索。

import pygwalker as pyg

# 使用 PyGWalker 生成互動式資料探索工具
pyg.walk(df)

內容解密:

這段程式碼展示瞭如何使用 PyGWalker 生成互動式資料探索工具。首先,我們匯入 pygwalker 模組,然後呼叫 pyg.walk() 函式並傳入資料框。這將在 Jupyter Notebook 中開啟一個互動式介面,允許使用者透過拖曳操作來生成各種圖表。

資料科學與機器學習

在資料科學領域,機器學習是一個非常重要的分支。scikit-learn 是一個廣受歡迎的機器學習函式庫,提供了豐富的演算法和工具來進行資料預測和分類別。

scikit-learn

scikit-learn 提供了多種機器學習演算法,從迴歸到分類別再到聚類別。以下是一個簡單的線性迴歸範例,展示瞭如何利用 scikit-learn 進行預測。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pandas as pd

# 讀取資料集
df = pd.read_csv(
    "data/vehicles.csv.zip",
    dtype_backend="numpy_nullable",
    dtype={
        "rangeA": pd.StringDtype(),
        "mfrCode": pd.StringDtype(),
        "c240Dscr": pd.StringDtype(),
        "c240bDscr": pd.StringDtype()
    }
)

# 選擇數值型欄位並移除缺失值
num_df = df.select_dtypes(include=["number"])
num_df = num_df.drop(columns=["cylinders", "displ"]).dropna()

# 分割特徵和目標變數
target_col = "comb08"
X = num_df.drop(columns=[target_col])
y = num_df[target_col]

# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 建立並訓練線性迴歸模型
model = LinearRegression()
model.fit(X_train, y_train)

# 進行預測
predictions = model.predict(X_test)

內容解密:

這段程式碼展示瞭如何使用 scikit-learn 進行線性迴歸預測。首先,我們從 CSV 檔案中讀取資料集並選擇數值型欄位。接著,我們移除缺失值並將資料分割為特徵(X)和目標變數(y)。然後,我們將資料分割為訓練集和測試集。最後,我們建立並訓練線性迴歸模型,並在測試集上進行預測。

線性迴歸模型工作流程

內容解密:

此圖示展示了線性迴歸模型的工作流程。從讀取資料集開始,經過選擇數值型欄位、移除缺失值、分割特徵和目標變數、分割訓練集和測試集、建立並訓練模型,最後進行預測。

未來趨勢與應用評估

在未來,隨著資料科學技術的不斷發展,視覺化工具和機器學習函式庫將會變得更加強大和易於使用。這些工具不僅能夠幫助我們更好地理解資料,還能夠自動化許多繁瑣的工作流程。對於企業來說,這意味著能夠更快速地做出決策並提高營運效率。

此外,隨著人工智慧技術的進步,未來可能會有更多根據深度學習的視覺化和預測工具出現。這些工具將能夠處理更加複雜的資料結構和關係,提供更加準確的預測結果。

分析與預測的強大工具:Pandas 生態系統

在現代資料分析與機器學習領域,Pandas 是不可或缺的工具之一。透過 Pandas 及其生態系統,我們可以輕鬆地處理資料、進行分析,甚至是建立預測模型。以下我們將探討如何利用 Pandas 和其他相關函式庫來進行線性迴歸、XGBoost 分類別,以及與資料函式庫的整合。

線性迴歸分析

線性迴歸是一種基本但強大的機器學習技術,能夠幫助我們理解變數之間的關係。以下是使用 scikit-learn 進行線性迴歸分析的具體步驟。

from sklearn import linear_model
from sklearn.metrics import mean_squared_error

# 假設 X_train, y_train, X_test, y_test 已經準備好
regr = linear_model.LinearRegression()
regr.fit(X_train, y_train)
y_pred = regr.predict(X_test)

內容解密:

  1. 資料準備:首先,我們需要確保訓練資料(X_train, y_train)和測試資料(X_test, y_test)已經準備好。
  2. 模型訓練:使用 LinearRegression 建立一個線性迴歸模型,並使用 fit 方法對其進行訓練。
  3. 預測:對測試資料進行預測,得到預測值 y_pred
  4. 評估模型:透過計算均方誤差(Mean Squared Error)來評估模型的準確性。
mean_squared_error(y_test, y_pred)

這裡我們使用了均方誤差來衡量模型的預測誤差,該值越小表示模型的預測精確度越高。這只是評估模型精確度的一種方法,還有很多其他方法可以選擇。

XGBoost 分類別分析

XGBoost 是一個根據梯度提升的機器學習函式庫,具有極高的效能和擴充套件能力。以下是如何使用 XGBoost 進行分類別任務的具體步驟。

import pandas as pd
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier

# 假設 df 已經是我們的資料框架
brands = {"Dodge", "Toyota", "Volvo", "BMW", "Buick", "Audi", "Volkswagen", "Subaru"}
df2 = df[df["make"].isin(brands)]
df2 = df2.drop(columns=["cylinders", "displ"])

X = df2.select_dtypes(include=["number"])
y = df2["make"].astype(pd.CategoricalDtype())

X_train, X_test, y_train, y_test = train_test_split(X, y.cat.codes)
bst = XGBClassifier()
bst.fit(X_train, y_train)
preds = bst.predict(X_test)

內容解密:

  1. 資料篩選:我們首先從原始資料中篩選出特定品牌的車輛資料。
  2. 特徵與標籤:將資料分為特徵(X)和標籤(y),並將標籤轉換為類別型別。
  3. 資料拆分:使用 train_test_split 函式將資料拆分為訓練集和測試集。
  4. 模型訓練與預測:建立 XGBoost 分類別器並進行訓練,最後對測試集進行預測。
accuracy = (preds == y_test).sum() / len(y_test)
print(f"Model prediction accuracy is: {accuracy:.2%}")

這裡我們計算了預測準確率,並將其列印預出來。這只是基本的評估方法,實際應用中可以根據需求選擇更多的評估指標。

資料函式庫整合:DuckDB

DuckDB 是一個輕量級的資料函式庫系統,適合用於分析工作負載。它能夠與 Pandas 無縫整合,提供強大的查詢功能。以下是如何使用 DuckDB 進行查詢操作。

import pandas as pd
import duckdb

# 假設 df 已經是我們的資料框架
df = pd.read_csv("data/vehicles.csv.zip", dtype_backend="numpy_nullable",
                 dtype={"rangeA": pd.StringDtype(), "mfrCode": pd.StringDtype(),
                        "c240Dscr": pd.StringDtype(), "c240bDscr": pd.StringDtype()})

duckdb.sql("CREATE TABLE vehicles AS SELECT * FROM df")
result = duckdb.sql("SELECT COUNT(*) FROM vehicles WHERE make = 'Honda'").df()

內容解密:

  1. 資料載入:首先從 CSV 檔案中載入資料,並指定特定欄位的資料型別。
  2. 建立資料表:使用 DuckDB 建立一個名為 vehicles 的資料表。
  3. 查詢操作:執行 SQL 查詢以計算特定品牌車輛的數量。
  4. 結果轉換:將查詢結果轉換為 Pandas 的 DataFrame 格式。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Pandas 生態系統應用:資料分析與機器學習實踐

package "機器學習流程" {
    package "資料處理" {
        component [資料收集] as collect
        component [資料清洗] as clean
        component [特徵工程] as feature
    }

    package "模型訓練" {
        component [模型選擇] as select
        component [超參數調優] as tune
        component [交叉驗證] as cv
    }

    package "評估部署" {
        component [模型評估] as eval
        component [模型部署] as deploy
        component [監控維護] as monitor
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

此圖示展示瞭如何利用 DuckDB 與 Pandas 整合來進行資料查詢和處理。透過這樣的流程,我們可以輕鬆地在資料框架和資料函式庫之間轉換資料。

摘要

在本文中,我們探討瞭如何利用 Pandas 生態系統進行線性迴歸分析、XGBoost 分類別分析以及資料函式庫整合。透過這些工具和技術,我們可以更高效地處理和分析資料。希望這些實際案例和技術洞察能夠幫助你在日常工作中更加得心應手。