BigQuery ve AI Platform Notebooks kullanarak Klinik Verileri Analiz Etme

1. Giriş

139d6fa46b10ab12.png

Son güncelleme tarihi: 22.9.2022

Bu codelab'de BigQuery'de toplanan sağlık verileri verilerine erişmek ve bunları analiz etmek için BigQueryUI ve AI Platform Notebooks'u kullanarak bir kalıp uygular. HIPPA ile uyumlu bir AI Platform Notebooks'ta Pandas ve Matplotlib gibi bilinen araçları kullanarak büyük sağlık veri kümelerinde veri keşfini gösteriyor. "Şok" toplama işleminizin ilk bölümünü BigQuery'de yapmak, bir Pandas veri kümesi elde etmek ve daha sonra küçük Pandas veri kümesiyle yerel olarak çalışmaktır. AI Platform Notebooks, yönetilen bir Jupyter deneyimi sağlar. Böylece not defteri sunucularını sizin çalıştırmanıza gerek kalmaz. AI Platform Notebooks, BigQuery ve Cloud Storage gibi diğer GCP hizmetleriyle iyi entegre edilmiştir. Bu sayede, Google Cloud Platform'da Veri Analizi ve makine öğrenimi yolculuğunuza hızlı ve kolay bir şekilde başlayabilirsiniz.

Bu kod laboratuvarında şunları öğreneceksiniz:

  • BigQuery kullanıcı arayüzünü kullanarak SQL sorguları geliştirin ve test edin.
  • GCP'de bir AI Platform Notebooks örneği oluşturup başlatın.
  • Not defterinden SQL sorguları yürütün ve sorgu sonuçlarını Pandas DataFrame'de depolayın.
  • Matplotlib. kullanarak tablo ve grafikler oluşturun
  • Not defterini GCP'de kaydedin ve bir Cloud Source Repository'ye aktarın.

Bu codelab'i çalıştırmak için nelere ihtiyacınız var?

  • Bir GCP projesine erişiminizin olması gerekir.
  • GCP projesi için size bir Sahip rolü atanmanız gerekir.
  • BigQuery'de sağlık hizmetleri veri kümesine ihtiyacınız vardır.

GCP Projeniz yoksa yeni bir GCP projesi oluşturmak için bu adımları uygulayın.

2. Proje ayarlama

Bu codelab için BigQuery'de mevcut bir veri kümesi kullanacağız (hcls-testing-data.fhir_20k_patients_analytics). Bu veri kümesi yapay sağlık hizmetleri verileriyle önceden doldurulmuştur.

Sentetik veri kümesine erişim elde etme

  1. Cloud Console'a giriş yapmak için kullandığınız e-posta adresinden hcls-solutions-external+subscribe@google.com adresine katılma isteğinde bulunan bir e-posta gönderin.
  2. İşlemi nasıl onaylayacağınıza ilişkin talimatları içeren bir e-posta alacaksınız.
  3. Gruba katılmak için e-postayı yanıtlama seçeneğini kullanın. 525a0fa752e0acae.png düğmesini TIKLAMAYIN.
  4. Onay e-postasını aldıktan sonra, codelab'de bir sonraki adıma geçebilirsiniz.

Projeyi sabitleyin

  1. GCP Console'da projenizi seçin, ardından BigQuery'ye gidin.
  2. +VERİ EKLE açılır menüsünü tıklayın ve "Proje sabitle"yi seçin. > "Proje adını girin" ,

55257ed5931961c6.png

  1. Proje adını "hcls-testing-data" olarak girin ve PIN'i tıklayın. "fhir_20k_patients_analytics" BigQuery test veri kümesi kullanılabilir.

f9038e2a21e143fd.png

3. BigQuery kullanıcı arayüzünü kullanarak sorgu geliştirin

BigQuery kullanıcı arayüzü ayarı

  1. Sol üst köşedeki ("hamburger") GCP menüsünden BigQuery'yi seçerek BigQuery konsoluna gidin.
  2. BigQuery konsolunda Diğer → Sorgu ayarları'nı tıklayın ve Eski SQL menüsünün işaretlenmediğinden emin olun (Standart SQL kullanacağız).

455c6c3ed93e9a63.png

Derleme Sorguları

Sorgu düzenleyici penceresine aşağıdaki sorguyu yazın ve çalıştırmak için "Çalıştır"'ı tıklayın. Ardından, "Sorgu sonuçları" penceresinde sonuçları görüntüleyin.

SORU SATICILARI

#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

"Sorgu düzenleyici"de sorgu ve sonuçlar:

fb8ef84f0cb583fb.png

SORGU UYGULAMALARI

#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

Sorgu sonuçları:

9515eb63813617e0.png

QUERY KURULUŞ

Kuruluş kimliğini veri kümenizle eşleşecek şekilde değiştirin.

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

