แผนการเรียนรู้
/
AMMS 302 | Week 3 • Part 1

การค้นหาข้อมูลเชิงลึกทางสุขภาพด้วย pandas

รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์

🎯 สารบัญและขั้นตอนการเรียนรู้ด้วยตนเอง

💡 คำชี้แนะ: นักศึกษาสามารถคลิกปุ่มด้านบนเพื่อข้ามไปยังสไลด์ที่ต้องการศึกษา หรือใช้ปุ่มควบคุมด้านล่างเพื่อไล่ตามเนื้อหา
01. บทนำสู่ pandas ในระบบสุขภาพ AMMS 302 | Week 3

ทำไมต้องใช้ pandas ในข้อมูลเวชระเบียนระบาดวิทยา?

ข้อมูลสุขภาพทางคลินิก (EHR) เป็นข้อมูลที่ซับซ้อน มักไม่มีโครงสร้างที่แน่นอน และเต็มไปด้วยข้อมูลที่ขาดหายหรือพิมพ์ผิด (Messy & High-Stakes)

📊 ความสำคัญของ Data ใน Medical AI

การสร้างแบบจำลอง AI หรือ Machine Learning ด้านการแพทย์ที่มีความปลอดภัยและไม่มีอคติ (Bias) ต้องเริ่มต้นจาก "ข้อมูลที่สะอาดและได้รับการจัดการอย่างดี" ไม่ใช่จากอัลกอริทึม

🎯 ประโยชน์หลักของ pandas:

  • รองรับชุดข้อมูลขนาดใหญ่และประมวลผลเร็ว
  • แปลงและบูรณาการข้อมูลต่างมิติ (Multimodal Integration)
  • มีชุดฟังก์ชันจัดการข้อมูลสูญหาย (Missing Values) อย่างเป็นระบบ
  • ทำงานร่วมกับ Jupyter Notebook ได้อย่างราบรื่น
02. การเตรียมเครื่องมือปฏิบัติการ AMMS 302 | Week 3

จัดเตรียม Jupyter Notebook และชุดข้อมูลฝึกปฏิบัติ

ในการปฏิบัติงานสัปดาห์นี้ เราจะใช้เครื่องมือ Jupyter Notebook (Python 3) ซึ่งติดตั้งอยู่ในระบบของรายวิชาแล้ว

📁 ตรวจสอบไฟล์ข้อมูลในระบบของคุณ:

เราได้จัดเตรียมไฟล์ข้อมูลการจ่ายยาเพื่อนำไปทดลองค้นหาข้อมูลเชิงลึก (Insights) ไว้เรียบร้อยแล้ว ได้แก่:

  • prescriptions.csv (ข้อมูลหลักการจ่ายยาในคลินิก)
  • practices_registry.csv (ทะเบียนรายชื่อคลินิกแพทย์ทั่วไป)

💡 เคล็ดลับความปลอดภัยข้อมูล: การปฏิบัติงานใน Sandbox ช่วยให้เราทดลองวิเคราะห์ข้อมูลได้โดยไม่ต้องเสี่ยงกับการทำข้อมูลผู้ป่วยจริงรั่วไหล และสอดคล้องกับมาตรฐานความปลอดภัยสากล เช่น HIPAA และกฎหมายไทย PDPA

⚡ คำสั่งเปิดการใช้งาน pandas ใน Jupyter Cell:

# นำเข้าไลบรารีจัดการข้อมูลในไพทอน
import pandas as pd

# ตรวจสอบเวอร์ชันที่ใช้อยู่ในระบบ
print(pd.__version__)
03. โครงสร้างข้อมูลพื้นฐานของ pandas AMMS 302 | Week 3

ทำความเข้าใจโครงสร้างข้อมูลสุขภาพในหน่วยความจำ

1. Series (แถวลำดับ 1 มิติ)

เปรียบเสมือนคอลัมน์เดี่ยวที่มีดัชนีกำกับ (Index) เช่น ข้อมูลความดันโลหิตหรืออุณหภูมิร่างกายของผู้ป่วยรายบุคคลตามช่วงเวลาอย่างต่อเนื่อง (Time-series)

