داده های بالینی را با استفاده از نوت بوک های پلتفرم BigQuery و AI تجزیه و تحلیل کنید

1. مقدمه

139d6fa46b10ab12.png

آخرین به روز رسانی : 2022-9-22

این آزمایشگاه کد الگویی را برای دسترسی و تجزیه و تحلیل داده های مراقبت های بهداشتی جمع آوری شده در BigQuery با استفاده از نوت بوک های پلتفرم BigQueryUI و AI پیاده سازی می کند. این کاوش داده مجموعه داده‌های بزرگ مراقبت‌های بهداشتی را با استفاده از ابزارهای آشنا مانند پانداها، Matplotlib و غیره در نوت‌بوک‌های پلتفرم هوش مصنوعی سازگار با HIPPA نشان می‌دهد. «ترفند» این است که بخش اول تجمیع خود را در BigQuery انجام دهید، مجموعه داده‌های Pandas را برگردانید و سپس با مجموعه داده‌های Pandas کوچک‌تر به صورت محلی کار کنید. نوت‌بوک‌های پلتفرم هوش مصنوعی تجربه مدیریت‌شده Jupyter را فراهم می‌کنند و بنابراین نیازی به اجرای سرورهای نوت‌بوک ندارید. نوت‌بوک‌های پلتفرم هوش مصنوعی به خوبی با سایر سرویس‌های GCP مانند Big Query و Cloud Storage ادغام شده‌اند که شروع سریع و ساده سفر تجزیه و تحلیل داده و ML خود را در Google Cloud Platform می‌کند.

در این آزمایشگاه کد یاد خواهید گرفت که:

  • پرس و جوهای SQL را با استفاده از BigQuery UI توسعه و آزمایش کنید.
  • یک نمونه نوت بوک پلتفرم هوش مصنوعی در GCP ایجاد و راه اندازی کنید.
  • پرس و جوهای SQL را از نوت بوک اجرا کنید و نتایج پرس و جو را در Pandas DataFrame ذخیره کنید.
  • نمودارها و نمودارها را با استفاده از Matplotlib ایجاد کنید.
  • نوت بوک را به یک مخزن Cloud Source در GCP متعهد و فشار دهید.

برای اجرای این کد لبه به چه چیزی نیاز دارید؟

  • شما نیاز به دسترسی به یک پروژه GCP دارید.
  • باید نقش مالک برای پروژه GCP به شما اختصاص داده شود.
  • شما به یک مجموعه داده مراقبت های بهداشتی در BigQuery نیاز دارید.

اگر پروژه GCP ندارید، این مراحل را برای ایجاد یک پروژه GCP جدید دنبال کنید.

2. راه اندازی پروژه

برای این آزمایشگاه کد، از یک مجموعه داده موجود در BigQuery استفاده خواهیم کرد ( hcls-testing-data.fhir_20k_patients_analytics ). این مجموعه داده با داده های بهداشتی مصنوعی از قبل پر شده است.

به مجموعه داده مصنوعی دسترسی پیدا کنید

  1. از آدرس ایمیلی که برای ورود به کنسول Cloud استفاده می‌کنید، یک ایمیل به hcls-solutions-external+subscribe@google.com ارسال کنید تا بپیوندید.
  2. شما یک ایمیل حاوی دستورالعمل هایی در مورد نحوه تایید عمل دریافت خواهید کرد.
  3. برای عضویت در گروه از گزینه پاسخ به ایمیل استفاده کنید. روی آن کلیک نکنید 525a0fa752e0acae.png دکمه
  4. پس از دریافت ایمیل تأیید، می‌توانید به مرحله بعدی در لبه کد بروید.

پروژه را پین کنید

  1. در کنسول GCP، پروژه خود را انتخاب کنید، سپس به BigQuery بروید.
  2. روی منوی بازشو +ADD DATA کلیک کنید و "Pin a project" > "Enter project name" را انتخاب کنید.

