แผนการเรียนรู้
/

ปฏิบัติการสารสนเทศด้านสุขภาพ

สัปดาห์ที่ ๑: บทนำสู่สารสนเทศสุขภาพและการเตรียมข้อมูล

อาจารย์ผู้สอน

ดร.วิชิต สมบัติ

หมวดวิชาเฉพาะ (วิชาบังคับ) | หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์

สารสนเทศสุขภาพคืออะไร?

สารสนเทศสุขภาพ (Health Informatics) คือศาสตร์และการปฏิบัติงานที่เกี่ยวข้องกับการจัดการข้อมูลสุขภาพเพื่อให้เกิดข้อมูลและสารสนเทศที่มีความหมาย (Data plus Meaning) โดยมีเทคโนโลยีทำหน้าที่สนับสนุนเพื่อช่วยในการตัดสินใจทางการแพทย์อย่างรอบคอบ

หัวใจสำคัญ

  • ไม่ใช่แค่เรื่องคอมพิวเตอร์:

    นิยามโดย Greenes & Shortliffe (1990) ชี้ว่าศาสตร์นี้เน้นกระบวนการคิดทางปัญญา การประมวลผลข้อมูล และงานด้านการสื่อสาร

  • เน้นข้อมูลที่มีความหมาย:

    ให้ความสำคัญกับการนำสถิติและข้อมูลดิบมาสกัดความหมายเพื่อปรับปรุงการรักษารายบุคคล

  • การยกระดับผลสัมฤทธิ์:

    มุ่งใช้ข้อมูลเพื่อปรับปรุงระบบดูแลสุขภาพ งานสาธารณสุข และขับเคลื่อนงานวิจัยชีวการแพทย์ระดับสูง

สัปดาห์ที่ 1: ความรู้เบื้องต้น

ความเข้าใจด้านพฤติกรรมและองค์กร

ระบบสารสนเทศสุขภาพที่มีประสิทธิภาพจำต้องคำนึงถึง พฤติกรรมมนุษย์และบริบทขององค์กร (Human and Organization Behavior) เสมอ เนื่องจากบุคลากรการดูแลสุขภาพเป็นแกนหลักในการใช้งานจริงระดับปฏิบัติงาน

องค์ประกอบที่ต้องวิเคราะห์

  • ปฏิสัมพันธ์กับเทคโนโลยี:

    ศึกษาพฤติกรรมความพร้อมและอุปสรรคในการใช้งานระบบคอมพิวเตอร์ของแพทย์และพยาบาล

  • ปัจจัยขับเคลื่อนทางจิตวิทยา:

    สิ่งที่ส่งผลต่อประสิทธิภาพการรับเอาและยอมรับระบบสารสนเทศในสภาพแวดล้อมทางคลินิก

  • การนำนวัตกรรมมาประยุกต์ใช้:

    การพิจารณาความสอดคล้องกับพฤติกรรมในองค์กรเพื่อเพิ่มความร่วมมือในการทำงาน

สัปดาห์ที่ 1: พฤติกรรมมนุษย์และองค์กร

หลักการ Informed & Assisted

หัวใจหลักของปฏิบัติการสารสนเทศสุขภาพคือการบูรณาการระบบเพื่อสร้างความรอบรู้ (Informed) และการช่วยเหลือ (Assisted) ในระบบรักษาพยาบาล

แกนแนวคิดสองด้าน

  • Informed (ข้อมูลที่พร้อมใช้):

    การจัดสรรข้อมูลสุขภาพที่ถูกต้องให้กับผู้ใช้ในเวลาที่เหมาะสมและในรูปแบบที่เป็นประโยชน์
    ตัวอย่าง: แพทย์เห็นประวัติแพ้ยาและประวัติยาเดิมของผู้ป่วยทันทีก่อนการสั่งใช้ยาเพื่อป้องกันความผิดพลาด

  • Assisted (ระบบคอยช่วยเหลือ):

    การนำเทคโนโลยีมาช่วยทุ่นแรงหรือลดความเสี่ยงในการดำเนินงาน
    ตัวอย่าง: แอปพลิเคชันบนมือถือที่คอยแจ้งเตือนผู้ป่วยให้รับประทานยาตามนัดเพื่อเพิ่มอัตราการปฏิบัติตามแผนการรักษา

สัปดาห์ที่ 1: วงจรชีวิตข้อมูลทางคลินิก