Sorgu sonuçları:

79a7afe2dd7fca87.png

BEKLEYENLERE GÖRE SORGU KAZANILANLAR

#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

Sorgu sonuçları:

18328b6506814084.png

TÜKETİCİ TÜRÜNE GÖRE ORTALAMA UZUNLUK SAYISI

#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

Sorgu sonuçları:

2087792ce2a67e97.png

A1C ORANI >= 6,5 olan TÜM SATICILARI ALIN

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

Sorgu sonuçları:

65be2450ecd92485.png

4. AI Platform Notebooks örneği oluşturma

Yeni bir AI Platform Notebooks (JupyterLab) örneği oluşturmak için bu bağlantıdaki talimatları uygulayın.

Lütfen Compute Engine API'yi etkinleştirdiğinizden emin olun.

Şunlardan birini seçebilirsiniz: " Varsayılan seçeneklerle yeni bir not defteri oluşturun veya " Yeni bir not defteri oluşturun ve seçeneklerinizi belirtin".

5. Veri Analizi Not Defteri Oluşturma

AI Platform Notebooks örneğini aç

Bu bölümde sıfırdan yeni bir Jupyter not defteri hazırlayıp kodlayacağız.

  1. Google Cloud Platform Console'daki AI Platform Notebooks sayfasına giderek bir not defteri örneği açın. AI PLATFORM NOT KİTAPLARI SAYFASINA GİDİN
  2. Açmak istediğiniz örnek için JupyterLab'i aç'ı seçin.

82457955b63cbffa.png

  1. AI Platform Notebooks, sizi not defteri örneğinizin URL'sine yönlendirir.

7705bf2f2d9b1b20.png

Not defteri oluşturma

  1. JupyterLab'de File -> (Dosya ->) yolunu izleyin. Yeni -> Not Defteri'ni tıklayın ve "Python 3" Kernel'ini seçin. tıklayın veya "Python 3"ü seçin kullanarak bir Untitled.ipynbnotebook oluşturun.

d0ae87f0bdac3205.png

  1. Untitled.ipynb'yi sağ tıklayın ve not defterini "fhir_data_from_bigquery.ipynb" olarak yeniden adlandırın. Çift tıklayarak açın, sorguları oluşturun ve not defterini kaydedin.
  2. *.ipynb dosyasını sağ tıklayıp menüden İndir 'i seçerek bir not defteri indirebilirsiniz.

fc16337ffd9b1730.png

  1. "Yukarı ok"u tıklayarak mevcut bir not defterini de yükleyebilirsiniz düğmesini tıklayın.

49373254fbf1ddf9.png

Her kod bloğunu not defterinde oluşturun ve yürütün

Bu bölümde sağlanan her bir kod bloğunu tek tek kopyalayın ve yürütün. Kodu yürütmek için "Çalıştır"ı tıklayın (Üçgen).

e6d8b08c124c675e.png

Karşılaşmalar için konaklama süresini saat cinsinden öğrenin

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

Kod ve yürütme çıkışı:

e7d37ff4d0d91518.png

Gözlemleri Göster - Kolesterol değerleri

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

Yürütme çıkışı:

7f43408857c0335.png

Yaklaşık karşılaşma yüzdeliklerini alma

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

Yürütme çıkışı:

4c2313fae0ebe007.png

Dakika cinsinden ortalama karşılaşma süresi alın

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

Yürütme çıkışı:

a0cdbe42751f14f7.png

Hasta başına karşılama sayısını alma

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

Yürütme çıkışı:

3ed6b4d6a1652de0.png

Kuruluş Alma

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

Yürütme sonucu:

886b2e99a889422e.png

Hasta Alma

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

Yürütme sonuçları:

61533f943001c446.png

6. AI Platform Notebooks'ta Grafik Oluşturma

"fhir_data_from_bigquery.ipynb" not defterinde kod hücrelerini yürüt çubuk grafik çizmek ister misiniz?

Örneğin, Karşılaşmaların ortalama uzunluğunu dakika cinsinden görebilirsiniz.

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

Kod ve yürütme sonuçları:

e48071e58960f124.png

7. Not Defterini Bulut Kaynak Deposuna Kaydet

  1. GCP Console'da Source Repositories'e gidin. İlk kez kullanıyorsanız Başlat'ı ve ardından Create Repository'i (Kod deposu oluştur) tıklayın.

475d9a5c1d5dedc5.png

  1. Sonraki bir süre için GCP'ye gidin -> Cloud Source Repositories'i seçin ve yeni depo oluşturmak için +Add Repository'i (Kod deposu ekle) tıklayın.

44416312bf155af1.png

  1. "Create a new Repository"'i (Yeni Kod Deposu oluştur) seçin ve ardından Devam'ı tıklayın.
  2. Kod deposu adını ve Proje adını girip Oluştur'u tıklayın.

