Menganalisis Data Klinis menggunakan BigQuery dan AI Platform Notebooks

1. Pengantar

139d6fa46b10ab12.pngS

Terakhir diperbarui: 22-9-2022

Codelab ini menerapkan pola untuk mengakses dan menganalisis data layanan kesehatan yang digabungkan di BigQuery menggunakan BigQueryUI dan AI Platform Notebooks. Studi ini menggambarkan eksplorasi data dari set data layanan kesehatan berskala besar menggunakan alat yang sudah dikenal seperti Pandas, Matplotlib, dll. dalam AI Platform Notebooks yang sesuai dengan HIPPA. "Trik" adalah melakukan bagian pertama dari agregasi di BigQuery, mendapatkan kembali {i>dataset<i} Pandas, lalu bekerja dengan {i>dataset<i} Pandas yang lebih kecil secara lokal. AI Platform Notebooks memberikan pengalaman Jupyter yang terkelola sehingga Anda tidak perlu menjalankan server notebook sendiri. AI Platform Notebooks terintegrasi secara baik dengan layanan GCP lainnya seperti Big Query dan Cloud Storage, yang mempercepat dan mempermudah Anda untuk memulai perjalanan Analisis Data dan ML di Google Cloud Platform.

Dalam codelab ini, Anda akan mempelajari cara:

  • Kembangkan dan uji kueri SQL menggunakan UI BigQuery.
  • Buat dan luncurkan instance AI Platform Notebooks di GCP.
  • Menjalankan kueri SQL dari notebook dan menyimpan hasil kueri di Pandas DataFrame.
  • Buat diagram dan grafik menggunakan Matplotlib.
  • Commit dan kirim notebook ke Cloud Source Repository di GCP.

Apa yang Anda perlukan untuk menjalankan codelab ini?

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

Jika Anda tidak memiliki Project GCP, ikuti langkah-langkah berikut 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 izin bergabung.
  2. Anda akan menerima email berisi petunjuk tentang cara mengonfirmasi tindakan tersebut.
  3. Gunakan opsi untuk membalas email agar bergabung dengan grup. JANGAN klik tombol 525a0fa752e0acae.pngS.
  4. Setelah menerima email konfirmasi, Anda dapat melanjutkan ke langkah berikutnya di codelab.

Menyematkan project

  1. Di GCP Console, pilih project Anda, lalu buka BigQuery.
  2. Klik dropdown +ADD DATA, lalu pilih "Pin a project" &gt; "Masukkan nama project" kami.

55257ed5931961c6.pngS

  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. Masuk ke konsol BigQuery dengan memilih BigQuery dari menu GCP di sudut kiri atas ("hamburger").
  2. Di konsol BigQuery, klik More → Query settings dan pastikan menu Legacy SQL TIDAK dicentang (kami akan menggunakan Standard SQL).

455c6c3ed93e9a63.pngS

Membuat Kueri

Di jendela Query editor, ketik kueri berikut lalu klik "Run" untuk menjalankannya. Kemudian, lihat hasilnya di jendela "Query results".

PASIEN QUERY

#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 hasil:

fb8ef84f0cb583fb.png

PRAKTIKER 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.pngS

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.pngS

PENGHITUNGAN KUERI MENURUT PASIEN

#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.pngS

DAPATKAN PANJANG ENCOUNTER RATA-RATA BERDASARKAN JENIS 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

Hasil kueri:

2087792ce2a67e97.pngS

DAPATKAN SEMUA PASIEN YANG MEMILIKI TARIF 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.pngS

4. Membuat instance AI Platform Notebooks

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

Pastikan untuk mengaktifkan Compute Engine API.

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

5. Membuat Notebook Analisis Data

Membuka instance AI Platform Notebooks

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

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

82457955b63cbffa.png

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

7705bf2f2d9b1b20.pngS

Membuat notebook

  1. Di JupyterLab, buka File -> Baru -> Notebook dan pilih Kernel "Python 3" di pop-up, atau pilih "Python 3" di bawah bagian Notebook pada jendela peluncur untuk membuat Untitled.ipynbnotebook.

d0ae87f0bdac3205.png

  1. Klik kanan Untitled.ipynb dan ganti nama {i>notebook<i} menjadi "fhir_data_from_bigquery.ipynb". Klik dua kali untuk membukanya, membuat kueri, dan menyimpan notebook.
  2. Anda dapat mengunduh notebook dengan mengklik kanan file *.ipynb dan pilih Download dari menu.

fc16337ffd9b1730.png

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

49373254fbf1ddf9.pngS

Membangun dan menjalankan 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

Dapatkan lama menginap untuk pertemuan 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.pngS

Mendapatkan Perkiraan kuantil pertemuan

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.pngS

Dapatkan Rata-rata durasi pertemuan dalam hitungan 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

Dapatkan 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.pngS

Dapatkan 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.pngS

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.pngS

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 Encounters dalam menit.

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

Hasil kode dan eksekusi:

e48071e58960f124.png

7. Notebook Commit ke Cloud Source Repository

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

475d9a5c1d5dedc5.pngS

  1. Untuk lain waktu, buka GCP -> Cloud Source Repositories, lalu klik +Tambahkan repositori untuk membuat repositori baru.

44416312bf155af1.png

  1. Pilih "Create a new Repository", lalu klik Continue.
  2. Masukkan Repository name dan Project name, lalu klik Create.

ec2f3eaed74c2e0.png

  1. Pilih "Clone your repository to a local Git repository", lalu pilih Manually generated credentials.
  2. Ikuti langkah 1 "Membuat dan menyimpan kredensial Git" petunjuk (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 "Configure Git" Anda ke terminal Jupyter.
  2. Salin jalur clone repositori dari repositori sumber Cloud GCP (langkah 2 dalam 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. "my-ai-notebooks" folder dibuat di Jupyterlab.

19a2b2c910b3df3.pngS

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

5846abefb2451fd1.pngS

  1. Commit perubahan Anda menggunakan terminal Jupyter atau UI Jupyter (ketik pesan, lalu klik tombol "Diperiksa").
git commit -m "message goes here"
  1. Kirim perubahan Anda ke repositori jarak jauh menggunakan terminal Jupyter atau UI Jupyter (klik ikon "push commit changes" 71c61a74bb205ed1.pngS).
git push --all
  1. Di konsol GCP, buka Source Repositories. Klik my-ai-notebooks. Perhatikan bahwa "fhir_data_from_bigquery.ipynb" kini disimpan di Source Repository 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 dibuat di GCP sehingga tidak menghabiskan kuota, dan Anda tidak akan ditagih di masa mendatang. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource tersebut.

Menghapus set data BigQuery

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

Mematikan instance AI Platform Notebooks

Ikuti petunjuk di link ini Mematikan 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 GCP Console, buka halaman Project. BUKA HALAMAN PROJECT
  2. Dalam daftar project, pilih project yang ingin dihapus, lalu klik Hapus.
  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 layanan kesehatan berformat FHIR menggunakan BigQuery dan AI Platform Notebooks.

Anda telah mengakses set data BigQuery publik di GCP.

Anda telah 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 Pandas DataFrame.

Anda membuat diagram dan grafik menggunakan Matplotlib.

Anda meng-commit dan mengirim notebook Anda ke Cloud Source Repository di GCP.

Anda sekarang telah mengetahui langkah-langkah utama yang diperlukan untuk memulai perjalanan Analisis Data Layanan Kesehatan dengan BigQuery dan AI Platform Notebooks di Google Cloud Platform.

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