ขอบเขตของสารสนเทศสุขภาพ

ทิศทางการทำงานด้านสารสนเทศสุขภาพครอบคลุมตั้งแต่ระดับรายบุคคล กลุ่มประชากร ไปจนถึงระบบสาธารณสุขขนาดใหญ่

ขอบเขตหลัก (Scopes)

  • Clinical Informatics:

    นำข้อมูลมาสนับสนุนเครื่องมือวินิจฉัย การรักษาพยาบาล และระบบคัดกรองผู้ป่วยของแพทย์ (เช่น ระบบเวชระเบียนอิเล็กทรอนิกส์ EHRs, ระบบสั่งการรักษาโดยแพทย์ CPOE, และระบบตัดสินใจทางคลินิก CDSS )

  • Public Health Informatics:

    การวิเคราะห์ข้อมูลระบาดวิทยาเพื่อติดตามการแพร่ระบาด และการเฝ้าระวังโรคภัยคุกคามในระดับประชากร

  • Consumer Health Informatics:

    การสนับสนุนสารสนเทศแก่ตัวผู้ป่วยโดยตรงเพื่อให้เข้าใจและรักษาสุขภาพของตนเอง เช่น ประวัติสุขภาพส่วนบุคคล PHRs และอุปกรณ์สวมใส่

สัปดาห์ที่ 1: ขอบเขตและอาชีพ

แรงขับเคลื่อนและประโยชน์ของระบบ

องค์การอนามัยโลก (WHO) ชี้ว่าระบบข้อมูลสุขภาพที่ถูกต้องและทันท่วงที คือหัวใจสำคัญของการวางนโยบายและโปรแกรมการดูแลสุขภาพให้มีประสิทธิภาพสูงสุด

ประโยชน์หลักทางคลินิกและเชิงระบบ

  • เพิ่มประสิทธิภาพองค์กร (Efficiency):

    ลดภาระงานเอกสารและลดระยะเวลารอตรวจของคนไข้ (เช่น ระบบการจองคิวนัดหมายและเตือนอัตโนมัติ )

  • ยกระดับคุณภาพและความปลอดภัย (Quality & Safety):

    ตรวจวินิจฉัยโรคได้รวดเร็วและแม่นยำยิ่งขึ้น (เช่น การนำโมเดล AI มาร่วมคัดกรองและวิเคราะห์ภาพถ่ายเอกซเรย์เพื่อตรวจหาโรคมะเร็งในระยะเริ่มต้น )

สัปดาห์ที่ 1: ประโยชน์ของเทคโนโลยีสุขภาพ

ปัญหาทั่วไปในการประยุกต์ใช้ข้อมูล

แม้จะมีเทคโนโลยีที่ก้าวหน้า แต่ในเชิงปฏิบัติจริงยังมีปัญหาความล้มเหลวที่มักพบบ่อยครั้งในการเตรียมและจัดการข้อมูลสุขภาพ

อุปสรรคสำคัญ

  • การใช้งานข้อมูลไม่เพียงพอ (Insufficient Usage):

    แม้จะมีการรวบรวมข้อมูลดิบจำนวนมหาศาลจากเซ็นเซอร์หรือเฝ้าระวังโรค แต่ข้อมูลกลับถูกกองทิ้งไว้โดยไม่นำมาวิเคราะห์หาข้อมูลเชิงลึก

  • คุณภาพข้อมูลไม่ดีพอ (Inadequate Quality):

    ปัญหาระดับบันทึกข้อมูล หากการป้อนข้อมูลระเบียนสุขภาพล่าช้า มีจุดบกพร่อง หรือกรอกข้อมูลผิดพลาด คุณภาพของผลลัพธ์การวิเคราะห์และการตัดสินใจก็จะถูกลดทอนลงทันที (Garbage In, Garbage Out)

สัปดาห์ที่ 1: ข้อควรระวังและทิศทางการเตรียมข้อมูล

เริ่มต้นจัดเตรียมเครื่องมือพัฒนาโปรแกรม

ในการจัดการข้อมูลสุขภาพ ปัญหาหลักคือการติดตั้งโปรแกรมและไลบรารีเวอร์ชันที่ไม่ตรงกัน
เราจะเปลี่ยนมาใช้ Modern Developer Toolchain ที่มีประสิทธิภาพสูง รวดเร็ว และล็อกเวอร์ชันเพื่อป้องกันความเสียหายเชิงระบบ

