iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
AI/ ML & Data

征服機器學習的終極秘技系列 第 21

Day 21 - 應用實作練習:資料探勘

  • 分享至 

  • xImage
  •  

前言

在進行任何機器學習或數據分析專案時,拿到數據的那一刻起,就決定了後續工作的基礎。資料探勘(Data Mining)是深入理解數據、發現潛在模式和異常的重要過程。今天,我們將通過實際操作,逐步展示拿到數據後應該如何進行初步處理和分析。

1) 觀察數據 csv 檔案,數據如下圖

https://ithelp.ithome.com.tw/upload/images/20240919/201681165N7ICE8mPL.jpg

初步肉眼觀察:
我們要解決的問題是觀察數據以預測檢測結果。因此,output 是數據中最後一欄的檢測結果 ( Test Results)

  • 數量: 55500 筆,足以拿來訓練
  • 數據類型: 有分類型 (string)、數值型 (int/float)、日期型態 (date)
  • 數據相關性: 病患名字、醫生名字、醫院名稱與病患的檢測結果沒有相關性,不會因為名字的差異而影響檢查結果,通常收案會提供是為了方便回朔,以免後續發現有異常值出現時,追朔不回去是哪位病人/醫生/醫院。住院房間號不一定與檢測結果有相關性,或許同樣嚴重的病患會放在同一間或同一區病房,但有時候可能只是因為有空房就被排入,因此這個參數要與收案人員討論相關性,並在做數據清理時要特別注意。
  • 數據合理性: 年齡介於 13~89 歲之間、血型類別都是常見類別、其餘類別都很單一,無特殊異常,皆在合理範圍。唯獨帳單金額有些為負數,而大部份數據都是以千或萬為單位,少數是十位數,有異常現象,因此需要與收案人員確認是否人為輸入錯誤或有特殊原因造成。
  • 標註準確性及一致性: 類別分類有分三種,但我們題目期望只分兩類,有時候不確定性的結果會影響模型判斷。但各位也可以嘗試看看三類別分類喔~目前 output 分類看起來無特殊異常,也先假設 output 都由同一醫療體系判定的標準去標註,因此都符合一致性。

2) EDA

接下來,我們要開始用程式碼詳細觀察人為不一定觀察到的部分。我們會需要 pandas library 進行 csv 的讀取。在資料探勘部分,筆者平常習慣將所有統計分布資料、資料視覺化、參數之間的關係、異常值、缺失值、重複值都包在一起並下載成 html 檔。筆者使用 google colab 來撰寫,程式碼如下:

Import Libraries

!pip install catboost wandb ydata_profiling 
# remove warnings 
import warnings 
warnings.filterwarnings('ignore') 
# standard imports and setup 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 
import seaborn as sns 
from scipy import stats 
# 引入檔案操作相關套件 
import os 
import pickle 
import joblib 
from datetime import datetime 
from ydata_profiling import ProfileReport 
# 引入機器學習相關套件 
import xgboost as xgb 
import lightgbm as lgb 
from xgboost import XGBClassifier 
from lightgbm import LGBMClassifier 
from catboost import Pool, CatBoostClassifier 
from sklearn.model_selection import train_test_split, GridSearchCV, KFold, StratifiedKFold 
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier 
from sklearn.linear_model import LinearRegression 
from sklearn.tree import DecisionTreeClassifier 
from sklearn.compose import ColumnTransformer 
from sklearn.preprocessing import LabelEncoder, MinMaxScaler, StandardScaler, OneHotEncoder, PolynomialFeatures, KBinsDiscretizer 
from sklearn.impute import SimpleImputer 
from sklearn.impute import SimpleImputer 
from sklearn.feature_selection import SelectKBest, SelectPercentile, SelectFpr, SelectFdr, SelectFwe, GenericUnivariateSelect 
from sklearn.feature_selection import RFE, RFECV, SelectFromModel 
from sklearn.linear_model import LogisticRegression 
from sklearn.pipeline import Pipeline 
# 引入其他工具 
import gc 
import wandb 
import random 
import multiprocessing as mp 
# 引入日誌相關套件 
from logging import getLogger, INFO, FileHandler,  Formatter,  StreamHandler

上傳 csv 檔案

from google.colab import files 
uploaded = files.upload() 
import io

以上步驟請記得上傳已下載的資料檔案

讀取檔案及下載 html 報告

health_data = pd.read_csv('healthcare_dataset.csv')
profile = ProfileReport(health_data)
# 將報告儲存為HTML
profile.to_file(output_file="healthcare_analysis_report.html")
#下載報告
files.download('healthcare_analysis_report.html')

下載檔案後,可以透過 HTML 報告全面了解數據的整體狀況。該報告不僅顯示了數據的分佈情況,還能與介面互動,探索不同參數之間的關聯性。報告中的警示(alerts)會標示出可能存在的問題,如分佈不均、全為常數、重複值、缺失值以及高度不平衡的類別等。在視覺化分析部分,若點陣圖(scatter plot)中出現明顯偏離主要數據群的點,則可初步判斷為異常值。此外,報告還會列出每個參數的統計描述,供進一步分析使用。由於 HTML 報告內容豐富,這裡僅展示部分關鍵資訊。我們鼓勵讀者嘗試使用上述程式碼,將自己收集的數據載入並進行分析,這樣可以更深入地體驗數據處理和分析的過程。

https://ithelp.ithome.com.tw/upload/images/20240922/20168116VKcHJfbaF3.png
https://ithelp.ithome.com.tw/upload/images/20240922/20168116a67C1gORME.pnghttps://ithelp.ithome.com.tw/upload/images/20240922/20168116Abnaqek73e.pnghttps://ithelp.ithome.com.tw/upload/images/20240922/20168116x50GImNvLc.png

結論

在進行任何機器學習或數據分析項目時,第一步就是深入了解手中的數據。在這篇文章中,我們通過觀察和初步分析數據,為後續的模型建構奠定了基礎。我們確定了數據集的規模、類型和潛在的問題,如異常值、缺失值等,並評估了數據的合理性及標註的準確性和一致性。接下來,我們將進一步探討如何處理這些觀察到的數據問題,進行必要的數據清理與處理,確保最終的模型能夠提供準確且可靠的預測結果。


上一篇
Day 20 - 應用實作練習:問題定義與數據收集
下一篇
Day 22 - 應用實作練習:數據清理
系列文
征服機器學習的終極秘技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言