ec2f3eaed74c2e0.png

  1. "Kod deponuzu yerel Git deposuna klonlayın"ı, ardından Manuel olarak oluşturulan kimlik bilgilerini seçin.
  2. "Git kimlik bilgilerini oluşturma ve depolama" adlı 1. adımı uygulayın. bakın (aşağıya bakın). Ekranınızda görünen komut dosyasını kopyalayın.

2089de5541527107.jpeg

  1. Jupyter'de terminal oturumu başlatın.

a2b49535e36a9d5c.png

  1. "Configure Git" (Git'i Yapılandır) içindeki tüm komutları yapıştırın Jupyter terminaline açılır.
  2. GCP Cloud kaynak depolarından depo klon yolunu kopyalayın (aşağıdaki ekran görüntüsünde 2. adım).

ba6a61ae8a4d9f9b.png

  1. Bu komutu JupiterLab terminaline yapıştırın. Komut şu şekilde görünür:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
  1. "my-ai-not defterlerim" klasörü Jupyterlab'de oluşturulur.

19a2b2c910b3df3.png

  1. Not defterinizi (fhir_data_from_bigquery.ipynb) "my-ai-notebooks" klasörüne taşıyın.
  2. Jupyter terminalinde dizini "cd my-ai-notebooks" olarak değiştirin.
  3. Değişikliklerinizi Jupyter terminalini kullanarak aşamalandırın. Alternatif olarak, Jupyter kullanıcı arayüzünü kullanabilirsiniz (Takip Edilmeyen alanındaki dosyaları sağ tıklayın, Takip Et'i seçin, ardından dosyalar İzlenen alanına taşınır ve bunun tersi de geçerlidir. Değiştirilen alanda, değiştirilen dosyalar yer alır).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks

5846abefb2451fd1.png

  1. Jupyter terminalini veya Jupyter kullanıcı arayüzünü kullanarak değişikliklerinizi kaydedin (mesajı yazın, ardından "İşaretli" düğmesini tıklayın).
git commit -m "message goes here"
  1. Jupyter terminalini veya Jupyter kullanıcı arayüzünü kullanarak değişikliklerinizi uzak depoya aktarın ("yapılan değişiklikleri aktar" simgesini 71c61a74bb205ed1.png tıklayın).
git push --all
  1. GCP konsolunda Source Repositories'e gidin. my-ai-notebooks'u tıklayın. "fhir_data_from_bigquery.ipynb" , artık GCP Kaynak Deposu'na kaydedildi.

7a6b802d90743182.jpeg

8. Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirilmesini önlemek amacıyla eğiticiyi bitirdikten sonra GCP'de oluşturduğunuz kaynakları temizleyebilirsiniz. Böylece, kotanız yer kaplamaz ve gelecekte bunlar için faturalandırılmazsınız. Aşağıdaki bölümlerde bu kaynakların nasıl silineceği veya devre dışı bırakılacağı açıklanmaktadır.

BigQuery veri kümesini silme

Bu eğitim kapsamında oluşturduğunuz BigQuery veri kümesini silmek için bu talimatları uygulayın. Alternatif olarak, fhir_20k_patients_analytics test veri kümesini kullandıysanız BigQuery konsolundaki UnPIN projesi hcls-testing-data sayfasına gidebilirsiniz.

AI Platform Notebooks örneğini kapatma

Şu bağlantıdaki talimatları uygulayın: Not defteri örneğini kapatma | AI Platform Notebooks'u kullanarak bir AI Platform Notebooks örneğini kapatın.

Projeyi silme

Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.

Projeyi silmek için:

  1. GCP Console'da Projeler sayfasına gidin. PROJELER SAYFASINA GİDİN
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

9. Tebrikler

Tebrikler, BigQuery ve AI Platform Notebooks kullanarak FHIR biçimli sağlık hizmeti verilerine erişmek, bu verileri sorgulamak ve analiz etmek için codelab'i başarıyla tamamladınız.

GCP'de herkese açık bir BigQuery veri kümesine eriştiniz.

BigQuery kullanıcı arayüzünü kullanarak SQL sorguları geliştirdiniz ve test ettiniz.

Bir AI Platform Notebooks örneği oluşturup başlattınız.

JupyterLab'de SQL sorgularını yürütüp sorgu sonuçlarını Pandas DataFrame'de depoladınız.

Matplotlib kullanarak şema ve grafikler oluşturdunuz.

Not defterinizi GCP'deki Cloud Source Repository'ye aktarıp taahhüt ettiniz.

Google Cloud Platform'da BigQuery ve AI Platform Notebooks ile Sağlık Hizmetleri Veri Analizi yolculuğunuza başlamak için gereken temel adımları artık biliyorsunuz.

©Google, Inc. veya satış ortakları. Tüm hakları saklıdır. Bu içeriği dağıtmayın.