เครื่องมือที่เราจะใช้ติดตั้ง

  • Scoop:

    ระบบติดตั้งแพ็กเกจ Command Line สำหรับ Windows ช่วยเลี่ยงการรันไฟล์ติดตั้ง .exe แบบเดิมๆ

  • uv:

    เครื่องมือจัดการโปรเจกต์ Python ยุคใหม่ (Rust-based) ที่ทำงานรวดเร็วและสร้างสภาพแวดล้อมจำลอง (Virtual Environment) ได้ในตัว

  • JupyterLab & pandas:

    สภาพแวดล้อมและไลบรารีหลักสำหรับการจัดเตรียมและวิเคราะห์ข้อมูลตารางผู้ป่วยในวิชานี้

สัปดาห์ที่ 1: ขั้นตอนการเตรียมระบบ

ขั้นตอนที่ 1: ติดตั้ง Scoop ผ่าน PowerShell

เปิดโปรแกรม Windows PowerShell เพื่อทำการตั้งค่าระบบและติดตั้งตัวจัดการแพ็กเกจ Scoop

1. เปิดสิทธิ์การรันสคริปต์บน Windows:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

2. ดาวน์โหลดและติดตั้ง Scoop:

irm get.scoop.sh | iex
💡 ข้อแนะนำ: เมื่อติดตั้งเสร็จ ให้พิมพ์คำสั่ง scoop --version เพื่อทดสอบความถูกต้อง
สัปดาห์ที่ 1: การติดตั้ง Scoop

ขั้นตอนที่ 2: ติดตั้ง Git และ uv ผ่าน Scoop

เราจะทำการติดตั้ง Git เพื่อใช้ดาวน์โหลดข้อมูล และติดตั้ง uv สำหรับควบคุมเวอร์ชันของ Python โครงงาน

สั่งงานผ่าน PowerShell:

scoop install git uv

ทำไมต้องใช้ git?

เพื่อใช้ในการเรียกดูและดาวน์โหลดไฟล์ชุดข้อมูลทางการแพทย์สาธารณะและ template งานปฏิบัติการต่าง ๆ ได้สะดวก

ทำไมต้องใช้ uv?

เพราะ uv ทำงานเร็วกว่า pip/conda ถึง 10-100 เท่า และจัดการติดตั้งเวอร์ชัน Python ให้เหมาะสมกับสเปคเครื่องออฟไลน์โดยอัตโนมัติ

สัปดาห์ที่ 1: ติดตั้ง Git และ uv

ขั้นตอนที่ 3: สร้างและเปิดโปรเจกต์ด้วย uv init

การสร้างสภาพแวดล้อมที่สะอาดและเป็นระบบ เพื่อแยกชุดข้อมูลและไลบรารีออกจากตัวเครื่องคอมพิวเตอร์หลัก

สร้างโฟลเดอร์โครงงานและเปิดใช้งาน:

# 1. ย้ายตำแหน่งการทำงานไปที่ไดรฟ์ D:
D:

# 2. สร้างและเข้าไปยังไดเรกทอรีโครงการ
mkdir health-informatics
cd health-informatics

# 3. เริ่มต้นระบบโครงงาน Python ด้วย uv
uv init

📦 ไฟล์ที่ระบบจะสร้างขึ้นให้อัตโนมัติ:

  • pyproject.toml — ไฟล์สำหรับกำหนดค่าการตั้งค่าโครงงาน
  • main.py — ไฟล์ Python ตัวอย่างสำหรับการทดสอบระบบรันโค้ด
สัปดาห์ที่ 1: การเตรียมโครงสร้างไดเรกทอรี

ขั้นตอนที่ 4: ติดตั้ง JupyterLab และ pandas

ทำการระบุตัวแปรเพื่อดาวน์โหลดและติดตั้งเครื่องมือแก้ไขรหัสคำสั่ง (JupyterLab) และไลบรารีจัดการข้อมูลผู้ป่วย (pandas) ลงในโครงการ

รันคำสั่งในไดเรกทอรีโครงงาน:

uv add jupyterlab pandas faker

🔒 ความปลอดภัยและความยั่งยืนของข้อมูล (Reproducibility):

