Menganalisis Data Klinis menggunakan BigQuery dan AI Platform Notebooks

1. Pengantar

139d6fa46b10ab12.png

Terakhir Diperbarui: 22-9-2022

Codelab ini menerapkan pola untuk mengakses dan menganalisis data layanan kesehatan yang diagregasi di BigQuery menggunakan BigQueryUI dan Notebooks AI Platform. Notebook ini menggambarkan eksplorasi data set data kesehatan besar menggunakan alat yang sudah dikenal seperti Pandas, Matplotlib, dll. di Notebook AI Platform yang mematuhi HIPPA. "Triknya" adalah melakukan bagian pertama agregasi di BigQuery, mendapatkan kembali set data Pandas, lalu menggunakan set data Pandas yang lebih kecil secara lokal. AI Platform Notebooks memberikan pengalaman Jupyter terkelola sehingga Anda tidak perlu menjalankan server notebook sendiri. AI Platform Notebooks terintegrasi dengan baik dengan layanan GCP lainnya seperti BigQuery dan Cloud Storage sehingga Anda dapat memulai perjalanan Analisis Data dan ML di Google Cloud Platform dengan cepat dan mudah.

Dalam codelab ini, Anda akan mempelajari cara:

  • Kembangkan dan uji kueri SQL menggunakan UI BigQuery.
  • Buat dan luncurkan instance AI Platform Notebooks di GCP.
  • Jalankan kueri SQL dari notebook dan simpan hasil kueri di Pandas DataFrame.
  • Buat diagram dan grafik menggunakan Matplotlib.
  • Lakukan commit pada notebook dan kirim ke Cloud Source Repository di GCP.

Apa yang Anda butuhkan untuk menjalankan codelab ini?

  • Anda memerlukan akses ke Project GCP.
  • Anda harus diberi peran Pemilik untuk Project GCP.
  • Anda memerlukan set data layanan kesehatan di BigQuery.

Jika Anda tidak memiliki Project GCP, ikuti langkah-langkah ini untuk membuat Project GCP baru.

2. Penyiapan project

Untuk codelab ini, kita akan menggunakan set data yang ada di BigQuery (hcls-testing-data.fhir_20k_patients_analytics). Set data ini telah diisi otomatis dengan data layanan kesehatan sintetis.

Mendapatkan akses ke set data sintetis

  1. Dari alamat email yang Anda gunakan untuk login ke Konsol Cloud, kirim email ke hcls-solutions-external+subscribe@google.com untuk meminta bergabung.
  2. Anda akan menerima email berisi petunjuk tentang cara mengonfirmasi tindakan tersebut.
  3. Gunakan opsi untuk membalas email guna bergabung dengan grup. JANGAN klik tombol 525a0fa752e0acae.png.
  4. Setelah menerima email konfirmasi, Anda dapat melanjutkan ke langkah berikutnya dalam codelab.

Menyematkan project

  1. Di Konsol GCP, pilih project Anda, lalu buka BigQuery.
  2. Klik dropdown +ADD DATA, lalu pilih "Pin a project" > "Enter project name" .

55257ed5931961c6.png

  1. Masukkan nama project, "hcls-testing-data", lalu klik PIN. Set data pengujian BigQuery "fhir_20k_patients_analytics" tersedia untuk digunakan.

f9038e2a21e143fd.png

3. Mengembangkan kueri menggunakan UI BigQuery

Setelan UI BigQuery

  1. Buka konsol BigQuery dengan memilih BigQuery dari menu GCP di sudut kiri atas ("hamburger").
  2. Di konsol BigQuery, klik Lainnya → Setelan kueri dan pastikan menu Legacy SQL TIDAK dicentang (kita akan menggunakan SQL Standar).

455c6c3ed93e9a63.png

Membangun Kueri

Di jendela Editor kueri, ketik kueri berikut, lalu klik "Jalankan" untuk mengeksekusinya. Kemudian, lihat hasilnya di jendela "Query results".

QUERY PASIEN

#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

Kueri di "Query editor" dan hasilnya:

fb8ef84f0cb583fb.png

PRAKTISI QUERY

#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

Hasil kueri:

9515eb63813617e0.png

ORGANISASI KUERI

