1. Giriş

Son Güncelleme: 22.09.2022
Bu codelab'de, BigQueryUI ve AI Platform Notebooks kullanarak BigQuery'de toplanan sağlık hizmeti verilerine erişme ve bunları analiz etme modeli uygulanmaktadır. HIPAA'ya uygun bir AI Platform Notebooks'ta Pandas, Matplotlib vb. gibi tanıdık araçları kullanarak büyük sağlık hizmeti veri kümelerinde veri keşfinin nasıl yapılacağını gösterir. İşin "sırrı", toplama işleminizin ilk kısmını BigQuery'de gerçekleştirmek, bir Pandas veri kümesine dönmek ve daha sonra küçük Pandas veri kümesiyle yerel olarak çalışmaktır. AI Platform Notebooks, yönetilen bir Jupyter deneyimi sağlar. Bu nedenle, not defteri sunucularını kendiniz çalıştırmanız gerekmez. AI Platform Notebooks, BigQuery ve Cloud Storage gibi diğer GCP hizmetleriyle iyi entegre olduğundan 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ştirme ve test etme
- GCP'de AI Platform Notebooks örneği oluşturun ve başlatın.
- Not defterinden SQL sorguları yürütün ve sorgu sonuçlarını Pandas DataFrame'de saklayın.
- Matplotlib kullanarak grafikler oluşturma
- Not defterini GCP'deki bir Cloud Source Repository'ye kaydedip aktarın.
Bu codelab'i çalıştırmak için neye ihtiyacınız var?
- GCP projesine erişiminiz olmalıdır.
- GCP projesi için Sahip rolü atanmış olmalıdır.
- BigQuery'de bir sağlık hizmeti veri kümeniz olmalıdır.
GCP projeniz yoksa yeni bir GCP projesi oluşturmak için bu adımları uygulayın.
2. Proje ayarlama
Bu codelab'de BigQuery'deki mevcut bir veri kümesini (hcls-testing-data.fhir_20k_patients_analytics) kullanacağız. Bu veri kümesi, sentetik sağlık verileriyle önceden doldurulmuştur.
Sentezlenmiş veri kümesine erişme
- Cloud Console'da oturum açmak için kullandığınız e-posta adresinden hcls-solutions-external+subscribe@google.com adresine katılma isteği içeren bir e-posta gönderin.
- İşlemi nasıl onaylayacağınızla ilgili talimatları içeren bir e-posta alırsınız.
- Gruba katılmak için e-postayı yanıtlama seçeneğini kullanın.
düğmesini TIKLAMAYIN. - Onay e-postasını aldıktan sonra codelab'deki sonraki adıma geçebilirsiniz.
Projeyi sabitleme
- GCP Console'da projenizi seçin ve BigQuery'ye gidin.
- +VERİ EKLE açılır listesini tıklayın ve "Proje sabitle" > "Proje adı gir"i seçin.

- Proje adını ("hcls-testing-data") girip PIN'i (Sabitle) tıklayın. "fhir_20k_patients_analytics" adlı BigQuery test veri kümesi kullanıma hazırdır.

3. BigQuery kullanıcı arayüzünü kullanarak sorgu geliştirme
BigQuery kullanıcı arayüzü ayarı
- Sol üst köşedeki ("hamburger") GCP menüsünden BigQuery'yi seçerek BigQuery konsoluna gidin.
- BigQuery konsolunda Diğer → Sorgu ayarları'nı tıklayın ve Eski SQL menüsünün İŞARETLENMEDİĞİNDEN emin olun (standart SQL kullanacağız).

Sorgu Oluşturma
Sorgu düzenleyici penceresinde aşağıdaki sorguyu yazın ve çalıştırmak için "Çalıştır"ı tıklayın. Ardından, sonuçları "Sorgu sonuçları" penceresinde görüntüleyin.
HASTALARA SORGU GÖNDERME
#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"deki sorgu ve sonuçlar:

QUERY PRACTITIONERS
#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ı:

KURULUŞ SORGULAMA
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ı:

HASTAYA GÖRE SORGULANAN KARŞILAŞMALAR
#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ı:

KARŞILAŞMA TÜRÜNE GÖRE ORTALAMA KARŞILAŞMA SÜRESİNİ ALMA
#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ı:

A1C ORANI >= 6,5 OLAN TÜM HASTALARI GETİR
# 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ı:

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.
"Varsayılan seçeneklerle yeni bir not defteri oluştur" veya "Yeni bir not defteri oluştur ve seçeneklerini belirt"i seçebilirsiniz.
5. Veri analizi not defteri oluşturma
AI Platform Notebooks örneğini açın.
Bu bölümde, sıfırdan yeni bir Jupyter not defteri oluşturup kodlayacağız.
- Google Cloud Platform Console'da AI Platform Notebooks sayfasına giderek bir not defteri örneği açın. AI PLATFORM NOTEBOOKS SAYFASINA GİDİN
- Açmak istediğiniz örnek için Open JupyterLab'i (JupyterLab'i aç) seçin.

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

Not defteri oluşturma
- JupyterLab'de File -> New -> Notebook'a (Dosya -> Yeni -> Not Defteri) gidin ve pop-up pencerede "Python 3" çekirdeğini seçin veya başlatıcı penceresindeki Not Defteri bölümünde "Python 3"ü seçerek Untitled.ipynb adlı bir not defteri oluşturun.