2. DataFrame (ตารางโครงสร้างข้อมูล 2 มิติ)

เป็นรูปแบบตาราง (Tabular) มีแถวและคอลัมน์ชัดเจน มีโครงสร้างดัชนีทั้งแนวตั้งและแนวนอน เหมาะสำหรับการบันทึกประวัติการรักษาผู้ป่วยและบันทึกใบสั่งยา (EHR Data)

💡 แผนภาพโครงสร้างข้อมูลทางเวชระเบียน
[1 มิติ]
Series
เช่น อายุ
[2 มิติ]
DataFrame
เช่น อายุ + เพศ + ยา
04. การโหลดข้อมูลเข้าสู่ความจำ (Data Ingestion) AMMS 302 | Week 3

นำเข้าไฟล์ prescriptions.csv ด้วย pandas

เราจะนำเข้าข้อมูลด้วยฟังก์ชัน read_csv() ซึ่งจะทำการแปลงไฟล์ข้อมูลให้กลายเป็นวัตถุ DataFrame โดยอัตโนมัติ

📝 ทิปการโหลดข้อมูลเชิงเทคนิค:

ในระบบปฏิบัติการทั่วไป หากไฟล์ไม่อยู่ในโฟลเดอร์เดียวกัน คุณจำเป็นต้องกำหนด Path สัมบูรณ์ (Absolute Path) หรือพารามิเตอร์เพิ่มเติมเพื่อให้ pandas ทราบตำแหน่งไฟล์และวิธีการถอดรหัสของอักขระ (Encoding)

💻 ลองพิมพ์คำสั่งเหล่านี้ลงในเซลล์ Jupyter:

import pandas as pd

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

# แสดงผลแถวข้อมูลเริ่มต้น 5 ลำดับแรก
df.head()
05. การสำรวจวิเคราะห์ข้อมูลขั้นต้น (EDA) AMMS 302 | Week 3

ตรวจสอบโครงสร้าง มิติข้อมูล และข้อมูลสูญหาย (Missing Data)

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

⭐ ฟังก์ชันสำคัญที่ห้ามลืม:

  • .info(): ตรวจสอบประเภทตัวแปรและข้อมูลสูญหายทั้งหมด
  • .shape: ตรวจสอบจำนวนแถวและคอลัมน์ (มิติของข้อมูล)
  • .describe(): สรุปค่าสถิติพื้นฐานของข้อมูลเชิงตัวเลข (เช่น ยอดรวม ค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน)

💻 พิมพ์คำสั่งสำรวจข้อมูลทางสถิติลงในเซลล์:

import pandas as pd
df = pd.read_csv('prescriptions.csv')

# ตรวจสอบภาพรวมของแถวคอลัมน์และชนิดตัวแปร
df.info()

# ตรวจสอบหาผลรวมข้อมูลสูญหาย (Null Values) ในแต่ละคอลัมน์
print(df.isnull().sum())
06. บทสรุป และ Handoff สู่ภาคปฏิบัติ AMMS 302 | Week 3

ความสำเร็จของส่วนที่ 1 และก้าวต่อไปของคุณ!

ในสไลด์บทเรียนส่วนที่ 1 นี้ นักศึกษาได้เรียนรู้วิธีการกำหนดโครงสร้างข้อมูล Series และ DataFrame รวมถึงสามารถพิมพ์โค้ดภาษาไพทอนด้วยคำสั่ง read_csv() เพื่อโหลดฐานข้อมูลการจ่ายยาสาธารณสุขจริงเข้ามาวิเคราะห์ข้อมูลสูญหายเบื้องต้นได้เรียบร้อยแล้ว

🚀 ขั้นตอนถัดไป:

เมื่อนักศึกษาเข้าใจส่วนที่ 1 นี้เรียบร้อยแล้ว ให้เริ่มเปิด Jupyter Notebook ในคอมพิวเตอร์แล็บเพื่อทดลองพิมพ์และรันโค้ด หรือข้ามไปศึกษา "ส่วนที่ 2: การกรองผลลัพธ์ข้อมูลอย่างมีเงื่อนไข" เพื่อหาข้อค้นพบเชิงลึก (Insights) ของยารักษาโรคเบาหวานและยาทั่วไปได้เลยครับ!