Ubah ID organisasi agar cocok dengan set data Anda.

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

Hasil kueri:

79a7afe2dd7fca87.png

QUERY ENCOUNTERS BY PATIENT

#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

Hasil kueri:

18328b6506814084.png

MENDAPATKAN RATA-RATA DURASI PERTEMUAN BERDASARKAN JENIS PERTEMUAN

#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

Hasil kueri:

2087792ce2a67e97.png

MENDAPATKAN SEMUA PASIEN YANG MEMILIKI TINGKAT 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'

Hasil kueri:

65be2450ecd92485.png

4. Buat instance AI Platform Notebooks

Ikuti petunjuk di link ini untuk membuat instance AI Platform Notebooks (JupyterLab) baru.

Pastikan Anda mengaktifkan Compute Engine API.

Anda dapat memilih " Buat notebook baru dengan opsi default" atau " Buat notebook baru dan tentukan opsi Anda".

5. Membangun Notebook Analisis Data

Membuka instance AI Platform Notebooks

Di bagian ini, kita akan membuat dan mengodekan notebook Jupyter baru dari awal.

  1. Buka instance notebook dengan membuka halaman AI Platform Notebooks di Konsol Google Cloud Platform. BUKA HALAMAN AI PLATFORM NOTEBOOKS
  2. Pilih Open JupyterLab untuk instance yang ingin Anda buka.

82457955b63cbffa.png

  1. AI Platform Notebooks mengarahkan Anda ke URL untuk instance notebook Anda.

7705bf2f2d9b1b20.png

Membuat notebook

  1. Di JupyterLab, buka File -> New -> Notebook, lalu pilih Kernel "Python 3" di jendela pop-up, atau pilih "Python 3" di bagian Notebook pada jendela peluncur untuk membuat notebook Untitled.ipynb.

d0ae87f0bdac3205.png

  1. Klik kanan Untitled.ipynb dan ganti nama notebook menjadi "fhir_data_from_bigquery.ipynb". Klik dua kali untuk membukanya, buat kueri, dan simpan notebook.
  2. Anda dapat mendownload notebook dengan mengklik kanan file *.ipynb dan memilih Download dari menu.

fc16337ffd9b1730.png

  1. Anda juga dapat mengupload notebook yang ada dengan mengklik tombol "Panah atas".

49373254fbf1ddf9.png

Bangun dan jalankan setiap blok kode di notebook

Salin dan jalankan setiap blok kode yang disediakan di bagian ini satu per satu. Untuk menjalankan kode, klik "Run" (Segitiga).

e6d8b08c124c675e.png

Mendapatkan durasi menginap untuk kunjungan dalam jam

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

Kode dan output eksekusi:

e7d37ff4d0d91518.png

Mendapatkan Pengamatan - Nilai kolesterol

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

Output eksekusi:

7f43408857c0335.png

Mendapatkan kuantil pertemuan Perkiraan

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

Output eksekusi:

4c2313fae0ebe007.png

Mendapatkan Rata-rata durasi interaksi dalam menit

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

Output eksekusi:

a0cdbe42751f14f7.png

Mendapatkan Pertemuan per pasien

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

Output eksekusi:

3ed6b4d6a1652de0.png

Mendapatkan Organisasi

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

Hasil eksekusi:

886b2e99a889422e.png

Mendapatkan Pasien

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

Hasil eksekusi:

61533f943001c446.png

6. Membuat Diagram dan Grafik di AI Platform Notebooks

Jalankan sel kode di notebook "fhir_data_from_bigquery.ipynb" untuk menggambar grafik batang.

Misalnya, dapatkan durasi rata-rata Pertemuan dalam menit.

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

Kode dan hasil eksekusi:

e48071e58960f124.png

7. Melakukan Commit Notebook ke Cloud Source Repository

  1. Di GCP Console, buka Source Repositories. Jika Anda baru pertama kali menggunakannya, klik Mulai, lalu Buat repositori.

475d9a5c1d5dedc5.png

  1. Untuk selanjutnya, buka GCP -> Cloud Source Repositories, lalu klik +Add repository untuk membuat repositori baru.

44416312bf155af1.png

  1. Pilih "Create a new Repository", lalu klik Continue.
  2. Berikan Nama repositori dan Nama project, lalu klik Buat.

