1. Pengantar

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
- Dari alamat email yang Anda gunakan untuk login ke Konsol Cloud, kirim email ke hcls-solutions-external+subscribe@google.com untuk meminta bergabung.
- Anda akan menerima email berisi petunjuk tentang cara mengonfirmasi tindakan tersebut.
- Gunakan opsi untuk membalas email guna bergabung dengan grup. JANGAN klik tombol
. - Setelah menerima email konfirmasi, Anda dapat melanjutkan ke langkah berikutnya dalam codelab.
Menyematkan project
- Di Konsol GCP, pilih project Anda, lalu buka BigQuery.
- Klik dropdown +ADD DATA, lalu pilih "Pin a project" > "Enter project name" .

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

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

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:

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:

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:

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:

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:

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:

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.
- Buka instance notebook dengan membuka halaman AI Platform Notebooks di Konsol Google Cloud Platform. BUKA HALAMAN AI PLATFORM NOTEBOOKS
- Pilih Open JupyterLab untuk instance yang ingin Anda buka.

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

Membuat notebook
- 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.

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

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

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

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:

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:

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:

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:

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:

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:

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:

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:

7. Melakukan Commit Notebook ke Cloud Source Repository
- Di GCP Console, buka Source Repositories. Jika Anda baru pertama kali menggunakannya, klik Mulai, lalu Buat repositori.

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

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

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

- Mulai sesi terminal di Jupyter.

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

- 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
- Folder "my-ai-notebooks" dibuat di Jupyterlab.

- Pindahkan notebook Anda (fhir_data_from_bigquery.ipynb) ke folder "my-ai-notebooks".
- Di terminal Jupyter, ubah direktori ke "cd my-ai-notebooks".
- 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

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

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:
- Di Konsol GCP, buka halaman Project. BUKA HALAMAN PROJECT
- Dalam daftar project, pilih project yang ingin dihapus, lalu klik Delete.
- 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.