📝 Lab Activity ของคุณพร้อมใช้งานในระบบแล้ว!
AMMS 302 | Week 3 • Part 2

การกรองเงื่อนไขและการสืบค้นทางคลินิกด้วย pandas

รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์

🎯 สารบัญการเรียนรู้เชิงลึก (Insights Querying)

💡 คำชี้แนะ: คลิกปุ่มเมนูเพื่อเริ่มฝึกสืบค้นและทำความสะอาดข้อมูลทางคลินิกจริงด้วยตนเอง
01. Boolean Indexing ทางเวชสารสนเทศ AMMS 302 | Week 3

การกรองแถวข้อมูลด้วยดัชนีตรรกะ (Boolean Masking)

หัวใจหลักของการกรองข้อมูลใน pandas DataFrame คือการระบุเงื่อนไขตรรกะ (True/False) ลงไปในแถวข้อมูลของคอลัมน์ เพื่อเลือกเฉพาะผู้ป่วยที่เข้าเกณฑ์ตามหลักเกณฑ์ระบาดวิทยา

📌 การกรองแบบดั้งเดิม vs .loc:

  • การครอบด้วยวงเล็บเหลี่ยม: df[df['AGE'] >= 18]
  • การกรองด้วย .loc[]: ยืดหยุ่นกว่าเนื่องจากช่วยให้เราเข้าถึงได้ทั้ง "แถว" และ "คอลัมน์เป้าหมาย" พร้อมกันได้อย่างปลอดภัยในหน่วยความจำ

💻 โค้ดตัวอย่าง: คัดกรองยา Metformin

import pandas as pd
df = pd.read_csv('prescriptions.csv')

# สร้างหน้ากากตรรกะสำหรับยารักษาเบาหวาน
metformin_mask = df['DRUG'] == 'METFORMIN'

# กรองแถวข้อมูลโดยเลือกเฉพาะผู้ป่วยที่ได้ยาตัวนี้
diabetic_patients = df.loc[metformin_mask]
diabetic_patients.head()
02. การประยุกต์ใช้ตรรกศาสตร์ทางเวชสารสนเทศ AMMS 302 | Week 3

การกรองข้อมูลแบบผสมผสานเงื่อนไขซับซ้อน (Multi-Criteria Filtering)

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

⚠️ กฎเหล็กของ pandas Logical Operators:

  • ใช้ตัวดำเนินการแบบบิต: & (AND), | (OR), ~ (NOT)
  • "ต้องครอบวงเล็บ" ในแต่ละเงื่อนไขตรรกะย่อยเสมอ มิฉะนั้นระบบจะเกิดข้อผิดพลาดด้านการคำนวณลำดับความสำคัญ (Operator Precedence)

💻 คัดกรองผู้ป่วยหญิงสูงวัยที่เป็นโรคเบาหวานประเภทที่ 2

# กรองผู้หญิงอายุมากกว่า 60 ปี ที่มียอดระดับ HbA1c สูงกว่าเกณฑ์ปกติ
high_risk = df[
    (df['gender'] == 'female') &
    (df['age'] >= 60) &
    (df['hba1c'] > 7.0)
]
print(f"จำนวนผู้ป่วยกลุ่มเสี่ยงสูง: {len(high_risk)} ราย")
03. การจัดการประชากรผู้ป่วยเชิงรุก (Cohort Selection) AMMS 302 | Week 3

การกรองและจัดกลุ่มผู้ป่วยเป้าหมาย (Cohort Selection) ด้วยรหัสโรคสากล

ในขั้นตอนวิศวกรรมข้อมูลทางการแพทย์ (Medical Data Engineering) ขั้นตอนสำคัญคือการสกัดกลุ่มประชากร (Cohort) ตามมาตรฐานรหัสโรคเช่น ICD-9 หรือ ICD-10

🔬 การใช้คำสั่ง .isin() และ .str.startswith():

ช่วยคัดกรองกลุ่มรหัสโรคแบบเป็นกลุ่ม เช่น รหัสที่ขึ้นต้นด้วย E11 (กลุ่มโรคเบาหวานชนิดที่ 2) โดยใช้เครื่องมือจัดการข้อความของ pandas

