1. מבוא
עדכון אחרון: 22.9.2022
ה-Codelab הזה מיישם דפוס לגישה ולניתוח של נתוני בריאות שנצברו ב-BigQuery באמצעות BigQueryUI ו-AI Platform Notebooks. הוא מדגים חקירת נתונים של מערכי נתונים גדולים של שירותי בריאות באמצעות כלים מוכרים כמו Pandas, Matplotlib וכו', ב-notebooks של AI Platform שתואמים ל-HIPPA. ה"טריק" הוא לבצע את החלק הראשון של הצבירה ב-BigQuery, להחזיר מערך נתונים של Pandas ולעבוד באופן מקומי עם מערך הנתונים הקטן יותר של Pandas. notebooks של AI Platform מספקים חוויה מנוהלת של Jupyter, כך שלא צריך להריץ שרתי notebook בעצמכם. השירות 'notebooks של AI Platform' משתלב בצורה טובה עם שירותי GCP אחרים כמו Big Query ו-Cloud Storage, ובעזרתו קל ופשוט להתחיל את תהליך ניתוח הנתונים והלמידת מכונה ב-Google Cloud Platform.
בשיעור ה-Lab הזה תלמדו:
- פיתוח ובדיקה של שאילתות SQL באמצעות BigQuery UI
- ליצור ולהפעיל מכונה של AI Platform Notebooks ב-GCP.
- להריץ שאילתות SQL מה-notebook ולאחסן את תוצאות השאילתות ב-Pandas DataFrame.
- אפשר ליצור תרשימים וגרפים באמצעות Matplotlib.
- שומרים ודוחפים את ה-notebook ל-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.
- לוחצים על התפריט הנפתח +הוספת נתונים ובוחרים באפשרות 'הצמדה של פרויקט'. > "Enter project name" הקצר הזה. התשובות שלך יעזרו לנו להשתפר.
- מזינים את שם הפרויקט hcls-testing-data ולוחצים על קוד אימות. מערך הנתונים לבדיקה ב-BigQuery "fhir_20k_patients_analytics" זמין לשימוש.
3. פיתוח שאילתות באמצעות ממשק המשתמש של BigQuery
הגדרת ממשק המשתמש ב-BigQuery
- כדי לעבור למסוף BigQuery, בוחרים באפשרות BigQuery בתפריט GCP בפינה השמאלית העליונה ('המבורגר').
- במסוף BigQuery, לוחצים על More → Query settings ומוודאים שתפריט ה-SQL מדור קודם לא מסומן (אנחנו נשתמש ב-SQL סטנדרטי).
יצירת שאילתות
בחלון של עורך השאילתות, מקלידים את השאילתה הבאה ולוחצים על Run כדי להפעיל אותה. לאחר מכן, מעיינים בתוצאות בחלון 'Query results'.
משתני השאילתות
#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
תוצאות השאילתה:
קבלת אורך ממוצע של EN ה-Cloud לפי סוג המאגר
#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.
אפשר לבחור " יצירת notebook חדש עם אפשרויות ברירת מחדל או " יוצרים notebook חדש ומציינים את האפשרויות".
5. יצירת notebook של ניתוח נתונים
פתיחת מכונה של notebooks ב-AI Platform
בקטע הזה נכתוב ונתכנת notebook חדש של Jupyter מאפס.
- פותחים מכונה notebook על ידי מעבר לדף notebooks של AI Platform ב-Google Cloud Platform Console. לדף רשימות החשבונות של פלטפורמת ה-AI
- בוחרים באפשרות Open JupyterLab בשביל המכונה שרוצים לפתוח.
- השירות 'notebooks של AI Platform' יפנה אתכם לכתובת URL של המכונה של ה-notebook.
יצירת notebook
- ב-JupyterLab, עוברים אל File -> חדש -> Notebook ובוחרים באפשרות Kernel Python 3 בחלון הקופץ, או בוחרים 'Python 3' בקטע 'Notebook' בחלון מרכז האפליקציות כדי ליצור קובץ Untitled.ipynbnotebook.
- לוחצים לחיצה ימנית על Untitled.ipynb ומשנים את שם ה-notebook ל-'fhir_data_from_bigquery.ipynb". לוחצים לחיצה כפולה כדי לפתוח אותו, ליצור את השאילתות ולשמור את ה-notebook.
- כדי להוריד מחברת, לוחצים לחיצה ימנית על הקובץ *.ipynb ובוחרים באפשרות 'הורדה' מהתפריט.
- ניתן גם להעלות מחברת קיימת על ידי לחיצה על "חץ למעלה" לחצן.
יצירה והפעלה של כל בלוק קוד ב-notebook
מעתיקים ומפעילים כל בלוק קוד שמופיע בקטע הזה, אחד אחרי השני. כדי להריץ את הקוד, לוחצים על 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. יצירת תרשימים ותרשימים ב-notebooks של AI Platform
להריץ תאי קוד ב-notebook שנקרא 'fhir_data_from_bigquery.ipynb" כדי לשרטט תרשים עמודות.
לדוגמה, אפשר לקבל את משך הזמן הממוצע של 'מפגשים' בדקות.
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
הקוד ותוצאות הביצוע:
7. חיוב ה-notebook ל-Cloud Source Repository
- במסוף GCP, עוברים אל Source Repositories. אם זו הפעם הראשונה שאתם משתמשים בו, לוחצים על Get started (תחילת העבודה) ואז על Create repository.
- בפעם הבאה, נכנסים ל-GCP -> Cloud Source Repositories ולוחצים על +Add repository כדי ליצור מאגר חדש.
- בוחרים באפשרות 'יצירת מאגר חדש' ולוחצים על 'המשך'.
- מזינים את שם המאגר ואת שם הפרויקט ולוחצים על Create.
- בוחרים באפשרות Clone your repository to alocal Git repository', ולאחר מכן בוחרים באפשרות ' המדדים שנוצרו באופן ידני'.
- מבצעים את שלב 1: 'יצירה ואחסון של פרטי הכניסה ל-Git' הוראות להתאמה אישית (ראו בהמשך). מעתיקים את הסקריפט שמופיע במסך.
- התחלת סשן במסוף ב-Jupyter.
- להדביק את כל הפקודות מהקובץ Configuration Git בחלון במסוף של Jupyter.
- מעתיקים את נתיב השכפול של המאגר ממאגרי המקור של GCP Cloud (שלב 2 בצילום המסך למטה).
- מדביקים את הפקודה הזו בטרמינל JupiterLab. הפקודה תיראה כך:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- "my-ai-notebooks" תיווצר ב-Jupyterlab.
- מעבירים את ה-notebook (fhir_data_from_bigquery.ipynb) לתיקייה my-ai-notebooks.
- בטרמינל Jupyter, משנים את הספרייה ל-'cd my-ai-notebooks'.
- מתקנים את השינויים באמצעות הטרמינל של Jupyter. לחלופין, אפשר להשתמש בממשק המשתמש של Jupyter (לוחצים לחיצה ימנית על הקבצים באזור 'ללא מעקב', בוחרים באפשרות 'מעקב', הקבצים מועברים לאזור 'במעקב' ולהפך). האזור שהשתנה מכיל את הקבצים ששונו).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- מבצעים את השינויים באמצעות הטרמינל של Jupyter או ממשק המשתמש של Jupyter (מקלידים את ההודעה ולוחצים על הלחצן 'נבדק').
git commit -m "message goes here"
- צריך לדחוף את השינויים למאגר המרוחק באמצעות הטרמינל Jupyter או ממשק המשתמש של Jupyter (לוחצים על הסמל 'התראות על שינויים שבוצעו' ).
git push --all
- במסוף GCP, עוברים אל Source Repositories. לוחצים על my-ai-notebooks. שימו לב ש-"fhir_data_from_bigquery.ipynb" שמור עכשיו ב-GCP Source Repository.
8. הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Google Cloud Platform על המשאבים שבהם השתמשתם ב-Codelab הזה, אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שיצרתם ב-GCP כדי שהם לא ינצלו את המכסה שלכם ולא תחויבו עליהם בעתיד. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחיקת מערך הנתונים ב-BigQuery
יש לפעול לפי ההוראות הבאות כדי למחוק את מערך הנתונים ב-BigQuery שנוצר במסגרת המדריך הזה. אפשרות אחרת היא לעבור למסוף BigQuery, בפרויקט UnPIN hcls-testing-data, אם השתמשתם במערך הנתונים לבדיקה fhir_20k_patients_analytics.
בתהליך השבתה של מכונה של notebooks ב-AI Platform
יש לפעול לפי ההוראות בקישור הזה כיבוי מופע של notebook | notebooks של AI Platform כדי להשבית מכונה של 'notebooks של AI Platform'.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- נכנסים לדף Projects במסוף GCP. לדף 'פרויקטים'
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על מחיקה.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
9. מזל טוב
כל הכבוד, השלמת בהצלחה את שיעור ה-Lab של הקוד כדי לגשת לנתוני בריאות בפורמט FHIR, לשלוח שאילתות ולנתח אותם באמצעות BigQuery ו-AI Platform Notebooks.
נכנסת למערך נתונים ציבורי של BigQuery ב-GCP.
פיתחתם ובדקתם שאילתות SQL באמצעות ממשק המשתמש של BigQuery.
יצרתם והשקתם מכונה של AI Platform Notebooks.
הרצתם שאילתות SQL ב-JupyterLab ואחסנתם את תוצאות השאילתה ב-Pandas DataFrame.
יצרת תרשימים וגרפים באמצעות Matplotlib.
התחייבתם והעברתם את ה-notebook שלכם ל-Cloud Source Repository ב-GCP.
עכשיו אתם יודעים מהם השלבים העיקריים שנדרשים כדי להתחיל את התהליך של ניתוח נתוני בריאות עם BigQuery ו-AI Platform ב-Google Cloud Platform.
©Google, Inc. או השותפים העצמאיים שלה. כל הזכויות שמורות. אסור להפיץ.