Анализируйте клинические данные с помощью блокнотов BigQuery и платформы искусственного интеллекта.

1. Введение

139d6fa46b10ab12.png

Последнее обновление : 22 сентября 2022 г.

В этой лаборатории кода реализован шаблон для доступа и анализа медицинских данных, агрегированных в BigQuery, с использованием BigQueryUI и блокнотов платформы AI. Он иллюстрирует исследование больших наборов медицинских данных с использованием знакомых инструментов, таких как Pandas, Matplotlib и т. д., в блокнотах платформы искусственного интеллекта, совместимых с HIPPA. «Хитрость» заключается в том, чтобы выполнить первую часть агрегирования в BigQuery, получить обратно набор данных Pandas, а затем локально работать с меньшим набором данных Pandas. Блокноты AI Platform предоставляют управляемый интерфейс Jupyter, поэтому вам не нужно самостоятельно запускать серверы ноутбуков. Блокноты AI Platform хорошо интегрированы с другими сервисами GCP, такими как Big Query и Cloud Storage, что позволяет быстро и просто начать работу по анализу данных и машинному обучению на Google Cloud Platform.

В этой лаборатории кода вы научитесь:

  • Разрабатывайте и тестируйте SQL-запросы с помощью пользовательского интерфейса BigQuery.
  • Создайте и запустите экземпляр блокнотов AI Platform в GCP.
  • Выполняйте SQL-запросы из блокнота и сохраняйте результаты запросов в Pandas DataFrame.
  • Создавайте диаграммы и графики с помощью Matplotlib.
  • Зафиксируйте и отправьте блокнот в облачный репозиторий исходного кода в GCP.

Что вам нужно для запуска этой лаборатории кода?

  • Вам нужен доступ к проекту GCP .
  • Вам необходимо назначить роль владельца проекта GCP.
  • Вам нужен набор медицинских данных в BigQuery.

Если у вас нет проекта GCP, выполните следующие действия , чтобы создать новый проект GCP.

2. Настройка проекта

Для этой кодовой лаборатории мы будем использовать существующий набор данных в BigQuery ( hcls-testing-data.fhir_20k_phases_analytics ). Этот набор данных предварительно заполнен синтетическими данными здравоохранения.

Получите доступ к синтетическому набору данных

  1. С адреса электронной почты, который вы используете для входа в Cloud Console, отправьте электронное письмо на адрес hcls-solutions-external+subscribe@google.com с просьбой присоединиться.
  2. Вы получите электронное письмо с инструкциями о том, как подтвердить действие.
  3. Используйте возможность ответить на электронное письмо, чтобы присоединиться к группе. НЕ нажимайте кнопку 525a0fa752e0acae.png кнопка.
  4. Как только вы получите электронное письмо с подтверждением, вы сможете перейти к следующему шагу в кодовой лаборатории.

Закрепить проект

  1. В консоли GCP выберите свой проект, затем перейдите в BigQuery.
  2. Нажмите раскрывающийся список +ДОБАВИТЬ ДАННЫЕ и выберите «Закрепить проект» > «Ввести имя проекта».

55257ed5931961c6.png

  1. Введите имя проекта « hcls-testing-data », затем нажмите PIN . Набор тестовых данных BigQuery « fhir_20k_peoples_analytics » доступен для использования.

f9038e2a21e143fd.png

3. Разрабатывайте запросы с помощью пользовательского интерфейса BigQuery.

Настройка пользовательского интерфейса BigQuery

  1. Перейдите в консоль BigQuery, выбрав BigQuery в верхнем левом углу меню GCP («гамбургер»).
  2. В консоли BigQuery нажмите «Дополнительно» → «Настройки запроса» и убедитесь, что меню «Устаревший SQL» НЕ отмечено флажком ( мы будем использовать стандартный SQL ).

455c6c3ed93e9a63.png

Создание запросов

В окне редактора запросов введите следующий запрос и нажмите «Выполнить», чтобы выполнить его. Затем просмотрите результаты в окне «Результаты запроса» .

ЗАПРОС ПАЦИЕНТОВ

#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

Запрос в «Редакторе запросов» и результаты:

fb8ef84f0cb583fb.png

ЗАПРОСЫ ПРАКТИЧЕСКИМ СПЕЦИАЛИСТАМ

#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

Результаты запроса:

9515eb63813617e0.png

ОРГАНИЗАЦИЯ ЗАПРОСА

Измените идентификатор организации, чтобы он соответствовал вашему набору данных.

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