💻 ตัวอย่างการกรอง Cohort ผู้ป่วยโรคหัวใจและหลอดเลือด

# สืบค้นผู้ป่วยตามรหัสโรคหัวใจเต้นผิดจังหวะ (Atrial Fibrillation)
af_cohort = df[df['icd_code'] == 'I48']

# สืบค้นโดยใช้กลุ่มรายชื่อรหัสยาที่สนใจ
target_drugs = ['METFORMIN', 'INSULIN', 'GLIPIZIDE']
diabetic_meds = df[df['DRUG'].isin(target_drugs)]
04. การเตรียมความพร้อมข้อมูลทางการแพทย์ AMMS 302 | Week 3

การกรองและการแทนที่ข้อมูลสูญหาย (Missing Data Filter & Imputation)

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

🛠️ ชุดฟังก์ชันรับมือข้อมูล Null ของ pandas:

  • .isnull(): ตรวจหาเซลล์ข้อมูลที่เป็นช่องว่าง
  • .notnull(): คัดเลือกเฉพาะแถวที่มีข้อมูลครบถ้วนสมบูรณ์
  • .fillna(): แทนที่ข้อมูลที่สูญหายด้วยค่าสถิติ (เช่น ค่าเฉลี่ย หรือใช้วิธี Forward Fill)

💻 ตัวอย่างการแทนที่ระดับค่าน้ำตาลในเลือด (HbA1c)

# เลือกเฉพาะแถวที่มีผลแล็บ HbA1c ครบถ้วน
valid_labs = df[df['hba1c'].notnull()]

# แทนที่ข้อมูลช่องว่างด้วยค่าเฉลี่ยของประชากร
mean_value = df['hba1c'].mean()
df['hba1c_imputed'] = df['hba1c'].fillna(mean_value)
05. การควบคุมความสอดคล้องเชิงตรรกะของข้อมูล AMMS 302 | Week 3

การสืบค้นเพื่อตรวจสอบหาข้อมูลผิดพลาด (Clinical Logical & Consistency Validation)

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

🔍 กรณีศึกษาความคลาดเคลื่อนเชิงระบบ (Systematic Error Case):

ตัวอย่าง เช่น "วันจำหน่ายผู้ป่วย (Discharge Date) บันทึกไว้ก่อนวันลงทะเบียนรับเข้าพยาบาล (Admission Date)" หรือข้อมูลสัญญาณชีพที่มีค่าผิดเพี้ยนรวดเร็วเกินไป (เช่น น้ำหนักเปลี่ยนแปลง 20 กก. ในครึ่งวัน)

💻 เขียนคำสั่งตรวจสอบหาแถวที่บันทึกข้อมูลเวลาขัดแย้งกัน:

# แปลงคอลัมน์วันที่เป็น datetime object ของภาษาไพทอน
df['admittime'] = pd.to_datetime(df['admittime'])
df['dischtime'] = pd.to_datetime(df['dischtime'])

# ค้นหาแถวข้อมูลที่ขัดแย้งทางตรรกะเวลา
invalid_dates = df.loc[df['dischtime'] < df['admittime']]
print(f"จำนวนแถวข้อมูลเวลาคลาดเคลื่อน: {len(invalid_dates)} ราย")
06. บทสรุป และ Handoff สู่ภาคปฏิบัติ 3 ชั่วโมง AMMS 302 | Week 3

สรุปความก้าวหน้าและการสืบค้นทางระบาดวิทยาขั้นสูงด้วย pandas

การสืบค้นหาข้อค้นพบ (Finding Insights) และคัดกรองประชากรเป้าหมายด้วยคำสั่ง pandas ในสัปดาห์นี้ เป็นรากฐานที่สำคัญที่จะนำไปสู่การประมวลผลข้อมูลสุขภาพระดับภูมิภาค (Data Lake) และการทำงานร่วมกับระบบฐานข้อมูลขนาดใหญ่ (SQL / BigQuery) ในสัปดาห์ถัดไป