ec2f3eaed74c2e0.png

  1. Pilih "Clone repositori Anda ke repositori Git lokal", lalu pilih Kredensial yang dibuat secara manual.
  2. Ikuti petunjuk langkah 1 "Buat dan simpan kredensial Git" (lihat di bawah). Salin skrip yang muncul di layar Anda.

2089de5541527107.jpeg

  1. Mulai sesi terminal di Jupyter.

a2b49535e36a9d5c.png

  1. Tempel semua perintah dari jendela "Configure Git" ke terminal Jupyter.
  2. Salin jalur clone repositori dari GCP Cloud Source Repositories (langkah 2 pada screenshot di bawah).

ba6a61ae8a4d9f9b.png

  1. Tempel perintah ini di terminal JupiterLab. Perintah akan terlihat seperti berikut:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
  1. Folder "my-ai-notebooks" dibuat di Jupyterlab.

19a2b2c910b3df3.png

  1. Pindahkan notebook Anda (fhir_data_from_bigquery.ipynb) ke folder "my-ai-notebooks".
  2. Di terminal Jupyter, ubah direktori ke "cd my-ai-notebooks".
  3. Siapkan perubahan Anda menggunakan terminal Jupyter. Atau, Anda dapat menggunakan UI Jupyter (klik kanan file di area Tidak Dilacak, pilih Lacak, lalu file dipindahkan ke area Dilacak, dan sebaliknya. Area yang diubah berisi file yang dimodifikasi).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks

5846abefb2451fd1.png

  1. Lakukan perubahan menggunakan terminal Jupyter atau UI Jupyter (ketik pesan, lalu klik tombol "Checked").
git commit -m "message goes here"
  1. Kirim perubahan Anda ke repositori jarak jauh menggunakan terminal Jupyter atau UI Jupyter (klik ikon "push committed changes" 71c61a74bb205ed1.png).
git push --all
  1. Di konsol GCP, buka Source Repositories. Klik my-ai-notebooks. Perhatikan bahwa "fhir_data_from_bigquery.ipynb" kini disimpan di Repositori Sumber GCP.

7a6b802d90743182.jpeg

8. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Platform Anda untuk resource yang digunakan dalam codelab ini, setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang telah Anda buat di GCP sehingga resource tersebut tidak akan menggunakan kuota Anda, dan Anda tidak akan ditagih untuk resource tersebut di masa mendatang. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.

Menghapus set data BigQuery

Ikuti petunjuk ini untuk menghapus set data BigQuery yang Anda buat sebagai bagian dari tutorial ini. Atau, buka konsol BigQuery, batalkan penyematan project hcls-testing-data, jika Anda menggunakan set data pengujian fhir_20k_patients_analytics.

Menonaktifkan instance AI Platform Notebooks

Ikuti petunjuk di link ini Menonaktifkan instance notebook | AI Platform Notebooks untuk menonaktifkan instance AI Platform Notebooks.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. Di Konsol GCP, buka halaman Project. BUKA HALAMAN PROJECT
  2. Dalam daftar project, pilih project yang ingin dihapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

9. Selamat

Selamat, Anda telah berhasil menyelesaikan codelab untuk mengakses, membuat kueri, dan menganalisis data kesehatan berformat FHIR menggunakan BigQuery dan Notebooks AI Platform.

Anda telah mengakses set data BigQuery publik di GCP.

Anda mengembangkan dan menguji kueri SQL menggunakan UI BigQuery.

Anda telah membuat dan meluncurkan instance AI Platform Notebooks.

Anda telah menjalankan kueri SQL di JupyterLab dan menyimpan hasil kueri di DataFrame Pandas.

Anda membuat diagram dan grafik menggunakan Matplotlib.

Anda telah melakukan commit dan mengirim notebook ke Cloud Source Repository di GCP.

Sekarang Anda mengetahui langkah-langkah utama yang diperlukan untuk memulai perjalanan Analisis Data Healthcare dengan BigQuery dan Notebooks AI Platform di Google Cloud Platform.

©Google, Inc. atau afiliasinya. Semua hak dilindungi undang-undang. Jangan disebarluaskan.