Результаты запроса:

79a7afe2dd7fca87.png

ВОПРОС ВСТРЕЧ ПАЦИЕНТА

#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

Результаты запроса:

18328b6506814084.png

ПОЛУЧИТЬ СРЕДНЮЮ ПРОДОЛЖИТЕЛЬНОСТЬ ВСТРЕЧ ПО ТИПАМ ВСТРЕЧ

#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

Результаты запроса:

2087792ce2a67e97.png

ПОЛУЧИТЕ ВСЕХ ПАЦИЕНТОВ, У КОТОРЫХ ПОКАЗАТЕЛЬ 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'

Результаты запроса:

65be2450ecd92485.png

4. Создайте экземпляр блокнотов AI Platform.

Следуйте инструкциям по этой ссылке, чтобы создать новый экземпляр AI Platform Notebooks (JupyterLab) .

Обязательно включите Compute Engine API .

Вы можете выбрать « Создать новый блокнот с параметрами по умолчанию » или « Создать новый блокнот и указать свои параметры ».

5. Создайте блокнот для анализа данных

Экземпляр ноутбуков Open AI Platform

В этом разделе мы создадим и напишем код нового блокнота Jupyter с нуля.

  1. Откройте экземпляр блокнота, перейдя на страницу блокнотов AI Platform в консоли Google Cloud Platform. ПЕРЕЙДИТЕ НА СТРАНИЦУ НОУТБУКОВ ПЛАТФОРМЫ AI
  2. Выберите «Открыть JupyterLab» для экземпляра, который вы хотите открыть.

82457955b63cbffa.png

  1. Блокноты AI Platform перенаправят вас на URL-адрес экземпляра вашего блокнота.

7705bf2f2d9b1b20.png

Создать блокнот

  1. В JupyterLab перейдите в меню «Файл» -> «Создать» -> «Блокнот» и выберите ядро ​​«Python 3» во всплывающем окне или выберите «Python 3» в разделе «Блокнот» в окне запуска, чтобы создать блокнот Untitled.ipynb.

d0ae87f0bdac3205.png

  1. Щелкните правой кнопкой мыши Untitled.ipynb и переименуйте блокнот в «fhir_data_from_bigquery.ipynb». Дважды щелкните его, чтобы открыть его, построить запросы и сохранить блокнот.
  2. Вы можете загрузить блокнот, щелкнув правой кнопкой мыши файл *.ipynb и выбрав в меню «Загрузить».

fc16337ffd9b1730.png

  1. Вы также можете загрузить существующую записную книжку, нажав кнопку «Стрелка вверх».

49373254fbf1ddf9.png

Создайте и выполните каждый блок кода в блокноте.

Скопируйте и выполните каждый блок кода, представленный в этом разделе, один за другим. Для выполнения кода нажмите « Выполнить » (Треугольник).

e6d8b08c124c675e.png

Получить продолжительность пребывания для встреч в часах

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

Код и результат выполнения:

e7d37ff4d0d91518.png

Получить наблюдения — значения холестерина

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

Выход выполнения:

7f43408857c0335.png

Получите приблизительные квантили встреч

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

Выход выполнения:

4c2313fae0ebe007.png

Получить среднюю продолжительность встреч в минутах

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

Выход выполнения:

a0cdbe42751f14f7.png

Получить встречи на пациента

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

Выход выполнения:

3ed6b4d6a1652de0.png

Получить организации

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

Результат выполнения:

886b2e99a889422e.png

Получить пациентов

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

Результаты выполнения:

61533f943001c446.png

6. Создавайте диаграммы и графики в блокнотах платформы AI.

Выполните ячейки кода в записной книжке «fhir_data_from_bigquery.ipynb», чтобы нарисовать гистограмму.

Например, получите среднюю продолжительность встреч в минутах.

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

Код и результаты выполнения:

e48071e58960f124.png

7. Зафиксируйте блокнот в облачном репозитории исходного кода.

  1. В консоли GCP перейдите к «Исходные репозитории». Если вы используете его впервые, нажмите «Начать», затем «Создать репозиторий».

475d9a5c1d5dedc5.png

  1. В следующий раз перейдите в GCP -> Репозитории исходного кода облака и нажмите +Добавить репозиторий, чтобы создать новый репозиторий.

44416312bf155af1.png

  1. Выберите «Создать новый репозиторий», затем нажмите «Продолжить».
  2. Укажите имя репозитория и имя проекта, затем нажмите «Создать».