🚀 ก้าวต่อไปของคุณในสัปดาห์ที่ 3 ส่วนที่ 3:

ขอให้นักศึกษาเปิด Jupyter Notebook จากคอมพิวเตอร์ประจำตัวขึ้นมา นำเข้าชุดข้อมูลใบสั่งยา prescriptions.csv แล้วสืบค้นหากลุ่มผู้ป่วยโรคเบาหวานประเภทที่ 2 ตามแบบฝึกหัดประเมินผลสัมฤทธิ์ทางการเรียนประจำสัปดาห์ (CLO2: 18%) ของทางคณะสหเวชศาสตร์ได้เลยครับ!

📝 นักศึกษาสามารถทบทวนความรู้และพิมพ์คำสั่งตามสไลด์นี้ได้เลยครับ!
AMMS 302 | Week 3 • Part 3

การจัดกลุ่มและการสรุปผลสถิติข้อมูลสุขภาพ (Data Aggregation)

รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์

🎯 สารบัญและหัวข้อแล็บปฏิบัติ 3 ชั่วโมง

01. ทฤษฎีการจัดกลุ่มเชิงสถิติทางการแพทย์ AMMS 302 | Week 3

ตรรกะแบบแยก-คำนวณ-รวมกลุ่ม (Split-Apply-Combine Pattern)

เมื่อต้องทำโครงงานหรือวิจัยข้อมูลเวชระเบียนขนาดใหญ่ (เช่น ข้อมูลสัญญาณชีพหรือยา) วิธีวิเคราะห์สถิติมูลฐานคือกระบวนการ Split-Apply-Combine:

  • 🟢 Split: แยกข้อมูลตามกลุ่มลักษณะ (เช่น กลุ่มตามรหัสโรคหรือเพศ)
  • 🔵 Apply: คำนวณหาค่าสถิติในกลุ่มย่อยนั้น (เช่น คำนวณหาค่าเฉลี่ย, มัธยฐาน, หรือนับยอดรวม)
  • 🟡 Combine: นำผลลัพธ์ที่หาเสร็จแล้วมารวมกลับเข้าไปเป็นตารางสรุปใหม่

🎯 ประโยชน์ในการบริหารจัดการคลินิก:

ช่วยตอบโจทย์เช่น: "ผู้ป่วยที่เข้ารับการรักษาด้วยการผ่าตัดไส้ติ่งมีระยะเวลาพักฟื้นเฉลี่ยต่างกันอย่างไรระหว่างผู้ชายและผู้หญิง?" หรือ "ยอดการเบิกจ่ายยาโดยเฉลี่ยของแต่ละสาขาคลินิกมีแนวโน้มอย่างไร?"

02. การคำนวณสรุปค่าแล็บทางคลินิก AMMS 302 | Week 3

การหาค่าเฉลี่ยระดับค่าน้ำตาลสะสม (HbA1c) ของผู้ป่วยรายบุคคล

ผู้ป่วยโรคเบาหวานชนิดที่ 2 มักมีการเจาะเลือดตรวจหาค่าน้ำตาลสะสม (HbA1c - LOINC 4548-4) หลายครั้งตลอดช่วงระยะเวลาการรักษา เพื่อประเมินผลการดูแลรักษาระยะยาว

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

💻 ลองพิมพ์โค้ดคำสั่งใน Jupyter Notebook:

import pandas as pd
df = pd.read_csv('prescriptions.csv')

# จัดกลุ่มตามผู้ป่วย และคำนวณหา HbA1c เฉลี่ย
patient_hba1c = df.groupby('patient_id')['hba1c'].mean()

# แสดงสถิติผู้ป่วยที่มี HbA1c เฉลี่ยสูงสุด 5 คนแรก
print(patient_hba1c.nlargest(5))
03. งานระบาดวิทยาเชิงรุก (Epidemiology Counts) AMMS 302 | Week 3

การคำนวณหาจำนวนความชุกของโรคด้วยรหัส SNOMED-CT / ICD-10

ในทางวิทยาศาสตร์สุขภาพ เราจำเป็นต้องนับจำนวนประชากรที่ได้รับการวินิจฉัยโรคตามมาตรฐานสากล เช่น โรคเบาหวานชนิดที่ 2 (SNOMED: 44054006) เพื่อสร้างอัตราส่วนความชุกในแต่ละพื้นที่