คำสั่ง uv add จะสร้างไฟล์ uv.lock ขึ้นมา เพื่อทำหน้าที่ล็อกเวอร์ชันของแพ็กเกจให้เหมือนกันสำหรับนักศึกษาทุกคน ทำให้เมื่อนำโปรเจกต์นี้ไปรันที่เครื่องอื่นหรือส่งอาจารย์ผู้สอน โค้ดที่เขียนจะยังคงรันได้ปกติโดยไม่มีปัญหาเรื่องเวอร์ชันชนกัน

สัปดาห์ที่ 1: จัดการ Dependencies ของ Python

ขั้นตอนที่ 5: เริ่มใช้งาน Jupyter Lab

เปิดสภาพแวดล้อมการเขียนโปรแกรมและการทำ Pre-processing ข้อมูลสุขภาพเพื่อเตรียมการฝึกปฏิบัติการประจำสัปดาห์

รันคำสั่งเพื่อเปิดสภาพแวดล้อม:

uv run jupyter lab

🚀 สิ่งที่จะเกิดขึ้นถัดไป:

  • เบราว์เซอร์ของเครื่องจะเปิดขึ้นมาที่ที่อยู่ http://localhost:8888 โดยอัตโนมัติ
  • ไดเรกทอรีซ้ายมือจะแสดงไฟล์ main.py และไฟล์อื่น ๆ ของโครงการ
  • นักศึกษาสามารถสร้างไฟล์ Notebook ใหม่ (.ipynb) และเริ่มต้นเขียนโปรแกรมวิเคราะห์ไฟล์ CSV/JSON เพื่อเริ่มงาน Homework 1 ได้ทันที!
สัปดาห์ที่ 1: เปิดใช้งาน Jupyter Lab

ความหลากหลายของข้อมูลสุขภาพ

ในระบบสารสนเทศสุขภาพเชิงคลินิก ข้อมูลมีทั้งแบบตารางที่มีโครงสร้างชัดเจน และแบบกึ่งมีโครงสร้างที่ยืดหยุ่นสูง

📊 1. รูปแบบ CSV

เป็นข้อมูลตาราง (Tabular format) จัดเก็บแถวและคอลัมน์ชัดเจน เช่น ข้อมูลผลตรวจแล็บ สัญญาณชีพ หรือประวัติผู้ป่วยพื้นฐาน

ตัวอย่าง: MIMIC-IV Clinical Tables

📦 2. รูปแบบ JSON

เป็นข้อมูลกึ่งมีโครงสร้าง (Semi-structured) ในรูปแบบคู่กุญแจ-มูลค่า (Key-Value) เหมาะกับการซ้อนข้อมูลซับซ้อนและการส่งข้ามระบบ

ตัวอย่าง: มาตรฐาน HL7 FHIR Resources
สัปดาห์ที่ 1: โครงสร้างข้อมูลสุขภาพ

การอ่านและจัดการไฟล์ CSV ด้วย pandas

เครื่องมือที่สำคัญที่สุดในการจัดการข้อมูลแบบตารางขนาดใหญ่ใน Python คือไลบรารี pandas

💻 ชุดคำสั่งตรวจสอบและเรียกดูข้อมูล:

import pandas as pd

# 1. โหลดข้อมูลผู้ป่วยจากไฟล์ CSV
df = pd.read_csv('patients_data.csv')

# 2. ตรวจสอบมิติข้อมูล (แถว, คอลัมน์) และหัวตาราง
print(f"ขนาดชุดข้อมูล: {df.shape}")
df.head(5) # แสดงข้อมูล 5 แถวแรก

🔍 สิ่งที่นักศึกษาต้องสังเกต:

  • df.shape แสดงโครงสร้างข้อมูลในรูป (จำนวนผู้ป่วย, จำนวนตัวแปรตรวจวัด)
  • df.dtypes ช่วยวิเคราะห์ประเภทตัวแปรว่ามีลักษณะเป็นตัวเลขหรือตัวอักษร
สัปดาห์ที่ 1: pandas สำหรับจัดการข้อมูลสุขภาพ

การจัดการระเบียนข้อมูลผู้ป่วยแบบ JSON

ระเบียนสุขภาพดิจิทัลสมัยใหม่ เช่น มาตรฐาน HL7 FHIR มักเก็บในรูปแบบ JSON ที่มีโครงสร้างซ้อนกัน

💻 การเขียนรหัส Python เพื่อเข้าถึงค่าแบบระบุ Key:

import json

