1. Введение
Последнее обновление : 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 ). Этот набор данных предварительно заполнен синтетическими данными здравоохранения.
Получите доступ к синтетическому набору данных
- С адреса электронной почты, который вы используете для входа в Cloud Console, отправьте электронное письмо на адрес hcls-solutions-external+subscribe@google.com с просьбой присоединиться.
- Вы получите электронное письмо с инструкциями о том, как подтвердить действие.
- Используйте возможность ответить на электронное письмо, чтобы присоединиться к группе. НЕ нажимайте кнопку кнопка.
- Как только вы получите электронное письмо с подтверждением, вы сможете перейти к следующему шагу в кодовой лаборатории.
Закрепить проект
- В консоли GCP выберите свой проект, затем перейдите в BigQuery.
- Нажмите раскрывающийся список +ДОБАВИТЬ ДАННЫЕ и выберите «Закрепить проект» > «Ввести имя проекта».
- Введите имя проекта « hcls-testing-data », затем нажмите PIN . Набор тестовых данных BigQuery « fhir_20k_peoples_analytics » доступен для использования.
3. Разрабатывайте запросы с помощью пользовательского интерфейса BigQuery.
Настройка пользовательского интерфейса BigQuery
- Перейдите в консоль BigQuery, выбрав BigQuery в верхнем левом углу меню GCP («гамбургер»).
- В консоли BigQuery нажмите «Дополнительно» → «Настройки запроса» и убедитесь, что меню «Устаревший SQL» НЕ отмечено флажком ( мы будем использовать стандартный SQL ).
Создание запросов
В окне редактора запросов введите следующий запрос и нажмите «Выполнить», чтобы выполнить его. Затем просмотрите результаты в окне «Результаты запроса» .
ЗАПРОС ПАЦИЕНТОВ
#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
Запрос в «Редакторе запросов» и результаты:
ЗАПРОСЫ ПРАКТИЧЕСКИМ СПЕЦИАЛИСТАМ
#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
Результаты запроса:
ОРГАНИЗАЦИЯ ЗАПРОСА
Измените идентификатор организации, чтобы он соответствовал вашему набору данных.
#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"
Результаты запроса:
ВОПРОС ВСТРЕЧ ПАЦИЕНТА
#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
Результаты запроса:
ПОЛУЧИТЬ СРЕДНЮЮ ПРОДОЛЖИТЕЛЬНОСТЬ ВСТРЕЧ ПО ТИПАМ ВСТРЕЧ
#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
Результаты запроса:
ПОЛУЧИТЕ ВСЕХ ПАЦИЕНТОВ, У КОТОРЫХ ПОКАЗАТЕЛЬ 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'
Результаты запроса:
4. Создайте экземпляр блокнотов AI Platform.
Следуйте инструкциям по этой ссылке, чтобы создать новый экземпляр AI Platform Notebooks (JupyterLab) .
Обязательно включите Compute Engine API .
Вы можете выбрать « Создать новый блокнот с параметрами по умолчанию » или « Создать новый блокнот и указать свои параметры ».
5. Создайте блокнот для анализа данных
Экземпляр ноутбуков Open AI Platform
В этом разделе мы создадим и напишем код нового блокнота Jupyter с нуля.
- Откройте экземпляр блокнота, перейдя на страницу блокнотов AI Platform в консоли Google Cloud Platform. ПЕРЕЙДИТЕ НА СТРАНИЦУ НОУТБУКОВ ПЛАТФОРМЫ AI
- Выберите «Открыть JupyterLab» для экземпляра, который вы хотите открыть.
- Блокноты AI Platform перенаправят вас на URL-адрес экземпляра вашего блокнота.
Создать блокнот
- В JupyterLab перейдите в меню «Файл» -> «Создать» -> «Блокнот» и выберите ядро «Python 3» во всплывающем окне или выберите «Python 3» в разделе «Блокнот» в окне запуска, чтобы создать блокнот Untitled.ipynb.
- Щелкните правой кнопкой мыши Untitled.ipynb и переименуйте блокнот в «fhir_data_from_bigquery.ipynb». Дважды щелкните его, чтобы открыть его, построить запросы и сохранить блокнот.
- Вы можете загрузить блокнот, щелкнув правой кнопкой мыши файл *.ipynb и выбрав в меню «Загрузить».
- Вы также можете загрузить существующую записную книжку, нажав кнопку «Стрелка вверх».
Создайте и выполните каждый блок кода в блокноте.
Скопируйте и выполните каждый блок кода, представленный в этом разделе, один за другим. Для выполнения кода нажмите « Выполнить » (Треугольник).
Получить продолжительность пребывания для встреч в часах
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()
Код и результат выполнения:
Получить наблюдения — значения холестерина
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()
Выход выполнения:
Получите приблизительные квантили встреч
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()
Выход выполнения:
Получить среднюю продолжительность встреч в минутах
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()
Выход выполнения:
Получить встречи на пациента
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()
Выход выполнения:
Получить организации
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()
Результат выполнения:
Получить пациентов
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()
Результаты выполнения:
6. Создавайте диаграммы и графики в блокнотах платформы AI.
Выполните ячейки кода в записной книжке «fhir_data_from_bigquery.ipynb», чтобы нарисовать гистограмму.
Например, получите среднюю продолжительность встреч в минутах.
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
Код и результаты выполнения:
7. Зафиксируйте блокнот в облачном репозитории исходного кода.
- В консоли GCP перейдите к «Исходные репозитории». Если вы используете его впервые, нажмите «Начать», затем «Создать репозиторий».
- В следующий раз перейдите в GCP -> Репозитории исходного кода облака и нажмите +Добавить репозиторий, чтобы создать новый репозиторий.
- Выберите «Создать новый репозиторий», затем нажмите «Продолжить».
- Укажите имя репозитория и имя проекта, затем нажмите «Создать».
- Выберите «Клонировать репозиторий в локальный репозиторий Git», затем выберите «Учетные данные, созданные вручную».
- Следуйте инструкциям шага 1 «Создание и сохранение учетных данных Git» (см. ниже). Скопируйте сценарий, который появится на вашем экране.
- Запустите сеанс терминала в Jupyter.
- Вставьте все команды из окна «Настроить Git» в терминал Jupyter.
- Скопируйте путь клона репозитория из исходных репозиториев GCP Cloud (шаг 2 на снимке экрана ниже).
- Вставьте эту команду в терминал JupiterLab. Команда будет выглядеть следующим образом:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- Папка «my-ai-notebooks» создается в Jupyterlab.
- Переместите свой блокнот (fhir_data_from_bigquery.ipynb) в папку «my-ai-notebooks».
- В терминале Jupyter измените каталог на «cd my-ai-notebooks».
- Внесите изменения с помощью терминала Jupyter. Альтернативно вы можете использовать пользовательский интерфейс Jupyter (щелкните правой кнопкой мыши файлы в области «Неотслеживаемые», выберите «Отслеживать», затем файлы перемещаются в область «Отслеживаемые» и наоборот. Область «Измененные» содержит измененные файлы).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- Зафиксируйте изменения с помощью терминала Jupyter или пользовательского интерфейса Jupyter (введите сообщение, затем нажмите кнопку «Проверено»).
git commit -m "message goes here"
- Отправьте изменения в удаленный репозиторий с помощью терминала Jupyter или пользовательского интерфейса Jupyter (щелкните значок «Отправить зафиксированные изменения»). ).
git push --all
- В консоли GCP перейдите в «Исходные репозитории». Нажмите на «my-ai-notebooks». Обратите внимание, что «fhir_data_from_bigquery.ipynb» теперь сохраняется в исходном репозитории GCP.
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.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.
Чтобы удалить проект:
- В консоли GCP перейдите на страницу «Проекты» . ПЕРЕЙТИ НА СТРАНИЦУ ПРОЕКТОВ
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» .
- В диалоговом окне введите идентификатор проекта, затем нажмите «Завершить работу» , чтобы удалить проект.
9. Поздравления
Поздравляем, вы успешно завершили лабораторную работу по кодированию для доступа, запроса и анализа медицинских данных в формате FHIR с помощью BigQuery и блокнотов платформы AI.
Вы получили доступ к общедоступному набору данных BigQuery в GCP.
Вы разработали и протестировали SQL-запросы с помощью пользовательского интерфейса BigQuery.
Вы создали и запустили экземпляр AI Platform Notebooks .
Вы выполнили SQL-запросы в JupyterLab и сохранили результаты запросов в Pandas DataFrame.
Вы создали диаграммы и графики с помощью Matplotlib.
Вы зафиксировали и отправили свой блокнот в облачный репозиторий исходного кода в GCP.
Теперь вы знаете ключевые шаги, необходимые для того, чтобы начать свой путь в области анализа данных здравоохранения с помощью блокнотов BigQuery и AI Platform на облачной платформе Google.
©Google, Inc. или ее дочерние компании. Все права защищены. Не распространяйте.