1. Wprowadzenie
Ostatnia aktualizacja: 22.09.2022
W ramach tego ćwiczenia w Codelabs wdrożysz wzorzec uzyskiwania dostępu do danych o stanie zdrowia zagregowanych w BigQuery i ich analizowania za pomocą BigQueryUI i notatników AI Platform. Pokazuje on eksplorację danych w dużych zbiorach danych z sektora opieki zdrowotnej przy użyciu znanych narzędzi, takich jak Pandas czy Matplotlib, w notatkach AI Platform zgodnych z HIPPA. „Sztuczka” pierwszą część agregacji w BigQuery, odzyskanie zbioru danych Pandas, a następnie lokalną pracę z mniejszym zbiorem danych Pandas. Notatniki w AI Platform udostępniają zarządzane środowisko Jupyter, więc nie musisz samodzielnie uruchamiać serwerów notatników. Usługa Notatniki w AI Platform jest dobrze zintegrowana z innymi usługami GCP, takimi jak Big Query czy Cloud Storage, dzięki czemu możesz szybko i łatwo zacząć korzystać z analizy danych i systemów uczących się w Google Cloud Platform.
Z tego modułu nauczysz się:
- Twórz i testuj zapytania SQL za pomocą interfejsu użytkownika BigQuery.
- Utwórz i uruchom w GCP instancję Notatników w AI Platform.
- Uruchamiaj zapytania SQL z notatnika i zapisuj wyniki zapytań w Pandas DataFrame.
- Twórz wykresy w Matplotlib.
- Zatwierdź i przekaż notatnik do repozytorium Cloud Source Repositories w GCP.
Czego potrzebujesz do uruchomienia tego ćwiczenia z programowania?
- Musisz mieć dostęp do projektu GCP.
- Musisz mieć przypisaną rolę właściciela projektu GCP.
- Musisz mieć zbiór danych dotyczących opieki zdrowotnej w BigQuery.
Jeśli nie masz projektu GCP, wykonaj te czynności, aby go utworzyć.
2. Konfigurowanie projektu
W tym ćwiczeniu w programowaniu użyjemy istniejącego zbioru danych w BigQuery (hcls-testing-data.fhir_20k_patients_analytics). Ten zbiór danych jest wstępnie wypełniony syntetycznymi danymi o stanie zdrowia.
Uzyskiwanie dostępu do syntetycznego zbioru danych
- Korzystając z adresu e-mail, którego używasz do logowania się w konsoli Cloud, wyślij na hcls-solutions-external+subscribe@google.com e-maila z prośbą o dołączenie.
- Otrzymasz e-maila z instrukcjami, jak potwierdzić tę czynność.
- Użyj tej opcji, by odpowiedzieć na e-maila, aby dołączyć do grupy. NIE klikaj przycisku .
- Po otrzymaniu e-maila z potwierdzeniem możesz przejść do następnego kroku ćwiczenia z programowania.
Przypnij projekt
- W konsoli GCP wybierz projekt i otwórz BigQuery.
- Kliknij menu +DODAJ DANE i wybierz „Przypnij projekt”. > „Wpisz nazwę projektu” ,
- Wpisz nazwę projektu „hcls-testing-data”, a następnie kliknij Kod PIN. Testowy zbiór danych BigQuery „fhir_20k_patients_analytics” jest dostępna do użycia.
3. Tworzenie zapytań za pomocą interfejsu BigQuery
Ustawienie interfejsu BigQuery
- Otwórz konsolę BigQuery, wybierając BigQuery w menu GCP w lewym górnym rogu („hamburger”).
- W konsoli BigQuery kliknij Więcej → Ustawienia zapytania i upewnij się, że menu starszej wersji SQL NIE jest zaznaczone (będziemy korzystać ze standardowej wersji SQL).
Tworzenie zapytań
W oknie edytora zapytań wpisz podane niżej zapytanie i kliknij „Uruchom”, aby je wykonać. Następnie wyświetl wyniki w oknie „Wyniki zapytania”.
ZAPYTANIE PACYFIKÓW
#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
Zapytanie w „Edytorze zapytań” i wyników:
MINIATURY ZAPYTAŃ
#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
Wyniki zapytania:
ORGANIZACJA ZAPYTAŃ
Zmień identyfikator organizacji, aby pasował do zbioru danych.
#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"
Wyniki zapytania:
REKLAMY ZAPYTAŃ WEDŁUG PATYENTA
#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
Wyniki zapytania:
UZYSKAJ ŚREDNI DŁUGOŚĆ ENCOUNTERÓW WEDŁUG TYPU ENCOUNTERA
#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
Wyniki zapytania:
UZYSKAJ WSZYSTKICH PRACOWNIKÓW, KTÓRE MAJĄ CZĘSTOTLIWOŚĆ 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'
Wyniki zapytania:
4. Tworzenie instancji notatek w AI Platform
Wykonaj instrukcje podane w tym linku, aby utworzyć nową instancję Notatników platformy AI (JupyterLab).
Pamiętaj, aby włączyć Compute Engine API.
Możesz wybrać Utwórz nowy notatnik z opcjami domyślnymi lub „ Utwórz nowy notatnik i określ swoje opcje”.
5. Tworzenie notatnika analizy danych
Otwórz instancję Notatników w AI Platform
W tej sekcji utworzymy od podstaw nowy notatnik Jupyter i zakodujemy go.
- Otwórz instancję notatnika, przechodząc na stronę Notatniki w AI Platform w konsoli Google Cloud Platform. OTWÓRZ STRONĘ NOTATNIKÓW AI PLATFORM
- Wybierz Otwórz JupyterLab w przypadku instancji, którą chcesz otworzyć.
- Notatniki w AI Platform przekierowują Cię do adresu URL instancji notatnika.
Utwórz notatnik
- W JupyterLab otwórz Plik -> Nowe -> Notatnik i wybierz jądro „Python 3”. w wyskakującym okienku lub wybierz „Python 3”. w sekcji Notatnik w oknie programu uruchamiającego, aby utworzyć plik Untitled.ipynbnotebook.
- Kliknij prawym przyciskiem myszy Untitled.ipynb i zmień nazwę notatnika na „fhir_data_from_bigquery.ipynb”. Kliknij dwukrotnie, aby go otworzyć, utworzyć zapytania i zapisać notatnik.
- Aby pobrać notatnik, kliknij prawym przyciskiem plik *.ipynb i w menu wybierz Pobierz.
- Możesz też przesłać istniejący notatnik. Aby to zrobić, kliknij strzałkę w górę. Przycisk
Kompilowanie i uruchamianie każdego bloku kodu w notatniku
Skopiuj i uruchom po kolei każdy blok kodu podany w tej sekcji. Aby wykonać kod, kliknij „Uruchom”. (Trójkąt).
Określ długość pobytu w godzinach
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 i wynik wykonania:
Sprawdź obserwacje – wartości cholesterolu
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()
Dane wyjściowe uruchomionego kodu:
Pobierz przybliżone kwantyle spotkania
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()
Dane wyjściowe uruchomionego kodu:
Poznaj średnią długość spotkań w minutach
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()
Dane wyjściowe uruchomionego kodu:
Pobieranie liczby spotkań na pacjenta
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()
Dane wyjściowe uruchomionego kodu:
Pobieranie organizacji
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()
Wynik wykonania:
Pobieranie pacjentów
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()
Wyniki wykonania:
6. Tworzenie wykresów w notatnikach AI Platform
Wykonaj komórki kodu w notatniku „fhir_data_from_bigquery.ipynb” aby narysować wykres słupkowy.
Możesz na przykład poznać średnią długość spotkań w minutach.
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
Wyniki dotyczące kodu i wykonania:
7. Zatwierdź notatnik w Cloud Source Repositories
- W konsoli GCP otwórz Repozytoria źródłowe. Jeśli używasz go po raz pierwszy, kliknij Rozpocznij, a następnie Utwórz repozytorium.
- Następnym razem przejdź do GCP -> Cloud Source Repositories i kliknij +Dodaj repozytorium, aby utworzyć nowe.
- Wybierz „Utwórz nowe repozytorium” i kliknij Dalej.
- Podaj nazwę repozytorium i projektu, a następnie kliknij Utwórz.
- Wybierz „Sklonuj repozytorium do lokalnego repozytorium Git”, a następnie wybierz Ręcznie wygenerowane dane uwierzytelniające.
- Wykonaj krok 1 „Wygeneruj i zapisz dane logowania Git” instrukcji (patrz poniżej). Skopiuj skrypt, który pojawi się na ekranie.
- Uruchom sesję terminala w Jupyter.
- Wklej wszystkie polecenia z „konfiguracji Git” do terminala Jupyter.
- Skopiuj ścieżkę klonowania repozytorium z repozytoriów źródłowych GCP Cloud (krok 2 na zrzucie ekranu poniżej).
- Wklej to polecenie w terminalu JupiterLab. Polecenie będzie wyglądać tak:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- „my-ai-notebooki” zostanie utworzony w Jupyterlab.
- Przenieś notatnik (fhir_data_from_bigquery.ipynb) do folderu „my-ai-notebooks”.
- W terminalu Jupyter zmień katalog na „cd my-ai-notebooks”.
- Przygotuj zmiany przy użyciu terminala Jupyter. Możesz też skorzystać z interfejsu użytkownika Jupyter – kliknij prawym przyciskiem myszy pliki w obszarze Nieśledzone dane i wybierz opcję Monitoruj. Pliki zostaną przeniesione do obszaru Śledzone, i odwrotnie. Zawiera on zmodyfikowane pliki).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- Zatwierdź zmiany za pomocą terminala Jupyter lub interfejsu użytkownika Jupyter (wpisz wiadomość, a następnie kliknij przycisk „Zaznaczone”).
git commit -m "message goes here"
- Przekaż zmiany do repozytorium zdalnego za pomocą terminala Jupyter lub interfejsu użytkownika Jupyter (kliknij ikonę „wypchnij zatwierdzone zmiany” ).
git push --all
- W konsoli GCP otwórz Source Repositories (Repozytoria źródłowe). Kliknij my-ai-notebooks. Zwróć uwagę, że plik „fhir_data_from_bigquery.ipynb” zostanie zapisany w repozytorium źródłowym GCP.
8. Czyszczenie
Aby uniknąć obciążenia konta Google Cloud Platform opłatami za zasoby zużyte w ramach tego ćwiczenia z programowania, po ukończeniu samouczka możesz wyczyścić zasoby utworzone w GCP, aby nie zajmowały Twojego limitu. W przyszłości nie będziemy też naliczać za nie opłat. W poniższych sekcjach opisano, jak usunąć lub wyłączyć te zasoby.
Usuwam zbiór danych BigQuery
Wykonaj te instrukcje, aby usunąć zbiór danych BigQuery utworzony w ramach tego samouczka. Jeśli korzystasz z testowego zbioru danych fhir_20k_patients_analytics, przejdź do konsoli BigQuery i odepnij projekt hcls-testing-data.
Wyłączam instancję Notatników AI Platform
Postępuj zgodnie z instrukcjami podanymi w tym linku Wyłączanie instancji notatnika | Notatniki w AI Platform, aby wyłączyć instancję Notatników w AI Platform.
Usuwam projekt
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.
Aby usunąć projekt:
- W konsoli GCP otwórz stronę Projekty. OTWÓRZ STRONĘ PROJEKTY
- Na liście projektów wybierz projekt do usunięcia, a następnie kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
9. Gratulacje
Gratulacje! Udało Ci się ukończyć moduł dotyczący kodu, który pozwala uzyskiwać dostęp do sformatowanych danych o stanie zdrowia, a także tworzyć zapytania i analizować je za pomocą notatników BigQuery i AI Platform.
Udało Ci się uzyskać dostęp do publicznego zbioru danych BigQuery w GCP.
Masz opracowane i przetestowane zapytania SQL za pomocą interfejsu użytkownika BigQuery.
Udało Ci się utworzyć i uruchomić instancję Notatników w AI Platform.
Zapytania SQL zostały wykonane w JupyterLab, a ich wyniki zostały zapisane w Pandas DataFrame.
Wykresy i diagramy zostały utworzone za pomocą Matplotlib.
Twój notatnik został zatwierdzony i przekazany do Cloud Source Repositories w GCP.
Znasz już najważniejsze kroki, które musisz wykonać, aby zacząć korzystać z Notatników w BigQuery i AI Platform w Google Cloud Platform w usłudze Healthcare Data Analytics.
©Google, Inc. lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone. Nie rozpowszechniać.