# 1. โหลดไฟล์ JSON ของเวชระเบียนผู้ป่วย
with open('patient_fhir_demo.json', 'r') as file:
    record = json.load(file)

# 2. การสืบค้นข้อมูลเชิงลึกในโครงสร้าง Dictionary แบบซ้อน (Nested Key)
patient_name = record['resource']['name']['given']
birth_date = record['resource']['birthDate']

print(f"ผู้ป่วย: {patient_name} | วันเกิด: {birth_date}")

💡 คำอธิบายเชิงระบบ:

การเข้าถึงข้อมูล JSON จำเป็นต้องอาศัยการเขียนโปรแกรมเชิงโครงสร้างดิกชันนารี (Dictionary Map) เพื่อไล่เรียงหาตำแหน่งตัวแปรที่แท้จริง

สัปดาห์ที่ 1: สารสนเทศแบบกึ่งโครงสร้าง

การคลี่โครงสร้าง JSON เพื่อวิเคราะห์แบบกลุ่ม

ในการวิเคราะห์ผู้ป่วยทั้งกลุ่ม (Cohort Analysis) เราจำต้องแปลงโครงสร้างซ้อนของ JSON ให้กลายเป็นตารางแบนราบเพื่อการคำนวณที่ง่ายขึ้น

💻 ชุดคำสั่งทำความสะอาดโครงสร้างซับซ้อน (Flattening):

# แปลงโครงสร้างแบบซ้อน (Nested JSON) ให้เป็นตารางแบนเรียบง่ายแบบอัตโนมัติ
df_patients = pd.json_normalize(
    record, 
    record_path=['entry'], 
    meta=['id', 'resourceType']
)
df_patients.head()

ฟังก์ชัน pd.json_normalize จะช่วยลดเวลาในการเขียนโค้ดสกัดกิ่งข้อมูลซับซ้อนออกเป็นตารางสถิติกลุ่มในทันที

สัปดาห์ที่ 1: เทคนิคเตรียมข้อมูลสากล

ข้อควรระวังในการจัดการข้อมูลสุขภาพขนาดใหญ่

ข้อมูลทางการแพทย์และจีโนมิกส์มีขนาดที่เติบโตแบบก้าวกระโดด เราต้องเรียนรู้วิธีบริหารจัดการทรัพยากรหน่วยความจำอย่างคุ้มค่า

🚫 ข้อห้ามและทางเลือกที่ดีกว่าในการเขียนโค้ด

  • หลีกเลี่ยงการโหลดไฟล์สื่อดิบ (Raw Media Array):

    ไม่โหลดข้อมูลรูปภาพ (DICOM) หรือสัญญาณชีพขนาดใหญ่เข้ามาเก็บในตาราง DataFrame โดยตรงเพื่อความปลอดภัยของระบบ

  • การใช้พิกัดตำแหน่งไฟล์ (File Paths Pointer):

    ควรใช้วิธีจัดเก็บค่าระบุตำแหน่งไฟล์พิกัดและ deterministic path แทนการฝังไฟล์แบบออฟไลน์ (เทียบเคียงโครงสร้างท่อส่งข้อมูลสากลของ MIMIC-IV)

  • คัดกรองข้อมูลเฉพาะส่วนที่สำคัญ (Selective Filtering):

    ดึงข้อมูลเฉพาะคอลัมน์และช่วงระยะเวลาที่จำเป็นเพื่อความประหยัดของหน่วยประมวลผล (RAM)

สัปดาห์ที่ 1: การจัดการและบำรุงรักษาทรัพยากรคอมพิวเตอร์

ธรรมชาติของข้อมูลสุขภาพและการทำความสะอาด

ชุดข้อมูลสุขภาพในโลกความเป็นจริงมักมี "สัญญาณรบกวน" (Real-world noise) เช่น การพิมพ์ผิด ช่องข้อมูลว่าง หรือค่าที่บันทึกผิดพลาดทางชีววิทยา ซึ่งอาจทำให้แบบจำลอง AI ทางการแพทย์ทำงานผิดพลาดและส่งผลกระทบต่อความปลอดภัยของคนไข้

⚠️ 1. ค่าสูญหาย (Missing Values)

เกิดจากกระบวนการตรวจรักษาที่ไม่ได้ทำกับผู้ป่วยทุกคน หรือข้อผิดพลาดในการดึงและจัดเก็บข้อมูล ส่งผลให้ข้อมูลขาดความสมบูรณ์ (Incompleteness)