ec2f3eaed74c2e0.png

  1. Выберите «Клонировать репозиторий в локальный репозиторий Git», затем выберите «Учетные данные, созданные вручную».
  2. Следуйте инструкциям шага 1 «Создание и сохранение учетных данных Git» (см. ниже). Скопируйте сценарий, который появится на вашем экране.

2089de5541527107.jpeg

  1. Запустите сеанс терминала в Jupyter.

a2b49535e36a9d5c.png

  1. Вставьте все команды из окна «Настроить Git» в терминал Jupyter.
  2. Скопируйте путь клона репозитория из исходных репозиториев GCP Cloud (шаг 2 на снимке экрана ниже).

ba6a61ae8a4d9f9b.png

  1. Вставьте эту команду в терминал JupiterLab. Команда будет выглядеть следующим образом:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
  1. Папка «my-ai-notebooks» создается в Jupyterlab.

19a2b2c910b3df3.png

  1. Переместите свой блокнот (fhir_data_from_bigquery.ipynb) в папку «my-ai-notebooks».
  2. В терминале Jupyter измените каталог на «cd my-ai-notebooks».
  3. Внесите изменения с помощью терминала Jupyter. Альтернативно вы можете использовать пользовательский интерфейс Jupyter (щелкните правой кнопкой мыши файлы в области «Неотслеживаемые», выберите «Отслеживать», затем файлы перемещаются в область «Отслеживаемые» и наоборот. Область «Измененные» содержит измененные файлы).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks

5846abefb2451fd1.png

  1. Зафиксируйте изменения с помощью терминала Jupyter или пользовательского интерфейса Jupyter (введите сообщение, затем нажмите кнопку «Проверено»).
git commit -m "message goes here"
  1. Отправьте изменения в удаленный репозиторий с помощью терминала Jupyter или пользовательского интерфейса Jupyter (щелкните значок «Отправить зафиксированные изменения»). 71c61a74bb205ed1.png ).
git push --all
  1. В консоли GCP перейдите в «Исходные репозитории». Нажмите на «my-ai-notebooks». Обратите внимание, что «fhir_data_from_bigquery.ipynb» теперь сохраняется в исходном репозитории GCP.

7a6b802d90743182.jpeg

8. Очистка

Чтобы избежать взимания платы с вашей учетной записи Google Cloud Platform за ресурсы, используемые в этой лаборатории кода, после завершения руководства вы можете очистить ресурсы, созданные вами в GCP, чтобы они не занимали вашу квоту, и вы выиграете. вам не будет выставлен счет за них в будущем. В следующих разделах описано, как удалить или отключить эти ресурсы.

Удаление набора данных BigQuery

Следуйте этим инструкциям, чтобы удалить набор данных BigQuery, созданный вами в рамках этого руководства. Или перейдите в консоль BigQuery и откройте проект UnPIN hcls-testing-data, если вы использовали набор тестовых данных fhir_20k_phases_analytics.

Закрытие экземпляра AI Platform Notebooks

Следуйте инструкциям по этой ссылке . Завершение работы экземпляра блокнота | AI Platform Notebooks для завершения работы экземпляра AI Platform Notebooks.

Удаление проекта

Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.

Чтобы удалить проект:

  1. В консоли GCP перейдите на страницу «Проекты» . ПЕРЕЙТИ НА СТРАНИЦУ ПРОЕКТОВ
  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» .
  3. В диалоговом окне введите идентификатор проекта, затем нажмите «Завершить работу» , чтобы удалить проект.

9. Поздравления

Поздравляем, вы успешно завершили лабораторную работу по кодированию для доступа, запроса и анализа медицинских данных в формате FHIR с помощью BigQuery и блокнотов платформы AI.

Вы получили доступ к общедоступному набору данных BigQuery в GCP.

Вы разработали и протестировали SQL-запросы с помощью пользовательского интерфейса BigQuery.

Вы создали и запустили экземпляр AI Platform Notebooks .

Вы выполнили SQL-запросы в JupyterLab и сохранили результаты запросов в Pandas DataFrame.

Вы создали диаграммы и графики с помощью Matplotlib.

Вы зафиксировали и отправили свой блокнот в облачный репозиторий исходного кода в GCP.

Теперь вы знаете ключевые шаги, необходимые для того, чтобы начать свой путь в области анализа данных здравоохранения с помощью блокнотов BigQuery и AI Platform на облачной платформе Google.

©Google, Inc. или ее дочерние компании. Все права защищены. Не распространяйте.