55257ed5931961c6.png

  1. نام پروژه " hcls-testing-data " را وارد کنید، سپس روی PIN کلیک کنید. مجموعه داده آزمایشی BigQuery " fhir_20k_patients_analytics " برای استفاده در دسترس است.

f9038e2a21e143fd.png

3. پرس و جوها را با استفاده از رابط کاربری BigQuery توسعه دهید

تنظیم رابط کاربری BigQuery

  1. با انتخاب BigQuery از منوی GCP گوشه بالا ("همبرگر") به کنسول BigQuery بروید.
  2. در کنسول BigQuery، روی More → Query settings کلیک کنید و مطمئن شوید که منوی Legacy SQL علامت نخورده است ( ما از استاندارد SQL استفاده خواهیم کرد ).

455c6c3ed93e9a63.png

ساخت کوئری ها

در پنجره Query Editor کوئری زیر را تایپ کرده و روی Run کلیک کنید تا اجرا شود. سپس، نتایج را در پنجره "نتایج پرس و جو" مشاهده کنید.

پرس و جو از بیماران

#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

پرس و جو در "ویرایشگر پرس و جو" و نتایج:

fb8ef84f0cb583fb.png

پرس و جو از پزشکان

#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

نتایج پرس و جو:

9515eb63813617e0.png

QUERY ORGANIZATION

شناسه سازمان را برای مطابقت با مجموعه داده خود تغییر دهید.

#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"

نتایج پرس و جو:

79a7afe2dd7fca87.png

برخوردهای پرس و جو توسط بیمار

#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

نتایج پرس و جو:

18328b6506814084.png

میانگین طول برخوردها را بر اساس نوع برخورد دریافت کنید

#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

نتایج پرس و جو:

2087792ce2a67e97.png

همه بیمارانی که نرخ 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'

نتایج پرس و جو:

65be2450ecd92485.png

4. نمونه نوت بوک های پلتفرم هوش مصنوعی را ایجاد کنید

دستورالعمل‌های موجود در این پیوند را دنبال کنید تا نمونه جدیدی از نوت‌بوک‌های پلتفرم هوش مصنوعی (JupyterLab) ایجاد کنید.

لطفاً مطمئن شوید که Compute Engine API را فعال کرده اید .

می‌توانید « ایجاد یک نوت‌بوک جدید با گزینه‌های پیش‌فرض » یا « ایجاد یک نوت‌بوک جدید و گزینه‌های خود را مشخص کنید » را انتخاب کنید.

5. یک دفترچه یادداشت تجزیه و تحلیل داده بسازید

نمونه نوت بوک های پلتفرم هوش مصنوعی را باز کنید

در این بخش، یک نوت بوک جدید Jupyter را از ابتدا تالیف و کدنویسی می کنیم.

  1. با رفتن به صفحه Notebooks پلتفرم هوش مصنوعی در کنسول Google Cloud Platform، یک نمونه نوت بوک را باز کنید. به صفحه نوت بوک های پلت فرم هوش مصنوعی بروید
  2. برای نمونه ای که می خواهید باز شود Open JupyterLab را انتخاب کنید.

82457955b63cbffa.png

  1. AI Platform Notebooks شما را به یک URL برای نمونه نوت بوک خود هدایت می کند.

7705bf2f2d9b1b20.png

یک دفترچه یادداشت بسازید

  1. در JupyterLab، به File -> New -> Notebook بروید و هسته "Python 3" را در پنجره بازشو انتخاب کنید، یا "Python 3" را در بخش Notebook در پنجره راه‌انداز انتخاب کنید تا Untitled.ipynbnotebook ایجاد کنید.

d0ae87f0bdac3205.png

  1. بر روی Untitled.ipynb کلیک راست کرده و نام نوت بوک را به "fhir_data_from_bigquery.ipynb" تغییر دهید. برای باز کردن آن، ساخت کوئری ها و ذخیره نوت بوک، دوبار کلیک کنید.
  2. می‌توانید با کلیک راست روی فایل *.ipynb یک نوت‌بوک را دانلود کنید و از منو گزینه Download را انتخاب کنید.