🚫 2. ค่าผิดปกติ (Outliers)

ข้อมูลที่มีค่าสูงหรือต่ำผิดปกติเกินกว่าค่าทางสรีรวิทยาของมนุษย์ หรือการบันทึกเครื่องมือแพทย์ที่ผิดพลาด ซึ่งจำเป็นต้องคัดกรองและกำจัดออกก่อนนำไปวิเคราะห์ต่อ

สัปดาห์ที่ 1: คุณภาพและความน่าเชื่อถือของข้อมูล

คำสั่งตรวจสอบและจัดการค่าสูญหาย (Null/NaN)

เราใช้ไลบรารี pandas ในการระบุปริมาณข้อมูลที่ว่าง และใช้กลวิธีแก้ไขจุดบกพร่องตามระดับความสำคัญ

💻 คำสั่งจัดการค่าสูญหายใน Jupyter Notebook:

# 1. นับจำนวนค่าว่างในแต่ละคอลัมน์ของข้อมูลผู้ป่วย
print(df.isnull().sum())

# 2. การคัดทิ้ง (Drop) แถวที่ไม่มีข้อมูลแล็บสำคัญ เช่น 'HbA1c_level'
df_cleaned = df.dropna(subset=['HbA1c_level'])

# 3. การแทนค่าว่าง (Imputation) ด้วยค่าเฉลี่ยสถิติของกลุ่มคนไข้
mean_bp = df['systolic_bp'].mean()
df['systolic_bp'] = df['systolic_bp'].fillna(mean_bp)

💡 ข้อตระหนักเชิงระบบ: การคัดทิ้งข้อมูล (dropna) อาจทำให้เสียขนาดตัวอย่างวิจัย ในขณะที่การแทนค่าด้วยค่าเฉลี่ย (fillna) ช่วยคงขนาดกลุ่มผู้ป่วยไว้ได้ แต่ต้องพิจารณาไม่ให้ขัดต่อหลักสถิติระบาดวิทยา

สัปดาห์ที่ 1: pandas Imputation Techniques

การตรวจจับค่าผิดปกติ (Outliers) ทางสรีรวิทยา

การทำความสะอาดทางคลินิก ต้องอาศัยหลักการ Validity Checks (การตรวจสอบความสมเหตุสมผล) และสรีรวิทยาพื้นฐานร่วมด้วย

💻 คำสั่งกำจัดค่าที่ขัดแย้งทางสรีรวิทยาและสถิติ:

# 1. การลบข้อมูลอายุที่ติดลบ (ความผิดพลาดทางอายุ) หรือลบคนไข้ที่อายุ > 89 เพื่อจำกัดความเสี่ยง re-identification 
df = df[(df['Age'] >= 0) & (df['Age'] <= 89)]

# 2. การตัดค่าสถิตินอกช่วงเปอร์เซ็นไทล์ (Outlier Thresholding) 
# ลบแถวที่คอลัมน์ข้อมูลความดันสูงเกินเปอร์เซ็นไทล์ที่ 99 (อาจเกิดจากสัญญานหลุด) 
threshold_bp = df['systolic_bp'].quantile(0.99)
df = df[df['systolic_bp'] <= threshold_bp]

🔬 ตัวอย่าง Validity Check: ผู้ป่วยไม่สามารถมีอายุติดลบได้ หรือ วันที่ให้ผู้ป่วยออกจากจากโรงพยาบาล (Discharge Date) ต้องไม่เป็นวันก่อนวันที่รับผู้ป่วยเข้าโรงพยาบาล (Admission Date) เด็ดขาด

สัปดาห์ที่ 1: การลบข้อมูล Physiologically Implausible

การกรองข้อมูลผู้ป่วย (Boolean Indexing)

ทักษะสกัดกลุ่มผู้ป่วยเฉพาะโรคหรือกลุ่มที่มีความเสี่ยงสูง (Prioritizing patients at risk) เพื่อวินิจฉัยและวางแนวทางรักษารายบุคคล

💻 คำสั่งคัดกรองกลุ่มเป้าหมาย (Cohort Extraction):

# 1. กรองเฉพาะผู้ป่วยเบาหวานสูงอายุที่มีความเสี่ยงสะสม (Age > 60 ปี และมีระดับน้ำตาล HbA1c > 7.0 %) 
high_risk_diabetic = df[
    (df['Age'] > 60) & 
    (df['HbA1c_level'] > 7.0)
]