- Untitled.ipynb dosyasını sağ tıklayın ve not defterini "fhir_data_from_bigquery.ipynb" olarak yeniden adlandırın. Not defterini açmak, sorguları oluşturmak ve not defterini kaydetmek için çift tıklayın.
- *.ipynb dosyasını sağ tıklayıp menüden İndir'i seçerek not defterini indirebilirsiniz.

- "Yukarı ok" düğmesini tıklayarak mevcut bir not defterini de yükleyebilirsiniz.

Not defterindeki her kod bloğunu oluşturup yürütün.
Bu bölümde verilen her kod bloğunu tek tek kopyalayıp çalıştırın. Kodu çalıştırmak için "Çalıştır"ı (üçgen) tıklayın.

Karşılaşmaların konaklama süresini saat cinsinden alma
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ışı:

Gözlemleri alma - 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ışı:

Yaklaşık karşılaşma yüzdelik dilimlerini 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ışı:

Görüşmelerin ortalama uzunluğunu (dakika cinsinden) öğrenme
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ışı:

Hasta başına karşılaşma sayısı
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ışı:

Kuruluşları 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:

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ı:

6. AI Platform Notebooks'ta grafik oluşturma
Çubuk grafik çizmek için "fhir_data_from_bigquery.ipynb" not defterindeki kod hücrelerini çalıştırın.
Örneğin, karşılaşmaların ortalama uzunluğunu dakika cinsinden alın.
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
Kod ve yürütme sonuçları:

7. Not defterini Cloud Source Repository'ye gönderme
- GCP Console'da Source Repositories'e (Kaynak Kodu Depoları) gidin. İlk kez kullanıyorsanız Başlayın'ı, ardından Depo oluştur'u tıklayın.

- Sonraki seferlerde GCP -> Cloud Source Repositories'e gidin ve yeni bir depo oluşturmak için +Depo ekle'yi tıklayın.

- "Yeni bir depo oluştur"u seçin ve Devam'ı tıklayın.
- Depo adını ve proje adını girin, ardından Oluştur'u tıklayın.

- "Clone your repository to a local Git repository" (Deponuzu yerel bir Git deposuna klonlayın) seçeneğini ve ardından Manually generated credentials (Manuel olarak oluşturulan kimlik bilgileri) seçeneğini belirleyin.
- 1. adım olan "Git kimlik bilgileri oluşturma ve depolama" talimatlarını uygulayın (aşağıya bakın). Ekranınızda görünen komut dosyasını kopyalayın.

- Jupyter'da terminal oturumu başlatın.

- "Git'i yapılandırın" pencerenizdeki tüm komutları Jupyter terminaline yapıştırın.
- GCP Cloud Source Repositories'den depo klonlama yolunu kopyalayın (aşağıdaki ekran görüntüsünde 2. adım).

- Bu komutu JupiterLab terminaline yapıştırın. Komut aşağıdaki gibi görünür:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- JupyterLab'de "my-ai-notebooks" klasörü oluşturulur.

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

- Jupyter terminalini veya Jupyter kullanıcı arayüzünü kullanarak değişikliklerinizi işleyin (mesajı yazın, ardından "İşlendi" düğmesini tıklayın).
git commit -m "message goes here"
- Jupyter terminalini veya Jupyter kullanıcı arayüzünü kullanarak değişikliklerinizi uzak depoya gönderin ("Kaydedilen değişiklikleri gönder" simgesini
tıklayın).
git push --all
- GCP Console'da Source Repositories'e gidin. my-ai-notebooks'u tıklayın. "fhir_data_from_bigquery.ipynb" dosyasının artık GCP Kaynak Deposu'na kaydedildiğini unutmayın.

8. Temizleme
Bu codelab'de kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirilmesini önlemek amacıyla, eğitimi tamamladıktan sonra GCP'de oluşturduğunuz kaynakları temizleyebilirsiniz. Böylece bu kaynaklar kotanızı kullanmaz ve gelecekte bu kaynaklar 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ğitimin bir parçası olarak oluşturduğunuz BigQuery veri kümesini silmek için bu talimatları uygulayın. Alternatif olarak, BigQuery konsoluna gidin ve fhir_20k_patients_analytics test veri kümesini kullandıysanız hcls-testing-data projesinin PIN'ini kaldırın.
AI Platform Notebooks örneğini kapatma
Bir AI Platform Notebooks örneğini kapatmak için bu bağlantıdaki talimatları uygulayın: Not defteri örneğini kapatma | AI Platform Notebooks.
Projeyi silme
Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.
Projeyi silmek için:
- GCP Console'da Projeler sayfasına gidin. PROJELER SAYFASINA GİTME
- Proje listesinde, silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın, ardından projeyi silmek için Kapat'ı tıklayın.
9. Tebrikler
Tebrikler. BigQuery ve AI Platform Notebooks kullanarak FHIR biçimli sağlık verilerine erişme, bu verileri sorgulama ve analiz etme konulu kod laboratuvarını başarıyla tamamladınız.
GCP'de herkese açık bir BigQuery veri kümesine eriştiyseniz.
BigQuery kullanıcı arayüzünü kullanarak SQL sorguları geliştirip test ettiniz.
AI Platform Notebooks örneği oluşturup başlattınız.
JupyterLab'de SQL sorguları çalıştırdınız ve sorgu sonuçlarını Pandas DataFrame'de sakladınız.
Matplotlib kullanarak çizelgeler ve grafikler oluşturmuş olmanız gerekir.
Not defterinizi GCP'deki bir Cloud Source Repositories'e kaydedip gönderdiniz.
Artık 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ı biliyorsunuz.
©Google, Inc. veya bağlı kuruluşları. Tüm hakları saklıdır. Dağıtmayın.