Midterm — Review & Exam Guide
ครอบคลุมสัปดาห์ 1–8 · ทฤษฎี + ปฏิบัติ (ตามแผนการสอน: การสอบปฏิบัติงาน/ทฤษฎีในชั้นเรียน)
week09-midterm-review.ipynbสอบทฤษฎี+ปฏิบัติ
(กลาง+ปลาย)
Homework
สัปดาห์ละชุด
Project กลุ่ม
(ERD สปสช.)
Presentation
สัปดาห์ 16
df = pd.read_csv('patients_data.csv')
df.shape; df.dtypes; df.head()
df.isnull().sum() # นับ NULL
df.dropna(subset=['HbA1c_level'])
df['bp'].fillna(df['bp'].mean()) # impute
df = df[(df.Age>=0)&(df.Age<=89)] # validity
pd.to_datetime(df['admission_date'])
df.to_csv('clean.csv', index=False)
json.load(open('patient_fhir_demo.json'))
pd.json_normalize(rec, record_path=['entry'])
pd.merge(rx, reg, on='practice_code',
how='left') # LEFT JOIN
g = df.groupby('practice_name').agg(
total=('cost','sum'),
avg=('cost','mean'),
n=('items','count')).reset_index()
# HAVING:
g[g['n'] > 50].sort_values('total', ascending=False)
mask = (df.gender=='female') & \
(df.age>=60) & (df.hba1c>7) # วงเล็บ!
cohort = df.loc[mask]
df[df['DRUG'].isin(['METFORMIN','INSULIN'])]
df.info(); df.describe()
invalid = df[df.dischtime < df.admittime]
& | ~ (bitwise) — and/or ธรรมดา error!
| Feature | DW | Lake |
|---|---|---|
| Data | structured | raw all |
| Schema | on-write | on-read |
| ETL | Extract → Transform → Load (pipeline สู่ DW) | |
PySynthea (tietai-synthea) = Python-native synthetic patient generator (แทน Synthea Java)
CREATE TABLE IF NOT EXISTS patients( patient_id INTEGER PRIMARY KEY, hn TEXT UNIQUE NOT NULL, systolic_bp REAL CHECK(systolic_bp>0)); INSERT INTO patients VALUES(…); INSERT OR IGNORE … -- skip dup cur.executemany(sql, rows); con.commit(); SELECT cols FROM t LIMIT 5 OFFSET 5; SELECT sql FROM sqlite_master; -- schema PRAGMA table_info(patients);
WHERE gender='หญิง' AND hba1c>7
WHERE NOT(gender='หญิง')
SELECT COUNT(*) n, AVG(hba1c), MIN… MAX…
COUNT(DISTINCT gender)
ORDER BY hba1c DESC, hn ASC
hn LIKE 'HN-54%' birth LIKE '____-02-__'
gender IN ('ชาย','หญิง')
hba1c BETWEEN 6.5 AND 7.0
strftime('%Y',birth_date) AS y
CAST((julianday('now')-julianday(d))/365.25 AS INT) age
PRAGMA foreign_keys = ON -- per connection! REFERENCES patients(patient_id) INNER JOIN r ON r.pid=p.pid -- match only LEFT JOIN … -- left full LEFT … WHERE r.rx_id IS NULL -- anti-join RIGHT/FULL OUTER -- SQLite≥3.39 SELF: referrals a JOIN patients pa… pb… q1 UNION q2 -- dedupe stack GROUP BY drug HAVING COUNT(*) > 1 -- non-aggregate ⇒ ต้องอยู่ใน GROUP BY
"แสดง 3 คลินิกที่จ่ายยา Metformin เฉลี่ยราคาสูงสุด"
เปิด week09-midterm-review.ipynb ด้วย uv run jupyter lab
uv run jupyter lab ผ่านแน่นอนhealthinfo.db (patients + prescriptions)โชคดีกับการสอบนะครับ! 🍀