print(f"จำนวนผู้ป่วยกลุ่มเสี่ยงสูงสุด: {high_risk_diabetic.shape} ราย")
high_risk_diabetic.head()

ตัวแปรประเภท Boolean Array ทำหน้าที่เสมือนหน้าต่างคัดกรอง (Mask) ซึ่งกรองหาแถวที่มีเงื่อนไขเป็น True ขึ้นมาเป็นตารางใหม่สำหรับดำเนินงานต่อในทันที

สัปดาห์ที่ 1: เทคนิคคัดกรองกลุ่มคนไข้เป้าหมาย

การปรับเปลี่ยนประเภทข้อมูล (Type Conversion)

ในขั้นตอนวิเคราะห์ข้อมูลสุขภาพ ความผิดพลาดมักเกิดจากการระบุชนิดข้อมูลคอลัมน์ไม่ตรงกับลักษณะแท้จริงของค่าที่บันทึก

💻 คำสั่งจัดแจงชนิดข้อมูลให้ถูกต้อง:

# 1. ตรวจสอบชนิดข้อมูลของ DataFrame
print(df.dtypes)

# 2. แปลงอายุจากทศนิยมให้เป็นจำนวนเต็มเพื่อการวิเคราะห์ทางสถิติ (Discrete Variable) 
df['Age'] = df['Age'].astype(int)

# 3. แปลงคอลัมน์วันที่สมัครจากการเป็น 'ตัวหนังสือ (object)' ไปเป็น 'วันเวลา (Datetime)'
df['admission_date'] = pd.to_datetime(df['admission_date'])
print(df['admission_date'].dtypes) # แสดงผลเป็น datetime64[ns]

💡 ความสำคัญของ Datetime: หากเราไม่แปลงประเภทวันที่เป็น Datetime ก่อน ตัวแปรนั้นจะทำหน้าที่เพียงตัวหนังสือ (String) ทำให้เราไม่สามารถนำวันที่ไปคำนวณหามิติทางเวลาหรือนำไปหาช่วงเวลารักษา (Length of Stay) ได้อย่างถูกต้อง

สัปดาห์ที่ 1: การเปลี่ยนชนิดคอลัมน์ด้วย pandas

ความจำเป็นในการบันทึกข้อมูลระหว่างทาง

ในกระบวนการทำงานข้อมูลสุขภาพ (Health Data Lifecycle) เมื่อเราจัดการเตรียมและทำความสะอาดข้อมูลดิบแล้ว
การบันทึกสถานะของชุดข้อมูลที่สะอาด (Cleaned Intermediate State) เป็นขั้นตอนที่สำคัญมากทางวิทยาการข้อมูล

💡 เหตุผลเชิงระบบและแนวปฏิบัติที่ดี:

  • ประหยัดทรัพยากรระบบ (Computational Efficiency):

    ป้องกันการรันโปรเซสทำความสะอาดข้อมูลขนาดใหญ่ที่ซับซ้อนซ้ำหลายรอบ ช่วยลดภาระหน่วยประมวลผล (RAM)

  • ความยืดหยุ่นในการพัฒนาโปรแกรม (Modularity):
  • การควบคุมความปลอดภัย (Security & Audit):
สัปดาห์ที่ 1: วงจรชีวิตข้อมูลสารสนเทศสุขภาพ

ชุดคำสั่งการส่งออกข้อมูลตารางด้วย pandas

เมื่อทำความสะอาดข้อมูลเสร็จแล้ว เราจะใช้ฟังก์ชันดั้งเดิมของ pandas บันทึกตารางกลับไปเป็นไฟล์ CSV หรือส่งต่อเป็นโครงสร้าง JSON

💻 โค้ดส่งออกไฟล์ใน Jupyter Notebook:

# 1. ส่งออกตารางสะอาดเป็นไฟล์ CSV (โดยไม่เซฟดัชนีแถว)
df_cleaned.to_csv('cleaned_patients_data.csv', index=False)

# 2. ส่งออกเป็นไฟล์ข้อมูล JSON เพื่อเตรียมส่งผ่านเครือข่ายสากล
df_cleaned.to_json('cleaned_patients_records.json', orient='records', indent=4)
⚠️ ข้อควรระวัง: การตั้งค่า index=False ในไฟล์ CSV จะป้องกันการสร้างคอลัมน์ดัชนีเปล่าที่ไม่มีชื่อเมื่อเปิดอ่านไฟล์ในครั้งถัดไป
สัปดาห์ที่ 1: Data Output Commands