🔬 การนับแบบจำแนกจำนวนเฉพาะตัว (Uniqueness count):

การใช้คำสั่ง value_counts() และ nunique() ของ pandas ช่วยคัดแยกรายชื่อผู้ป่วยที่ซ้ำกันออกจากการสรุปสถิติจำนวนรายเคสที่จำหน่ายจริงได้โดยง่าย

💻 วิเคราะห์สถิติจำนวนการสั่งยาของแพทย์:

# นับจำนวนครั้งของการสั่งจ่ายยาในแต่ละรหัสยา (RxNorm)
drug_counts = df['DRUG'].value_counts()
print("สถิติตัวยาที่มีการสั่งใช้บ่อยที่สุด:")
print(drug_counts.head(3))

# นับจำนวนผู้ป่วยที่มีประวัติไม่ซ้ำกันตามคลินิกต้นสังกัด
unique_patients = df.groupby('practice_code')['patient_id'].nunique()
04. การวิเคราะห์แบบหลายตัวแปร (Multi-variable Grouping) AMMS 302 | Week 3

การวิเคราะห์กลุ่มประชากรตามปัจจัย เพศ-ช่วงอายุ (Demographic Analysis)

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

🛠️ การส่งผ่านคีย์จัดกลุ่มแบบหลายคอลัมน์:

เราสามารถส่งค่าคีย์จัดกลุ่มไปเป็นลิสต์ข้อมูล ['gender', 'age_group'] เพื่อประมวลสถิติเชิงลึกหลายลำดับชั้นในตารางเดียวกันได้อย่างแม่นยำ

💻 โค้ดวิเคราะห์ข้อมูลการเบิกจ่ายยาแบ่งตามเพศและวัย:

# รวมกลุ่มประเมินระยะเวลาการนอนพักโรงพยาบาลเฉลี่ย (LOS)
demographic_analysis = df.groupby(
    ['gender', 'age']
)['los_days'].mean()

print(demographic_analysis.head(5))
05. การจัดการสถิติระดับวิชาชีพ AMMS 302 | Week 3

การใช้เมธอด .agg() เพื่อประมวลหลายชุดสถิติพร้อมกันในระดับโรงพยาบาล

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

📈 การส่งพจนานุกรม (Dictionary) เข้าไปที่ .agg():

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

💻 เขียนคำสั่ง .agg() เพื่อประเมินผลแล็บ HbA1c:

# หาค่า Min, Max และ Mean ของค่าน้ำตาลสะสม
hba1c_summary = df.groupby('practice_code')['hba1c'].agg(
    ['min', 'max', 'mean', 'count']
)

print(hba1c_summary.head(3))
06. บทสรุป และภารกิจสะสมคะแนน CLO2 AMMS 302 | Week 3

สิ้นสุดบทเรียนส่วนที่ 3: สรุปทักษะการค้นหา Insights

ยินดีด้วยครับ! นักศึกษาได้บรรลุเป้าหมายการจัดกลุ่ม (Data Aggregation) ทั้งการใช้คำสั่งสรุปผล คัดกรองรหัสโรค นำสถิติตามลักษณะประชากร และการประมวลผลหลายสถิติตามมาตรฐานการควบคุมข้อมูลสุขภาพ

🚀 ภารกิจส่งท้ายสัปดาห์ที่ 3 (สะสมคะแนน 18%):

ขอให้นักศึกษาทุกคนเปิดไฟล์ Lab Manual สัปดาห์ที่ 3 นำเข้าข้อมูลใบสั่งยา prescriptions.csv และรันโค้ดหาจำนวนความชุกและ HbA1c เฉลี่ยของผู้ป่วยแต่ละคลินิก ส่งผลลัพธ์ลงในระบบประเมินเพื่อทวนสอบมาตรฐานผลการเรียนรู้ของหลักสูตรต่อไปครับ!

💻 เปิด Jupyter Notebook และเริ่มเขียนโค้ดทักษะ CLO2 กันได้เลยครับ!