รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์
ในระบบบริการสุขภาพดิจิทัล ข้อมูลประวัติคนไข้และสถิติการสั่งใช้ยามักจะถูกจัดเก็บแยกส่วน (Siloed Data) กันในระบบต่างๆ การจับคู่หรือบูรณาการระเบียนข้อมูลจึงเป็นหัวใจสำคัญอย่างยิ่ง
เชื่อมข้อมูลประวัติส่วนบุคคลผู้ป่วย (Demographics) ร่วมกับข้อมูลประวัติการสั่งใช้ยาสะสม เพื่อสนับสนุนให้เกิดความปลอดภัย ลดความเสี่ยงในการสั่งใช้ยาซ้ำซ้อน และเพิ่มคุณภาพในการดูแลรักษาที่ต่อเนื่อง
ช่วยให้นักศึกษาและแพทย์สามารถคัดกรอง วิจัย จัดลำดับความสำคัญผู้ป่วย (Clinical Prioritization) เพื่อแก้ไขปัญหาสาธารณสุขระดับประเทศได้อย่างเป็นระบบ [9]
ในการเขียนโค้ดวิเคราะห์ข้อมูลสุขภาพ การเลือกประเภทการ Join จะส่งผลโดยตรงต่อความครบถ้วนของประวัติคนไข้
ข้อมูลจากตารางฝั่งซ้ายและขวาต้องมีคีย์ร่วม (practice_code) ตรงกันเท่านั้น หากสถานพยาบาลใดไม่มีข้อมูลในทะเบียนจะถูกตัดทิ้งทันที
# โค้ดเชื่อมตารางแบบคัดเฉพาะที่มีคู่ตรงกัน pd.merge(df_prescriptions, df_practices, on='practice_code', how='inner')
เก็บประวัติการจ่ายยาสะสมทั้งหมดในฝั่งซ้ายไว้เป็นหลัก แม้รหัสคลินิกนั้นจะไม่มีข้อมูลลงทะเบียนในฝั่งขวาก็ตาม (โดยระบบจะแทนที่ค่าที่หายไปด้วย NaN)
# โค้ดเชื่อมตารางแบบเก็บระเบียนหลักไว้ครบถ้วน pd.merge(df_prescriptions, df_practices, on='practice_code', how='left')
ในการเรียนการสอนวิชา อจวพ ๓๐๒ และวิจัยวิทยาศาสตร์การแพทย์ เราจะเลือกใช้ชุดข้อมูลที่ลบระบุตัวตน (De-identified) ที่ได้รับมาตรฐานความปลอดภัยทางการแพทย์ระดับสากล
คลังทรัพยากรกลางระดับสากล สนับสนุนโดยสถาบันเทคโนโลยี MIT เป็นฐานข้อมูลที่ได้รับความไว้วางใจสูงสุดในการวิจัยและการพัฒนาแบบจำลอง AI ทางการแพทย์
เปิดระบบหลัก PhysioNet →เวชระเบียนสุขภาพผู้ป่วยวิกฤต (ICU) จริงนับหมื่นราย ทั้งสัญญาณชีพ การตรวจวัด ยา และวันเวลาเข้ารักษา เพื่อวิเคราะห์ผลลัพธ์และความโปร่งใสเชิงข้อมูล
คลังเก็บข้อมูลสัญญาณชีพดิบแบบอนุกรมเวลา (Timeseries) และข้อมูลเซ็นเซอร์สวมใส่ของผู้ใช้งาน เช่น ออกซิเจนในเลือด (SpO2) และระดับความเครียด
ดาวน์โหลดชุดข้อมูล Zenodo →ภายใต้ข้อจำกัดทางกฎหมายด้านการคุ้มครองข้อมูลส่วนบุคคล (PDPA และ HIPAA) การเรียนรู้ผ่าน ข้อมูลผู้ป่วยสังเคราะห์ (Synthetic Patient Data) จึงเป็นมาตรฐานอุตสาหกรรมยุคใหม่ — รายวิชานี้ใช้ PySynthea (tietai-synthea) ซึ่งเป็น Python-native reimplementation ของ Synthea โดย TIET-AI (ไม่ต้องติดตั้ง Java/JVM)
สังเคราะห์เวชระเบียนคนไข้จำลองตั้งแต่แรกเกิดจนถึงสภาวะโรคต่างๆ อย่างสมจริงแต่ไม่ผูกกับข้อมูลผู้ป่วยจริง — ติดตั้งด้วย uv add tietai-synthea (รันออฟไลน์บน Windows) แล้วเรียก uv run synthea -p 10 หรือ Python API from synthea import Generator
scoop install git uv uv init uv add tietai-synthea uv run synthea -p 10 --state "California" # หรือใน notebook: # from synthea import Generator, GeneratorOptions
ต้นฉบับ Synthea (Java, MITRE) ที่ PySynthea reimplement: synthetichealth/synthea — นักศึกษาที่อยากเทียบเคอร์เนล Java ดูได้ แต่แล็บในรายวิชาใช้ PySynthea ทั้งหมด
ข้อมูลที่ PySynthea สังเคราะห์จะส่งออกเป็น FHIR R4 JSON Bundle (Patient, Encounter, Condition, Observation, MedicationRequest ฯลฯ) ตามมาตรฐานสากล เพื่อให้ระบบสุขภาพทั่วโลกแลกเปลี่ยนข้อมูลได้ — สเปกทางการ: hl7.org/fhir
uv add tietai-synthea ให้ทดสอบ uv run python -c "import synthea; print(synthea.__version__)" — จากนั้นดูไฟล์ FHIR JSON ที่ PySynthea สร้างใน ./output/fhir/ แล้วฝึก pd.json_normalize ในโน้ตบุ๊ก (คาบ 11–13 จะคลี่ Bundle เป็นตาราง DataFrame)
รายวิชา อจวพ ๓๐๒ ส่งเสริมและสนับสนุนกลยุทธ์การศึกษาแบบเชิงรุก (Active & Self-paced Learning) เพื่อให้นักศึกษาสามารถทบทวนความรู้ล่วงหน้าได้ตลอดเวลา
วิชา "เทคโนโลยีดิจิทัลและสารสนเทศทางสุขภาพ" ของมหาวิทยาลัยมหิดล ครอบคลุมหลักการจัดการฐานข้อมูล กฎหมายข้อมูลและจริยธรรมสุขภาพยุคดิจิทัล .
สมัครเรียนบนระบบ MUx →"ความรอบรู้ด้านสุขภาพ: ขั้นพื้นฐาน ปฏิสัมพันธ์ วิจารณญาณ" โดย ผศ.ดร.ขวัญเมือง แก้วดำเกิง สมาคมวิชาชีพสุขศึกษา เพื่อพฤติกรรมและการตัดสินใจในระบบสุขภาพ .
ดูรายละเอียดที่ศูนย์หนังสือจุฬาฯ →รวบรวมชุดการบรรยายวิชาการเรื่อง "Health Informatics for Health Service Systems" โดย ดร.นพ.นวนรรน ธีระอัมพรพันธุ์ ผู้แทนจากสมาคมเวชสารสนเทศไทย (TMI) .
ดาวน์โหลดสไลด์ ดร.นวนรรน →การประยุกต์ใช้ไลบรารี Pandas ในการคำนวณและวิเคราะห์ดัชนีชี้วัดเพื่อตอบสนองวัตถุประสงค์ระดับรายวิชา CLO2
ในฐานข้อมูลระบบเวชระเบียนอิเล็กทรอนิกส์ (EHRs) เรามักใช้รหัสอ้างอิงร่วม (เช่น รหัสยา หรือ รหัสคลินิก) เพื่อนำตารางข้อมูลมารวมกันผ่านฟังก์ชัน pd.merge()
# 1. อ่านข้อมูลระเบียนสั่งยา และ ทะเบียนที่ตั้งคลินิก
df_prescriptions = pd.read_csv('prescriptions.csv')
df_practices = pd.read_csv('practices_registry.csv')
# 2. เชื่อมข้อมูลผ่านรหัสสถานพยาบาล (practice_code)
df_linked = pd.merge(
df_prescriptions,
df_practices,
on='practice_code',
how='left',
suffixes=('_rx', '_reg')
)
💡 คำอธิบายพารามิเตอร์สำคัญ: อาร์กิวเมนต์ suffixes มีความจำเป็นอย่างยิ่งในระบบสารสนเทศสุขภาพ เพื่อช่วยแยกคอลัมน์ชื่อซ้ำกัน เช่น วันที่บันทึกของใบสั่งยา (date_rx) และวันที่ขึ้นทะเบียนของคลินิก (date_reg) ป้องกันการสับสนเชิงโครงสร้างข้อมูล
การวิเคราะห์สถิติด้านระบาดวิทยาคลินิกและการบริหารจัดการ (KPIs) จะมุ่งใช้คำสั่ง .groupby() เพื่อสรุปภาพรวมรายกลุ่มประชากร
# รวมกลุ่มข้อมูลด้วยรายชื่อสถานพยาบาล และประมวลผลสถิติสะสมหลายมิติ
practice_stats = df_linked.groupby('practice_name').agg(
total_spend=('actual_cost', 'sum'), # ยอดใช้จ่ายยาในระบบรวม
average_price=('actual_cost', 'mean'), # ราคายาเฉลี่ยต่อระเบียนสั่งใช้ยา
total_prescriptions=('items', 'count') # ผลรวมจำนวนรายการใบสั่งยา
).reset_index()
practice_stats.head()
🔍 กระบวนการ Split-Apply-Combine: โค้ดด้านบนจะทำการแยกกลุ่มตามรายชื่อคลินิก (Split) สั่งให้ประมวลผลตามฟังก์ชันที่กำหนดในแต่ละคอลัมน์ (Apply) และยุบตารางกลับมาแสดงผลเป็นค่าสถิติวินิจฉัยเปรียบเทียบในรูปตารางสรุปที่มีขนาดกระชับ (Combine)
ในการกรองข้อมูลระดับแถวทั่วไปเราจะใช้เงื่อนไข WHERE แต่ในระบบฐานข้อมูลขนาดใหญ่ เมื่อทำการจัดกลุ่มแล้วเราต้องใช้เงื่อนไข **HAVING** เพื่อคัดเลือกกลุ่มข้อมูลเป้าหมาย
# กรองตารางสรุปโดยเลือกเฉพาะสถานพยาบาลที่มีใบสั่งยาสะสม > 1,000 ใบ (HAVING)
high_volume_practices = practice_stats[
practice_stats['total_prescriptions'] > 1000
]
# เรียงลำดับจากสถานพยาบาลที่มียอดมูลค่ารายจ่ายสะสมสูงสุดลงมาตรวจเช็ค
high_volume_practices = high_volume_practices.sort_values(
by='total_spend',
ascending=False
)
🚨 ข้อห้ามเชิงระบบ: ห้ามกรองเงื่อนไขผลรวมสะสม (เช่น cost.sum() > 1000) ในขั้นตอน WHERE ตั้งแต่แรก เพราะ ณ จุดนั้นคอมพิวเตอร์ยังไม่ได้ประมวลผลจัดกลุ่ม จะทำให้เกิดความบกพร่องทางตรรกะการคำนวณทันที
ในการทำโครงงานกลุ่มวิชานี้ (สัดส่วนคะแนนสะสมร้อยละ ๓๐) และการทำงานวิจัยวิทยาศาสตร์การแพทย์ นักศึกษาควรทำความรู้จักและสืบค้นฐานข้อมูลทางการแพทย์ที่เป็นระบบเปิดในระดับสากลดังนี้ครับ:
แพลตฟอร์มหลักระดับโลก สนับสนุนโดย MIT รวบรวมข้อมูลสัญญาณชีพและเวชระเบียนดิจิทัลสำหรับงานวิจัย AI .
ไปที่เว็บไซต์หลัก PhysioNet → [20]ฐานข้อมูลผู้ป่วยภาวะวิกฤต (ICU) แบบลบตัวตน เพื่อศึกษาอัตราการรอดชีวิตและการวิเคราะห์ประวัติทางคลินิก .
แหล่งรวบรวมชุดข้อมูลมาตรฐานสำหรับการทดสอบแบบจำลองทางสถิติและ Machine Learning ทั่วไป ครอบคลุมโรคเบาหวานและโรคเรื้อรัง .
ไปที่ระบบฐานข้อมูล UCI → [25]การประเมินเพื่อตัดสินผลการเรียนรู้ของรายวิชา (Summative Assessment) ตามกรอบแผนการสอน มม.๓
prescriptions.csv และแฟ้มทะเบียน practices_registry.csvpractice_codestudent_id_homework2.csv และส่งตัวโค้ด .ipynbเจาะลึกกระบวนการตรวจสอบคุณภาพข้อมูล (Post-Merge Audit), การหาอัตราครองเตียงเฉลี่ย (ICU LOS), และการวิเคราะห์ความเหลื่อมล้ำภูมิศาสตร์สาธารณสุข [2, 3]
ในวิทยาการข้อมูลสุขภาพ ขั้นตอนที่สำคัญที่สุดหลังจากทำการเชื่อมตาราง (Data Merging) คือ การทวนสอบ (Post-Merge Quality Audit) [4] เพื่อตรวจสอบว่ามีระเบียนคนไข้ตกหล่น หรือคีย์หลุดเกิดเป็นค่าสูญหายอันตรายขึ้นหรือไม่
# 1. ตรวจสอบมิติ (Shape) ว่าระเบียนหลักของใบสั่งยาฝั่งซ้ายไม่ลดลงอย่างผิดปกติ
print(f"ขนาดตารางก่อนเชื่อม: {df_prescriptions.shape} แถว")
print(f"ขนาดตารางหลังเชื่อม: {df_linked.shape} แถว")
# 2. ค้นหารายชื่อสถานพยาบาลที่ไม่ตรงกับระบบทะเบียน (Orphan Keys)
unmatched_practices = df_linked[df_linked['practice_name'].isnull()]['practice_code'].unique()
print(f"รหัสคลินิกที่ไม่มีชื่อขึ้นทะเบียน: {unmatched_practices}")
# 3. สรุปภาพรวมโครงสร้างคอลัมน์และประเภทตัวแปรใหม่ทั้งหมด
df_linked.info()
🔒 ความสำคัญของการตรวจสอบ: หากนักศึกษาเลือกเชื่อมตารางด้วย Inner Join แล้วไม่ตรวจสอบให้ดี ข้อมูลผู้ป่วยที่ไม่มีคีย์จับคู่ฝั่งขวาจะถูกลบทิ้งไปอย่างเงียบๆ ส่งผลให้อัตราความชุกของโรคหรือรายงานทางการคลังมีความบกพร่องทันที
เรานำทักษะการ Group By มารวมกับการวิเคราะห์มิติเชิงเวลาเพื่อคำนวณ ระยะเวลาครองเตียงรักษาเฉลี่ย (Length of Stay: LOS) และอัตราความรุนแรงของคนไข้ระดับโรงพยาบาล [5, 6]
# 1. คำนวณระยะวันนอนรักษา (Length of Stay) จากวันที่เข้าและจำหน่ายผู้ป่วย
df_linked['LOS'] = (pd.to_datetime(df_linked['discharge_date']) - pd.to_datetime(df_linked['admission_date'])).dt.days
# 2. ยุบตารางหาค่าเฉลี่ยวันครองเตียง (LOS) และความดันวิกฤตต่ำสุดรายห้อง ICU
hospital_kpis = df_linked.groupby('hospital_name').agg(
average_stay=('LOS', 'mean'),
min_systolic_bp=('systolic_bp', 'min'),
total_patients=('patient_id', 'count')
).reset_index()
hospital_kpis.head()
🔬 การแปรผลลัพธ์เชิงสารสนเทศ: ตารางสรุปนี้จะช่วยให้ผู้บริหารระบบสุขภาพสามารถวินิจฉัยเพื่อจัดสรรกำลังบุคลากรพยาบาล และระบุพิกัดหอผู้ป่วยวิกฤตที่มีแนวโน้มรับภาระงานคนไข้หนาแน่นเกินความจุ (ICU Congestion) ได้อย่างมีประสิทธิภาพ [5, 6]
การยกระดับคุณภาพบริการสาธารณสุขชุมชน ต้องพิจารณาความเท่าเทียมในการเข้าถึงยาและนวัตกรรม [3, 8] เราจึงนำระเบียนการรักษามาผูกเชื่อมต่อกับ ข้อมูลที่ตั้งทางภูมิศาสตร์ (Geographic Metadata)
การเชื่อมข้อมูลด้วยรหัสพื้นที่ช่วยจำแนกพฤติกรรมการจ่ายยาสมุนไพรและยาแผนปัจจุบันของคลินิกในเขตเมืองและเขตห่างไกลชนบท เพื่อจัดลำดับสิทธิ์การดูแลและงบประมาณสำรองฉุกเฉิน [3, 8]
# วิเคราะห์เปรียบเทียบมูลค่ารวมค่ายาระหว่างสองเขตพิกัด
equity_analysis = df_linked.groupby('area_type').agg(
total_drug_cost=('actual_cost', 'sum'),
prescribing_clinics=('practice_code', 'nunique')
).reset_index()
ตามที่ระบุในหนังสืออ้างอิง ความรอบรู้ด้านสุขภาพ (Health Literacy) ความสามารถของประชาชนในการเข้าถึงระบบส่งเสริมสุขภาพจำเป็นต้องพึ่งระบบข้อมูลที่โปร่งใส การประสานชุดข้อมูลที่มีภูมิศาสตร์ร่วมจะช่วยขจัดความเหลื่อมล้ำทางสุขภาพได้อย่างแท้จริง [3, 9]
ทรัพยากรอ้างอิงหลักสูตร: ใช้หลักการจัดการระเบียนเพื่อศึกษาการจัดกลุ่มโรคเชิงกายภาพและการประเมินนโยบายสุขภาพ [10]
เนื่องจากฐานข้อมูลเวชระเบียนจริง เช่น MIMIC-IV บรรจุข้อมูลสัญญาณชีพคนไข้นับล้านแถว [12, 13] การดึงไฟล์ดิบทั้งหมดเข้ามาผูกร่วมกันจะส่งผลให้ระบบประมวลผลหยุดทำงาน (Out of Memory Error)
ลดการจองพื้นที่ RAM โดยคัดกรองเฉพาะคอลัมน์คีย์หลักร่วมและตัวชี้วัดที่เราจะวิเคราะห์สรุปผลสถิติตั้งแต่ตอนดึงเข้าสู่ Pandas
# โหลดเฉพาะคอลัมน์รหัสคลินิกและค่ายาเท่านั้น
cols = ['practice_code', 'actual_cost']
df_rx_thin = pd.read_csv('prescriptions.csv', usecols=cols)
ตามสเปคท่อส่งข้อมูลการแพทย์สมัยใหม่ [14] การแปลงชนิดข้อมูลจำนวนเต็มหรือชนิดเลขทศนิยมให้มีขนาดเล็กลงช่วยประหยัดหน่วยความจำได้เกินร้อยละ ๕๐
# แปลงค่าน้ำหนักเพื่อความเบาของหน่วยประมวลผล df_linked['Age'] = pd.to_numeric(df_linked['Age'], downcast='integer')
นักศึกษาสามารถนำความรู้และทักษะทั้ง ๓ ส่วนย่อยในสัปดาห์นี้ ไปประยุกต์เขียนรหัสคอมพิวเตอร์เพื่อทำใบงานสะสมคะแนน Homework 2 (ร้อยละ ๒๐) [16] ให้ถูกต้องสมบูรณ์แบบ
pd.merge() แบบ Left Join เท่านั้นปฏิบัติการเรียนรู้เชิงลึกด้านการคลี่โครงสร้างซับซ้อน (Nested JSON Data normalization), การสกัดคุณลักษณะ (Feature Extraction) และมาตรฐานการคุ้มครองข้อมูลอ่อนไหวทางการแพทย์
ข้อมูลสารสนเทศสุขภาพในอดีตมักจัดเก็บในรูปแบบกระจัดกระจายและไร้ทิศทาง ทำให้เกิดปัญหาการเชื่อมต่อข้ามโรงพยาบาล มาตรฐาน HL7 FHIR (Fast Healthcare Interoperability Resources) [3] จึงถูกพัฒนาขึ้นเพื่อกำหนดรูปแบบการสื่อสารเวชระเบียนสากลในลักษณะของโครงสร้างข้อมูลกึ่งมีโครงสร้าง (Semi-structured XML/JSON) [3-5]
Patient) [4], บันทึกอาการโรค (Condition) [5], และข้อมูลสัญญาณชีพ/ผลการตรวจแล็บ (Observation) [5]เนื่องจากมาตรฐาน FHIR ในระบบข้อมูลสุขภาพขนาดใหญ่มักเป็นโครงสร้างเชิงสัมพันธ์ (Relational) การใช้ระบบสังเคราะห์ประวัติผู้ป่วยเสมือนจริง เช่น PySynthea [3] (Python-native, แทน Synthea Java เดิม) ร่วมกับมาตรฐาน FHIR ทำให้นักศึกษาสามารถจำลองกรณีศึกษาการรักษาโรคเบาหวานหรือโรคเรื้อรังได้โดยไม่ล่วงละเมิดสิทธิผู้ป่วยจริง [3, 7]
ทิศทางสำคัญ: อิงตามเอกสารแนะนำ "Health Informatics for Health Service Systems" ในแผนหลักสูตรรายวิชา [8]
เนื่องจากเวชระเบียนสากลแบบ FHIR บันทึกในฟอร์แมต JSON ที่ซับซ้อนและมีการซ้อนทับกันหลายกิ่งก้าน (Nested Properties) [4, 5] เราจำเป็นต้องใช้ฟังก์ชัน pd.json_normalize() ของ Pandas เพื่อจัดรูปแบบให้อยู่ในตารางแบนราบ (Flat Table)
import json
import pandas as pd
# 1. โหลดระเบียนผู้ป่วยและแปลงข้อความดิบเป็นอ็อบเจกต์ Python
with open('patient_fhir_demo.json') as f:
fhir_data = json.load(f)
# 2. คลี่โครงสร้างซับซ้อน (Nested path) ภายใต้คีย์ 'entry' ให้ออกมาเป็นระนาบตารางแบนราบ
df_flat = pd.json_normalize(
fhir_data,
record_path=['entry'],
meta=['id', 'resourceType']
)
df_flat.head(5)
💡 เทคนิคที่ต้องเข้าใจ: พารามิเตอร์ record_path บังคับระบุพิกัดกิ่งก้านเป้าหมายที่เราต้องการสกัดแตกออกเป็นแถว ส่วนตัวแปร meta ช่วยดึงคุณลักษณะคีย์หลักด้านบน (Root Keys) ติดลงมาในตารางสรุปใหม่ เพื่อใช้ในการเชื่อมโยงตารางข้อมูลต่อยอดได้สะดวก
ในการพัฒนาโมเดลปัญญาประดิษฐ์ทางการแพทย์ขั้นสูง (เช่น การทำนายการกลับเข้ารักษาซ้ำภายใน 30 วัน หรือ 30-day Readmission Prediction) เราต้องเขียนโค้ดเพื่อสกัดคุณลักษณะเด่น (Feature Extraction) จากแฟ้ม FHIR JSON Bundle [6]
# คำนวณหาอายุจริงและระยะเวลานอนรักษาในโรงพยาบาล (Length of Stay: LOS)
start_date = pd.to_datetime(df_flat['resource.period.start'])
end_date = pd.to_datetime(df_flat['resource.period.end'])
df_flat['los_days'] = (end_date - start_date).dt.days
# ดึงค่าผลตรวจห้องปฏิบัติการ เช่น ระดับน้ำตาลสะสม (LOINC code: 4548-4 เป็น HbA1c) [5, 6]
df_flat['hba1c_level'] = df_flat.apply(
lambda r: r['resource.valueQuantity.value']
if r['resource.code.coding']['code'] == '4548-4' else None,
axis=1
)
🔬 การเชื่อมโยงระบบ: วิธีนี้ช่วยดึงข้อมูลสัญญาณชีพในระบบบันทึกเวลาจริง (Timeseries) และข้อมูลจากอุปกรณ์สวมใส่ [10] มาร้อยเรียงสรุปผลสถิติในระดับผู้ป่วยรายบุคคลเพื่อการดูแลรักษาแบบแม่นยำ (Precision Medicine) [11]
เนื่องจากข้อมูลระเบียนผู้ป่วย (EHR) ถือเป็นข้อมูลส่วนบุคคลที่มีความอ่อนไหวสูงมาก (Sensitive Personal Identifiable Information: PII) [1] การจัดสรรและเชื่อมโยงตารางข้อมูลจึงต้องอยู่ภายใต้เกณฑ์จริยธรรมข้อมูลสารสนเทศสุขภาพอย่างเคร่งครัด [8, 13]
สมาคมเวชสารสนเทศไทย (TMI) และนโยบายคลาวด์กลางภาครัฐ [1] แนะนำให้ใช้กระบวนการเข้ารหัส (Encryption) [18] และการปิดบังตัวตนผู้ป่วยระดับลึก (Anonymization) เช่น การคัดทิ้งและจำกัดข้อมูลอายุผู้ป่วยเพื่อป้องกันภัยการสืบหาตัวตนย้อนกลับ (Re-identification)
เป้าหมาย CLO3: ตระหนักและสามารถอธิบายเกณฑ์กฎหมายและจริยธรรมข้อมูลได้ [19]
เกณฑ์ตัดสินและผลลัพธ์เพื่อประเมินความสามารถการเขียนโปรแกรมและการรวมกลุ่มข้อมูลขนาดใหญ่สะสมร้อยละ ๒๐ [19]
practice_code ด้วย Left Join [1]scoop install git uv → uv add tietai-synthea pandas jupyterlab — เอกสารทางการ: uv installation | uv projects | PySynthea Quick Start