สรุปเนื้อหาประจำสัปดาห์ที่ ๑

สัปดาห์แรก มุ่งเน้นการวางรากฐานทางความคิดควบคู่ไปกับทักษะวิชาชีพเชิงปฏิบัติการจัดการข้อมูลดิบ

🧠 1. สารสนเทศสุขภาพ

ไม่ใช่แค่เรื่องเครื่องคอมพิวเตอร์ แต่เป็นกระบวนการจัดแจงข้อมูลและการประมวลผลอย่างเป็นระบบ (Data + Meaning) เพื่อเพิ่มความปลอดภัยและยกระดับระบบบริการทางการแพทย์

🛠️ 2. สภาพแวดล้อมที่ทำซ้ำได้

การติดตั้งระบบจัดการแบบล็อกเวอร์ชัน (Scoop, uv และ lockfiles) จะช่วยขจัดปัญหาระบบพังในภายหลัง ทำให้นักศึกษาสามารถทำซ้ำผลลัพธ์การทดลองได้อย่างน่าเชื่อถือ

🧹 3. Pre-processing

ทักษะการตรวจสอบความถูกต้องของข้อมูล (Validity Checks) เช่น การกรองอายุที่ขัดแย้งทางชีววิทยา และการจัดการกับระเบียนสูญหายด้วย Pandas ก่อนนำข้อมูลไปป้อนเข้าโมเดล AI

สัปดาห์ที่ 1: บทสรุปปฏิบัติการ

โจทย์ปฏิบัติการและการบ้าน ๑ (Homework 1)

การบ้านประจำสัปดาห์ เพื่อประเมินผลสัมฤทธิ์ CLO2

📋 รายละเอียดโจทย์งาน (Individual Assignment):

  1. ให้นักศึกษาดาวน์โหลดชุดข้อมูลประวัติผู้ป่วยจำลองดิบ raw_patients.csv
  2. ใช้ Jupyter Notebook ออฟไลน์ เขียนโค้ดตรวจสอบและหาจำนวนค่าว่าง (Null) ทั้งหมดในไฟล์
  3. ทำความสะอาดค่าสูญหายในคอลัมน์ผลเลือด HbA1c_level โดยการแทนที่ด้วย ค่าเฉลี่ยสถิติ (Mean Imputation)
  4. กรองคัดทิ้งคนไข้ที่ระบุอายุเป็นค่าติดลบ หรืออายุเกินสรีรวิทยาที่เป็นไปได้จริง (Validity Checks)
  5. ส่งออกผลลัพธ์สุดท้ายเป็นไฟล์ CSV ชื่อ student_id_homework1.csv และอัปโหลดไฟล์ .ipynb บนระบบ

📅 กำหนดการส่งงาน: ก่อนเริ่มคาบเรียนปฏิบัติการสัปดาห์ถัดไป (สัปดาห์ที่ ๒)

สัปดาห์ที่ 1: การบ้านประเมินผลสัมฤทธิ์

แหล่งวิชาการแนะนำและการติดต่อผู้สอน

ช่องทางการการเรียนรู้เพิ่มเติม

📚 สื่อการศึกษาและข้อมูลเปิดสากล:

  • รายวิชา MUx MOOC: "เทคโนโลยีดิจิทัลและสารสนเทศทางสุขภาพ"
  • ชุดการบรรยายวิชาการ: โดย อ.ดร.นพ.นวนรรน ธีระอัมพรพันธุ์
  • หนังสือ "ความรอบรู้ด้านสุขภาพ": โดย ผศ.ดร.ขวัญเมือง แก้วดำเกิง
  • แหล่งฐานข้อมูลสากล: PhysioNet & UCI Machine Learning Repository

📬 ช่องทางสอบถามและติดต่อผู้สอน:

ดร.วิชิต สมบัติ
📧 wichit.s@ubu.ac.th | 📞 ๐๙๘-๐๙๗-๓๓๒๖

แล้วพบกันในสัปดาห์ที่ ๒ กับหัวข้อ "การเชื่อมโยงข้อมูลจากหลายชุดข้อมูลและการจัดกลุ่ม" ครับ!