fc16337ffd9b1730.png

  1. همچنین می توانید یک نوت بوک موجود را با کلیک بر روی دکمه "پیکان بالا" آپلود کنید.

49373254fbf1ddf9.png

هر بلوک کد را در نوت بوک بسازید و اجرا کنید

هر بلوک کد ارائه شده در این بخش را یکی یکی کپی و اجرا کنید. برای اجرای کد روی Run (مثلث) کلیک کنید.

e6d8b08c124c675e.png

مدت اقامت برای برخوردها را بر حسب ساعت دریافت کنید

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()

کد و خروجی اجرا:

e7d37ff4d0d91518.png

دریافت مشاهدات - مقادیر کلسترول

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()

خروجی اجرا:

7f43408857c0335.png

چندک های تقریبی برخورد را دریافت کنید

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()

خروجی اجرا:

4c2313fae0ebe007.png

میانگین طول مدت برخوردها را در چند دقیقه دریافت کنید

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()

خروجی اجرا:

a0cdbe42751f14f7.png

برای هر بیمار برخورد دریافت کنید

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()

خروجی اجرا:

3ed6b4d6a1652de0.png

سازمان ها را دریافت کنید

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()

نتیجه اجرا:

886b2e99a889422e.png

بیماران را دریافت کنید

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()

نتایج اجرا:

61533f943001c446.png

6. نمودارها و نمودارها را در نوت بوک های پلتفرم هوش مصنوعی ایجاد کنید

سلول های کد را در نوت بوک "fhir_data_from_bigquery.ipynb" برای رسم نمودار میله ای اجرا کنید.

برای مثال، میانگین طول Encounter را بر حسب دقیقه بدست آورید.

df4.plot(kind='bar', x='encounter_class', y='avg_minutes');

نتایج کد و اجرا:

e48071e58960f124.png

7. Notebook را به مخزن Cloud Source اختصاص دهید

  1. در کنسول GCP، به مخازن منبع بروید. اگر اولین باری است که از آن استفاده می کنید، روی Get Start و سپس Create Repository کلیک کنید.

475d9a5c1d5dedc5.png

  1. برای مدتی بعد، به GCP -> Cloud Source Repositories بروید و برای ایجاد یک مخزن جدید روی +Add Repository کلیک کنید.

44416312bf155af1.png

  1. "Create a new Repository" را انتخاب کنید، سپس روی Continue کلیک کنید.
  2. نام مخزن و نام پروژه را وارد کنید، سپس روی ایجاد کلیک کنید.

ec2f3eaed74c2e0.png

  1. «Clone your repository to a local Git repository» را انتخاب کنید، سپس Autoly generated credentials را انتخاب کنید.
  2. دستورالعمل‌های مرحله 1 «ایجاد و ذخیره اعتبار Git» را دنبال کنید (به زیر مراجعه کنید). اسکریپتی که روی صفحه نمایش شما ظاهر می شود را کپی کنید.

2089de5541527107.jpeg

  1. شروع جلسه ترمینال در Jupyter.

a2b49535e36a9d5c.png

  1. تمام دستورات را از پنجره "Configure Git" خود در ترمینال Jupyter قرار دهید.
  2. مسیر شبیه سازی مخزن را از مخازن منبع GCP Cloud کپی کنید (مرحله 2 در تصویر زیر).

ba6a61ae8a4d9f9b.png

  1. این دستور را در ترمینال JupiterLab قرار دهید. دستور به شکل زیر خواهد بود:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
  1. پوشه "my-ai-notebooks" در Jupyterlab ایجاد شده است.

19a2b2c910b3df3.png

  1. نوت بوک خود (fhir_data_from_bigquery.ipynb) را به پوشه "my-ai-notebooks" منتقل کنید.
  2. در ترمینال Jupyter، دایرکتوری را به "cd my-ai-notebooks" تغییر دهید.
  3. تغییرات خود را با استفاده از ترمینال Jupyter تنظیم کنید. همچنین می‌توانید از Jupyter UI استفاده کنید (روی فایل‌ها در ناحیه Untracked کلیک راست کنید، Track را انتخاب کنید، سپس فایل‌ها به منطقه Tracked منتقل می‌شوند و بالعکس. منطقه تغییر یافته حاوی فایل‌های اصلاح‌شده است).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks

5846abefb2451fd1.png

  1. تغییرات خود را با استفاده از ترمینال Jupyter یا Jupyter UI انجام دهید (پیام را تایپ کنید، سپس روی دکمه "بررسی شده" کلیک کنید).
git commit -m "message goes here"
  1. تغییرات خود را با استفاده از ترمینال Jupyter یا Jupyter UI به مخزن راه دور فشار دهید (روی نماد "فشار تغییرات انجام شده" کلیک کنید 71c61a74bb205ed1.png ).
git push --all
  1. در کنسول GCP، به مخازن منبع بروید. روی my-ai-notebooks کلیک کنید. توجه داشته باشید که "fhir_data_from_bigquery.ipynb" اکنون در مخزن منبع GCP ذخیره شده است.

7a6b802d90743182.jpeg

8. پاکسازی

برای جلوگیری از تحمیل هزینه به حساب Google Cloud Platform شما برای منابع استفاده شده در این کد لبه، پس از اتمام آموزش، می توانید منابعی را که در GCP ایجاد کرده اید پاک کنید تا سهمیه شما را نگیرند و برنده شوید در آینده برای آنها صورتحساب دریافت نمی شود. بخش‌های زیر نحوه حذف یا خاموش کردن این منابع را توضیح می‌دهند.

حذف مجموعه داده BigQuery

برای حذف مجموعه داده BigQuery که به عنوان بخشی از این آموزش ایجاد کرده اید، این دستورالعمل ها را دنبال کنید. یا اگر از مجموعه داده آزمایشی fhir_20k_patients_analytics استفاده کرده اید، به کنسول BigQuery بروید، پروژه UnPIN hcls-testing-data .

خاموش کردن نمونه نوت‌بوک‌های پلتفرم هوش مصنوعی

دستورالعمل های موجود در این پیوند را دنبال کنید . خاموش کردن یک نمونه نوت بوک | نوت بوک های پلتفرم هوش مصنوعی برای خاموش کردن نمونه نوت بوک های پلتفرم هوش مصنوعی.

حذف پروژه

ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.

برای حذف پروژه:

  1. در کنسول GCP، به صفحه پروژه ها بروید. به صفحه پروژه ها بروید
  2. در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و روی Delete کلیک کنید.
  3. در گفتگو، شناسه پروژه را تایپ کنید، سپس روی Shut down کلیک کنید تا پروژه حذف شود.

9. تبریک می گویم

تبریک می‌گوییم، شما آزمایشگاه کد را برای دسترسی، پرس و جو و تجزیه و تحلیل داده‌های مراقبت‌های بهداشتی با فرمت FHIR با استفاده از نوت‌بوک‌های پلتفرم BigQuery و AI با موفقیت تکمیل کردید.

شما به یک مجموعه داده عمومی BigQuery در GCP دسترسی پیدا کردید.

شما پرس و جوهای SQL را با استفاده از BigQuery UI ایجاد و آزمایش کردید.

شما یک نمونه نوت بوک پلتفرم هوش مصنوعی ایجاد و راه اندازی کردید.

شما کوئری های SQL را در JupyterLab اجرا کردید و نتایج پرس و جو را در Pandas DataFrame ذخیره کردید.

شما نمودارها و نمودارها را با استفاده از Matplotlib ایجاد کردید.

شما متعهد شده اید و نوت بوک خود را به یک مخزن Cloud Source در GCP منتقل کرده اید.

اکنون مراحل کلیدی لازم برای شروع سفر تجزیه و تحلیل داده‌های بهداشت و درمان خود را با نوت‌بوک‌های پلتفرم BigQuery و AI در پلتفرم Google Cloud می‌دانید.

©Google، Inc. یا شرکت های وابسته به آن. تمامی حقوق محفوظ است. توزیع نکنید.