1. บทนำ
อัปเดตล่าสุด: 22-9-2022
Codelab นี้ใช้รูปแบบในการเข้าถึงและวิเคราะห์ข้อมูลด้านการดูแลสุขภาพที่รวมอยู่ใน BigQuery โดยใช้ BigQueryUI และสมุดบันทึก AI Platform โดยภาพการสำรวจข้อมูลชุดข้อมูลด้านการดูแลสุขภาพขนาดใหญ่โดยใช้เครื่องมือที่คุ้นเคย เช่น Pandas, Matplotlib และอื่นๆ ในสมุดบันทึก AI Platform ที่เป็นไปตามข้อกำหนดของ HIPPA "กลเม็ด" คือการดำเนินการส่วนแรกของการรวมของคุณใน BigQuery, ดึงชุดข้อมูล Pandas กลับคืนมา แล้วทำงานกับชุดข้อมูล Pandas ที่เล็กลงในเครื่อง AI Platform Notebooks มอบประสบการณ์การใช้งาน Jupyter ที่มีการจัดการ คุณจึงไม่จำเป็นต้องเรียกใช้เซิร์ฟเวอร์สมุดบันทึกด้วยตนเอง สมุดบันทึกของ AI Platform ผสานรวมกับบริการ GCP อื่นๆ ได้เป็นอย่างดี เช่น Big Query และ Cloud Storage ซึ่งทำให้การเริ่มต้นเส้นทางการวิเคราะห์ข้อมูลและ ML บน Google Cloud Platform เป็นไปอย่างรวดเร็วและง่ายดาย
ใน Code Lab นี้ คุณจะได้เรียนรู้วิธีต่อไปนี้
- พัฒนาและทดสอบการค้นหา SQL โดยใช้ BigQuery UI
- สร้างและเปิดตัวอินสแตนซ์ AI Platform Notebooks ใน GCP
- ดำเนินการค้นหา SQL จากสมุดบันทึกและจัดเก็บผลการค้นหาใน Pandas DataFrame
- สร้างแผนภูมิและกราฟโดยใช้ Matplotlib.
- คอมมิตและพุชสมุดบันทึกไปยัง Cloud Source Repository ใน GCP
คุณต้องมีอะไรบ้างเพื่อเรียกใช้ Codelab นี้
- คุณต้องมีสิทธิ์เข้าถึงโครงการ GCP
- คุณต้องได้รับมอบหมายบทบาทเจ้าของสำหรับโปรเจ็กต์ GCP
- คุณต้องมีชุดข้อมูลการดูแลสุขอนามัยใน BigQuery
หากคุณไม่มีโปรเจ็กต์ GCP ให้ทำตามขั้นตอนเหล่านี้เพื่อสร้างโปรเจ็กต์ GCP ใหม่
2. การตั้งค่าโปรเจ็กต์
สำหรับ Codelab นี้ เราจะใช้ชุดข้อมูลที่มีอยู่ใน BigQuery (hcls-testing-data.fhir_20k_patients_analytics) ชุดข้อมูลนี้สร้างไว้ล่วงหน้าด้วยข้อมูลการดูแลสุขภาพสังเคราะห์
รับสิทธิ์เข้าถึงชุดข้อมูลสังเคราะห์
- จากอีเมลที่คุณใช้เข้าสู่ระบบ Cloud Console ให้ส่งอีเมลไปที่ hcls-solutions-external+subscribe@google.com เพื่อขอเข้าร่วม
- คุณจะได้รับอีเมลพร้อมวิธียืนยันการดำเนินการ
- ใช้ตัวเลือกเพื่อตอบกลับอีเมลเพื่อเข้าร่วมกลุ่ม ห้ามคลิกปุ่ม
- เมื่อได้รับอีเมลยืนยันแล้ว คุณสามารถไปยังขั้นตอนถัดไปใน Codelab ได้
ปักหมุดโปรเจ็กต์
- ในคอนโซล GCP ให้เลือกโปรเจ็กต์ แล้วไปยัง BigQuery
- คลิกเมนูแบบเลื่อนลง +เพิ่มข้อมูล และเลือก "ปักหมุดโปรเจ็กต์" "ป้อนชื่อโปรเจ็กต์" ที่ใช้เวลาเพียง 2 นาที
- ป้อนชื่อโปรเจ็กต์ "hcls-testing-data" แล้วคลิก PIN ชุดข้อมูลการทดสอบ BigQuery "fhir_20k_patients_analytics" พร้อมให้ใช้งาน
3. พัฒนาการค้นหาโดยใช้ BigQuery UI
การตั้งค่า UI ของ BigQuery
- ไปที่คอนโซล BigQuery โดยเลือก BigQuery จากเมนู GCP ที่มุมซ้ายบน ("hamburg")
- ในคอนโซล BigQuery ให้คลิกเพิ่มเติม → การตั้งค่าการค้นหา และตรวจสอบว่าไม่ได้เลือกเมนู SQL เดิม (เราจะใช้ SQL มาตรฐาน)
คำค้นหาบิลด์
ในหน้าต่างตัวแก้ไขคำค้นหา ให้พิมพ์คำค้นหาต่อไปนี้ แล้วคลิก "เรียกใช้" เพื่อเรียกใช้คำค้นหา จากนั้นดูผลลัพธ์ในหน้าต่าง "ผลการค้นหา"
ผู้ป่วยในคำค้นหา
#standardSQL - Query Patients
SELECT
id AS patient_id,
name[safe_offset(0)].given AS given_name,
name[safe_offset(0)].family AS family,
telecom[safe_offset(0)].value AS phone,
birthDate AS birth_date,
deceased.dateTime AS deceased_datetime,
Gender AS fhir_gender_code,
Address[safe_offset(0)].line AS address1_line_1,
Address[safe_offset(0)].city AS address1_city,
Address[safe_offset(0)].state AS address1_state,
Address[safe_offset(0)].postalCode AS address1_postalCode,
Address[safe_offset(0)].country AS address1_country
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Patient` AS Patient
LIMIT 10
การค้นหาใน "ตัวแก้ไขคำค้นหา" และผลลัพธ์:
ผู้ฝึกค้นหา
#standardSQL - Query Practitioners
SELECT
id AS practitioner_id,
name[safe_offset(0)].given AS given_name,
name[safe_offset(0)].family AS family_name,
gender
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Practitioner`
LIMIT 10
ผลการค้นหา
การค้นหาองค์กร
เปลี่ยนรหัสองค์กรให้ตรงกับชุดข้อมูล
#standardSQL - Query Organization
SELECT
id AS org_id,
type[safe_offset(0)].text AS org_type,
name AS org_name,
address[safe_offset(0)].line AS org_addr,
address[safe_offset(0)].city AS org_addr_city,
address[safe_offset(0)].state AS org_addr_state,
address[safe_offset(0)].postalCode AS org_addr_postalCode,
address[safe_offset(0)].country AS org_addr_country
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Organization` AS Organization
WHERE
id = "b81688f5-bd0e-3c99-963f-860d3e90ab5d"
ผลการค้นหา
การค้นหาที่ผู้ป่วยใช้
#standardSQL - Query Encounters by Patient
SELECT
id AS encounter_id,
period.start AS encounter_start,
period.end AS encounter_end,
status AS encounter_status,
class.code AS encounter_type,
subject.patientId as patient_id,
participant[safe_OFFSET(0)].individual.practitionerId as parctitioner_id,
serviceProvider.organizationId as encounter_location_id,
type[safe_OFFSET(0)].text AS encounter_reason
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter` AS Encounter
WHERE
subject.patientId = "900820eb-4166-4981-ae2d-b183a064ac18"
ORDER BY
encounter_end
ผลการค้นหา
รับความยาวเฉลี่ยของ ENCOUNTers ตามประเภท ENCOUNTER
#standardSQL - Get Average length of Encounters by Encounter type
SELECT
class.code encounter_class,
ROUND(AVG(TIMESTAMP_DIFF(TIMESTAMP(period.end), TIMESTAMP(period.start), HOUR)),1) as avg_minutes
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter` AS Encounter
WHERE
period.end >= period.start
GROUP BY
1
ORDER BY
2 DESC
ผลการค้นหา
รับข้อมูลผู้ป่วยทุกคนที่มีคะแนน A1C >= 6.5
# Query Patients who have A1C rate >= 6.5
SELECT
id AS observation_id,
subject.patientId AS patient_id,
context.encounterId AS encounter_id,
value.quantity.value,
value.quantity.unit,
code.coding[safe_offset(0)].code,
code.coding[safe_offset(0)].display AS description
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Observation`
WHERE
code.text like '%A1c/Hemoglobin%' AND
value.quantity.value >= 6.5 AND
status = 'final'
ผลการค้นหา
4. สร้างอินสแตนซ์ AI Platform Notebooks
ทําตามวิธีการในลิงก์นี้เพื่อสร้างอินสแตนซ์ AI Platform Notebooks (JupyterLab) ใหม่
โปรดตรวจสอบว่าได้เปิดใช้ Compute Engine API แล้ว
คุณสามารถเลือก " สร้างสมุดบันทึกใหม่ด้วยตัวเลือกเริ่มต้น" หรือ " สร้างสมุดบันทึกใหม่และระบุตัวเลือกของคุณ"
5. สร้างสมุดบันทึกการวิเคราะห์ข้อมูล
เปิดอินสแตนซ์ AI Platform Notebooks
ในส่วนนี้ เราจะเขียนและเขียนโค้ดสมุดบันทึก Jupyter ใหม่ตั้งแต่ต้น
- เปิดอินสแตนซ์สมุดบันทึกโดยไปที่หน้า AI Platform Notebooks ในคอนโซล Google Cloud Platform ไปที่หน้าสมุดบันทึกของ AI Platform
- เลือก เปิด JupyterLab สำหรับอินสแตนซ์ที่คุณต้องการเปิด
- AI Platform Notebooks จะนำคุณไปยัง URL สำหรับอินสแตนซ์สมุดบันทึก
สร้างสมุดบันทึก
- ใน JupyterLab ให้ไปที่ File -> ใหม่ -> สมุดบันทึก และเลือก Kernel "Python 3" ในป๊อปอัป หรือเลือก "Python 3" ในส่วน Notebook ในหน้าต่าง Launcher เพื่อสร้าง Untitled.ipynbnotebook
- คลิกขวาที่ Untitled.ipynb แล้วเปลี่ยนชื่อสมุดบันทึกเป็น "fhir_data_from_bigquery.ipynb" ดับเบิลคลิกเพื่อเปิด สร้างการค้นหา และบันทึกสมุดบันทึก
- คุณสามารถดาวน์โหลดสมุดบันทึกได้โดยคลิกขวาที่ไฟล์ *.ipynb แล้วเลือกดาวน์โหลดจากเมนู
- คุณยังอัปโหลดสมุดบันทึกที่มีอยู่ได้โดยคลิก "ลูกศรขึ้น"
สร้างและเรียกใช้โค้ดบล็อกแต่ละบล็อกในสมุดบันทึก
คัดลอกและเรียกใช้โค้ดบล็อกที่ให้มาในส่วนนี้ทีละรายการ หากต้องการเรียกใช้โค้ด ให้คลิก "Run" (สามเหลี่ยม)
รับระยะเวลาในการเข้าพักเป็นชั่วโมงสำหรับการพบปะ
from google.cloud import bigquery
client = bigquery.Client()
lengthofstay="""
SELECT
class.code as encounter_class,
period.start as start_timestamp,
period.end as end_timestamp,
TIMESTAMP_DIFF(TIMESTAMP(period.end), TIMESTAMP(period.start), HOUR)
as length_of_stay_in_hours
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter`
WHERE
period.end >= period.start
ORDER BY
4 DESC
LIMIT 10
"""
df = client.query(lengthofstay).to_dataframe()
df.head()
โค้ดและเอาต์พุตของการเรียกใช้
รับการสังเกตการณ์ - ค่าคอเลสเตอรอล
observation="""
SELECT
cc.code loinc_code,
cc.display loinc_name,
approx_quantiles(round(o.value.quantity.value,1),4) as quantiles,
count(*) as num_obs
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Observation` o, o.code.coding cc
WHERE
cc.system like '%loinc%' and lower(cc.display) like '%cholesterol%'
GROUP BY 1,2
ORDER BY 4 desc
"""
df2 = client.query(observation).to_dataframe()
df2.head()
เอาต์พุตของการดำเนินการ:
รับควอนไทล์ที่พบโดยประมาณ
encounters="""
SELECT
encounter_class,
APPROX_QUANTILES(num_encounters, 4) num_encounters_quantiles
FROM (
SELECT
class.code encounter_class,
subject.reference patient_id,
COUNT(DISTINCT id) AS num_encounters
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter`
GROUP BY
1,2
)
GROUP BY 1
ORDER BY 1
"""
df3 = client.query(encounters).to_dataframe()
df3.head()
เอาต์พุตของการดำเนินการ:
ดูระยะเวลาการติดต่อโดยเฉลี่ยเป็นนาที
avgstay="""
SELECT
class.code encounter_class,
ROUND(AVG(TIMESTAMP_DIFF(TIMESTAMP(period.end), TIMESTAMP(period.start), MINUTE)),1) as avg_minutes
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter`
WHERE
period.end >= period.start
GROUP BY
1
ORDER BY
2 DESC
"""
df4 = client.query(avgstay).to_dataframe()
df4.head()
เอาต์พุตของการดำเนินการ:
รับกิจกรรมใกล้ชิดกับผู้ป่วย
patientencounters="""
SELECT
id AS encounter_id,
period.start AS encounter_start,
period.end AS encounter_end,
status AS encounter_status,
class.code AS encounter_type,
subject.patientId as patient_id,
participant[safe_OFFSET(0)].individual.practitionerId as parctitioner_id,
serviceProvider.organizationId as encounter_location_id,
type[safe_OFFSET(0)].text AS encounter_reason
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Encounter` AS Encounter
WHERE
subject.patientId = "900820eb-4166-4981-ae2d-b183a064ac18"
ORDER BY
encounter_end
"""
df5 = client.query(patientencounters).to_dataframe()
df5.head()
เอาต์พุตของการดำเนินการ:
รับองค์กร
orgs="""
SELECT
id AS org_id,
type[safe_offset(0)].text AS org_type,
name AS org_name,
address[safe_offset(0)].line AS org_addr,
address[safe_offset(0)].city AS org_addr_city,
address[safe_offset(0)].state AS org_addr_state,
address[safe_offset(0)].postalCode AS org_addr_postalCode,
address[safe_offset(0)].country AS org_addr_country
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Organization` AS Organization
WHERE
id = "b81688f5-bd0e-3c99-963f-860d3e90ab5d"
"""
df6 = client.query(orgs).to_dataframe()
df6.head()
ผลการดำเนินการ:
รับผู้ป่วย
patients="""
SELECT
id AS patient_id,
name[safe_offset(0)].given AS given_name,
name[safe_offset(0)].family AS family,
telecom[safe_offset(0)].value AS phone,
birthDate AS birth_date,
deceased.dateTime AS deceased_datetime,
Gender AS fhir_gender_code,
Address[safe_offset(0)].line AS address1_line_1,
Address[safe_offset(0)].city AS address1_city,
Address[safe_offset(0)].state AS address1_state,
Address[safe_offset(0)].postalCode AS address1_postalCode,
Address[safe_offset(0)].country AS address1_country
FROM
`hcls-testing-data.fhir_20k_patients_analytics.Patient` AS Patient
LIMIT 10
"""
df7 = client.query(patients).to_dataframe()
df7.head()
ผลการดำเนินการ:
6. สร้างแผนภูมิและกราฟในสมุดบันทึก AI Platform
เรียกใช้เซลล์โค้ดในสมุดบันทึก "fhir_data_from_bigquery.ipynb" เพื่อวาดกราฟแท่ง
เช่น หาความยาวเฉลี่ยของ Encounters ในหน่วยนาที
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
ผลลัพธ์ของโค้ดและการเรียกใช้
7. คอมมิตสมุดบันทึกกับที่เก็บซอร์สของ Cloud
- ในคอนโซล GCP ให้ไปที่ที่เก็บแหล่งที่มา หากใช้งานเป็นครั้งแรก ให้คลิก "เริ่มต้นใช้งาน" จากนั้นคลิก "สร้างที่เก็บ"
- สำหรับครั้งต่อไป ให้ไปที่ GCP -> Cloud Source Repositories แล้วคลิก +เพิ่มที่เก็บเพื่อสร้างที่เก็บใหม่
- เลือก "สร้างที่เก็บใหม่" แล้วคลิกดำเนินการต่อ
- ระบุชื่อที่เก็บและชื่อโปรเจ็กต์ แล้วคลิกสร้าง
- เลือก "โคลนที่เก็บของคุณไปยังที่เก็บ Git ในเครื่อง" จากนั้นเลือกข้อมูลรับรองที่สร้างด้วยตนเอง
- ทำตามขั้นตอนที่ 1 "สร้างและจัดเก็บข้อมูลเข้าสู่ระบบสำหรับ Git" (ดูด้านล่าง) คัดลอกสคริปต์ที่ปรากฏบนหน้าจอ
- เริ่มเซสชันเทอร์มินัลใน Jupyter
- วางคำสั่งทั้งหมดจาก "Configure Git" ไปยังเทอร์มินัล Jupyter
- คัดลอกเส้นทางโคลนของที่เก็บจากที่เก็บแหล่งที่มาของระบบคลาวด์ของ GCP (ขั้นตอนที่ 2 ในภาพหน้าจอด้านล่าง)
- วางคำสั่งนี้ในเทอร์มินัล JupiterLab คำสั่งจะมีลักษณะดังต่อไปนี้
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- "my-ai-notebooks" ระบบจะสร้างโฟลเดอร์ใน Jupyterlab
- ย้ายสมุดบันทึก (fhir_data_from_bigquery.ipynb) ไปยังโฟลเดอร์ "my-ai-notebooks"
- ในเทอร์มินัล Jupyter ให้เปลี่ยนไดเรกทอรีเป็น "cd my-ai-notebooks"
- จัดการการเปลี่ยนแปลงของคุณโดยใช้เทอร์มินัล Jupyter อีกวิธีหนึ่งคือ คุณสามารถใช้ Jupyter UI (คลิกขวาที่ไฟล์ในพื้นที่ "ไม่ได้ติดตาม" เลือก "ติดตาม" จากนั้นไฟล์จะถูกย้ายไปยังพื้นที่ "ติดตาม" และในทางกลับกันด้วยเช่นกัน พื้นที่ที่เปลี่ยนแปลงประกอบด้วยไฟล์ที่แก้ไข)
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- ทำการเปลี่ยนแปลงโดยใช้เทอร์มินัล Jupyter หรือ Jupyter UI (พิมพ์ข้อความ แล้วคลิกปุ่ม "เลือกไว้")
git commit -m "message goes here"
- พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกลโดยใช้เทอร์มินัล Jupyter หรือ Jupyter UI (คลิกไอคอน "พุชการเปลี่ยนแปลงที่คอมมิต" )
git push --all
- ในคอนโซล GCP ให้ไปที่ที่เก็บแหล่งที่มา คลิกที่ my-ai-notebooks โปรดสังเกตว่า "fhir_data_from_bigquery.ipynb" ได้รับการบันทึกในที่เก็บซอร์สของ GCP แล้ว
8. ล้างข้อมูล
หลังจากที่คุณดูบทแนะนำเสร็จแล้ว คุณสามารถล้างทรัพยากรที่สร้างบน GCP เพื่อไม่ให้ใช้โควต้าของคุณจนหมด และระบบจะไม่เรียกเก็บเงินสำหรับทรัพยากรเหล่านั้นในอนาคต เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ใน Codelab นี้ ส่วนต่อไปนี้จะอธิบายวิธีลบหรือปิดแหล่งข้อมูลเหล่านี้
การลบชุดข้อมูล BigQuery
ทำตามวิธีการเหล่านี้เพื่อลบชุดข้อมูล BigQuery ที่คุณสร้างไว้ในบทแนะนำนี้ หรือไปที่คอนโซล BigQuery โดยไปที่โปรเจ็กต์ UnPIN hcls-testing-data หากคุณใช้ชุดข้อมูลทดสอบ fhir_20k_patients_analytics
กำลังปิดการทำงานอินสแตนซ์ AI Platform Notebooks
ทำตามวิธีการในลิงก์นี้ ปิดอินสแตนซ์สมุดบันทึก | AI Platform Notebooks เพื่อปิดอินสแตนซ์ AI Platform Notebooks
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ
วิธีลบโปรเจ็กต์
- ในคอนโซล GCP ให้ไปที่หน้าโปรเจ็กต์ ไปที่หน้าโปรเจ็กต์
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
9. ขอแสดงความยินดี
ขอแสดงความยินดี คุณดำเนินการตาม Code Lab เพื่อเข้าถึง ค้นหา และวิเคราะห์ข้อมูลการดูแลสุขภาพในรูปแบบ FHIR เสร็จสมบูรณ์แล้วโดยใช้ BigQuery และ AI Platform Notebook
คุณเข้าถึงชุดข้อมูล BigQuery สาธารณะใน GCP แล้ว
คุณได้พัฒนาและทดสอบการค้นหา SQL โดยใช้ BigQuery UI
คุณสร้างและเปิดอินสแตนซ์ AI Platform Notebooks
คุณได้ดำเนินการค้นหา SQL ใน JupyterLab และจัดเก็บผลลัพธ์การค้นหาใน Pandas DataFrame
คุณสร้างแผนภูมิและกราฟโดยใช้ Matplotlib.
คุณคอมมิตและพุชสมุดบันทึกไปยัง Cloud Source Repository ใน GCP
ตอนนี้คุณได้ทราบขั้นตอนสำคัญที่จำเป็นต่อการเริ่มต้นเส้นทางการวิเคราะห์ข้อมูลการดูแลสุขอนามัยด้วย BigQuery และสมุดบันทึก AI Platform ใน Google Cloud Platform แล้ว
©Google, Inc. หรือบริษัทในเครือ สงวนลิขสิทธิ์ ห้ามเผยแพร่