Phân tích dữ liệu lâm sàng bằng Sổ tay BigQuery và AI Platform

1. Giới thiệu

139d6fa46b10ab12.pngS

Lần cập nhật gần đây nhất: 22-9-2022

Lớp học lập trình này triển khai một mẫu để truy cập và phân tích dữ liệu chăm sóc sức khoẻ được tổng hợp trong BigQuery bằng BigQueryUI và Sổ tay nền tảng AI. Hình ảnh minh hoạ quá trình khám phá dữ liệu đối với các tập dữ liệu lớn về chăm sóc sức khoẻ bằng các công cụ quen thuộc như Gấu trúc, Matplotlib, v.v. trong một Sổ tay dựa trên nền tảng AI tuân thủ HIPPA. "Thủ đoạn" là thực hiện phần đầu tiên của quá trình tổng hợp trong BigQuery, lấy lại tập dữ liệu Gấu trúc rồi sau đó xử lý cục bộ tập dữ liệu Gấu trúc nhỏ hơn. Sổ tay nền tảng AI cung cấp trải nghiệm Jupyter được quản lý nên bạn không cần tự chạy máy chủ sổ tay. AI Platform Notebooks được tích hợp hiệu quả với các dịch vụ khác của GCP như Big Query và Cloud Storage, giúp bạn bắt đầu hành trình Phân tích dữ liệu và học máy trên Google Cloud Platform một cách nhanh chóng và đơn giản.

Trong lớp học lập trình này, bạn sẽ tìm hiểu:

  • Phát triển và thử nghiệm các truy vấn SQL bằng giao diện người dùng BigQuery.
  • Tạo và chạy một thực thể Sổ tay nền tảng AI trong GCP.
  • Thực thi truy vấn SQL từ sổ tay và lưu trữ kết quả truy vấn trong Pandas DataFrame.
  • Tạo biểu đồ và đồ thị bằng Matplotlib.
  • Xác nhận và đẩy sổ tay đến một Kho lưu trữ nguồn trên đám mây trong GCP.

Bạn cần gì để chạy lớp học lập trình này?

  • Bạn cần có quyền truy cập vào một Dự án GCP.
  • Bạn cần được chỉ định vai trò Chủ sở hữu cho Dự án GCP.
  • Bạn cần có một tập dữ liệu về chăm sóc sức khoẻ trong BigQuery.

Nếu bạn không có Dự án GCP, hãy làm theo các bước này để tạo một Dự án GCP mới.

2. Thiết lập dự án

Đối với lớp học lập trình này, chúng ta sẽ sử dụng một tập dữ liệu hiện có trong BigQuery (hcls-testing-data.fhir_20k_patients_analytics). Tập dữ liệu này được điền sẵn dữ liệu tổng hợp về dịch vụ chăm sóc sức khoẻ.

Truy cập vào tập dữ liệu tổng hợp

  1. Từ địa chỉ email bạn đang dùng để đăng nhập vào Cloud Console, hãy gửi email đến hcls-solutions-external+subscribe@google.com để yêu cầu tham gia.
  2. Bạn sẽ nhận được một email hướng dẫn cách xác nhận thao tác đó.
  3. Sử dụng lựa chọn này để trả lời email để tham gia nhóm. ĐỪNG nhấp vào nút 525a0fa752e0acae.pngS.
  4. Sau khi nhận được email xác nhận, bạn có thể chuyển sang bước tiếp theo trong lớp học lập trình.

Ghim dự án

  1. Trong Bảng điều khiển của GCP, hãy chọn dự án của bạn rồi chuyển đến BigQuery.
  2. Nhấp vào trình đơn thả xuống +THÊM DỮ LIỆU rồi chọn "Ghim dự án" > "Nhập tên dự án" của Google.

55257ed5931961c6.pngS

  1. Nhập tên dự án "hcls-testing-data", rồi nhấp vào PIN. Tập dữ liệu thử nghiệm của BigQuery "fhir_20k_patients_analytics" có sẵn để sử dụng.

f9038e2a21e143fd.png

3. Phát triển truy vấn bằng giao diện người dùng BigQuery

Cài đặt giao diện người dùng BigQuery

  1. Chuyển đến bảng điều khiển BigQuery bằng cách chọn BigQuery trong trình đơn GCP ở góc trên cùng bên trái ("hamburger").
  2. Trong bảng điều khiển BigQuery, hãy nhấp vào Thêm → Cài đặt truy vấn và đảm bảo rằng trình đơn SQL cũ KHÔNG được đánh dấu (chúng tôi sẽ sử dụng SQL chuẩn).

455c6c3ed93e9a63.pngS

Tạo truy vấn

Trong cửa sổ Trình chỉnh sửa truy vấn, hãy nhập truy vấn sau rồi nhấp vào "Chạy" để thực thi truy vấn đó. Sau đó, xem kết quả trong cửa sổ "Kết quả truy vấn".

BIỆN PHÁP BỆNH NHÂN CỦA QUERY

#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

Truy vấn trong "Trình chỉnh sửa truy vấn" và kết quả:

fb8ef84f0cb583fb.png

NHỮNG NHÂN VIÊN THỰC TẬP TRUY CẬP

#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

Kết quả truy vấn:

9515eb63813617e0.pngs

TỔ CHỨC TRUY CẬP

Hãy thay đổi mã tổ chức để khớp với tập dữ liệu của bạn.

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

Kết quả truy vấn:

79a7afe2dd7fca87.pngS

TRUY CẬP VÀO BỆNH NHÂN

#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

Kết quả truy vấn:

18328b6506814084.pngS

NHẬN THỜI LƯỢNG TRUNG BÌNH CỦA NHÓM ĐÀO TẠO THEO LOẠI BỘ PHẬN

#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

Kết quả truy vấn:

2087792ce2a67e97.pngs

TÌM TẤT CẢ BỆNH NHÂN CÓ TỶ LỆ 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'

Kết quả truy vấn:

65be2450ecd92485.pngS

4. Tạo thực thể Sổ tay trên nền tảng AI

Làm theo hướng dẫn trong đường liên kết này để tạo một phiên bản AI Platform Notebook (JupyterLab) mới.

Hãy nhớ bật Compute Engine API.

Bạn có thể chọn " Tạo một sổ tay mới với các lựa chọn mặc định" hoặc " Tạo một sổ tay mới rồi chỉ định các lựa chọn của bạn".

5. Tạo Sổ tay phân tích dữ liệu

Mở thực thể Sổ tay trên nền tảng AI

Trong phần này, chúng ta sẽ soạn và viết mã cho một sổ tay Jupyter mới từ đầu.

  1. Mở một thực thể sổ tay bằng cách chuyển đến trang Sổ tay AI Platform trong Bảng điều khiển Google Cloud Platform. CHUYỂN ĐẾN TRANG GHI CHÚ CỦA NỀN TẢNG AI
  2. Chọn Open JupyterLab cho phiên bản mà bạn muốn mở.

82457955b63cbffa.pngS

  1. Sổ tay nền tảng AI sẽ chuyển bạn đến một URL cho thực thể sổ tay của bạn.

7705bf2f2d9b1b20.pngs

Tạo sổ tay

  1. Trong JupyterLab, hãy chuyển đến Tệp -> Mới -> Sổ tay và chọn Kernel "Python 3" trong cửa sổ bật lên hoặc chọn "Python 3" trong phần Sổ tay trong cửa sổ trình chạy để tạo một Untitled.ipynbnotebook.

d0ae87f0bdac3205.png

  1. Nhấp chuột phải vào Untitled.ipynb và đổi tên sổ tay thành "fhir_data_from_bigquery.ipynb". Hãy nhấp đúp để mở sổ tay, tạo truy vấn và lưu sổ tay.
  2. Bạn có thể tải sổ tay xuống bằng cách nhấp chuột phải vào tệp *.ipynb rồi chọn Tải xuống trên trình đơn.

fc16337ffd9b1730.png

  1. Bạn cũng có thể tải một sổ tay hiện có lên bằng cách nhấp vào "Mũi tên lên" .

49373254fbf1ddf9.pngS

Tạo và thực thi từng khối mã trong sổ tay

Sao chép và thực thi từng khối mã được cung cấp trong phần này. Để thực thi mã, hãy nhấp vào "Run" (Chạy) (Hình tam giác).

e6d8b08c124c675e.png

Nhận thông tin về thời gian lưu trú (tính theo giờ)

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

Kết quả thực thi và mã:

e7d37ff4d0d91518.png

Nhận quan sát – Giá trị Cholesterol

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

Kết quả thực thi:

7f43408857c0335.pngS

Nhận số phân vị tiếp xúc gần đúng

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

Kết quả thực thi:

4c2313fae0ebe007.png.

Nhận thời lượng tương tác trung bình tính bằng phút

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

Kết quả thực thi:

a0cdbe42751f14f7.png

Số ca nhiễm trên mỗi bệnh nhân

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

Kết quả thực thi:

3ed6b4d6a1652de0.png.

Tải tổ chức

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

Kết quả thực thi:

886b2e99a889422e.png.

Nhận bệnh nhân

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

Kết quả thực thi:

61533f943001c446.pngS

6. Tạo biểu đồ và biểu đồ trong Sổ tay nền tảng AI

Thực thi các ô mã trong sổ tay "fhir_data_from_bigquery.ipynb" để vẽ một biểu đồ thanh.

Ví dụ: lấy thời lượng trung bình của Lượt gặp mặt tính bằng phút.

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

Kết quả mã và thực thi:

e48071e58960f124.png

7. Xác nhận sổ tay vào kho lưu trữ nguồn trên đám mây

  1. Trong Bảng điều khiển GCP, hãy chuyển đến phần Kho lưu trữ nguồn. Nếu đây là lần đầu tiên bạn sử dụng kho lưu trữ này, hãy nhấp vào Bắt đầu rồi chọn Tạo kho lưu trữ.

475d9a5c1d5dedc5.pngS

  1. Lần sau, hãy chuyển đến GCP -> Cloud Source Repositories rồi nhấp vào +Thêm kho lưu trữ để tạo một kho lưu trữ mới.

44416312bf155af1.pngs

  1. Chọn "Create a new Repository" (Tạo kho lưu trữ mới), rồi nhấp vào Tiếp tục.
  2. Cung cấp tên Kho lưu trữ và Tên dự án, sau đó nhấp vào Tạo.

ec2f3eaed74c2e0.png

  1. Chọn "Sao chép kho lưu trữ của bạn vào kho lưu trữ Git cục bộ", sau đó chọn Thông tin xác thực được tạo theo cách thủ công.
  2. Làm theo bước 1 "Tạo và lưu trữ thông tin xác thực Git" hướng dẫn (xem bên dưới). Sao chép tập lệnh xuất hiện trên màn hình.

2089de5541527107.jpeg

  1. Bắt đầu phiên kết thúc trong Jupyter.

a2b49535e36a9d5c.png

  1. Dán mọi lệnh trong phần "Định cấu hình Git" cửa sổ vào cửa sổ dòng lệnh Jupyter.
  2. Sao chép đường dẫn sao chép kho lưu trữ từ kho lưu trữ nguồn trên Cloud của GCP (bước 2 trong ảnh chụp màn hình bên dưới).

ba6a61ae8a4d9f9b.png

  1. Dán lệnh này vào thiết bị đầu cuối JupiterLab. Lệnh sẽ có dạng như sau:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
  1. "Sổ tay ai" sẽ được tạo trong Jupyterlab.

19a2b2c910b3df3.pngs

  1. Di chuyển sổ tay của bạn (fhir_data_from_bigquery.ipynb) vào thư mục "my-ai-notebook".
  2. Trong dòng lệnh Jupyter, hãy thay đổi thư mục thành "cd my-ai-notebooks".
  3. Giai đoạn thay đổi bằng cách sử dụng cửa sổ dòng lệnh Jupyter. Ngoài ra, bạn có thể sử dụng giao diện người dùng Jupyter (nhấp chuột phải vào các tệp trong khu vực Chưa được theo dõi, chọn Theo dõi, sau đó các tệp được chuyển vào khu vực Đã theo dõi và ngược lại. Khu vực đã thay đổi chứa các tệp đã sửa đổi).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks

5846abefb2451fd1.pngS

  1. Xác nhận các thay đổi của bạn bằng cách sử dụng thiết bị đầu cuối Jupyter hoặc giao diện người dùng Jupyter (nhập thông báo, sau đó nhấp vào nút "Đã kiểm tra").
git commit -m "message goes here"
  1. Đẩy các thay đổi của bạn vào kho lưu trữ từ xa bằng cách sử dụng thiết bị đầu cuối Jupyter hoặc giao diện người dùng Jupyter (nhấp vào biểu tượng "đẩy các thay đổi được cam kết" 71c61a74bb205ed1.pngs).
git push --all
  1. Trong bảng điều khiển GCP, hãy chuyển đến phần Kho lưu trữ nguồn. Nhấp vào my-ai-notebook. Lưu ý rằng "fhir_data_from_bigquery.ipynb" hiện được lưu trong Kho lưu trữ nguồn GCP.

20080090809077607377 đầu camera.jpeg

8. Dọn dẹp

Để tránh bị tính phí vào tài nguyên Google Cloud Platform của bạn cho các tài nguyên sử dụng trong lớp học lập trình này, sau khi hoàn tất phần hướng dẫn, bạn có thể dọn dẹp các tài nguyên mình đã tạo trên GCP để chúng không chiếm hạn mức của bạn và bạn sẽ không bị tính phí cho các tài nguyên đó trong tương lai. Các phần sau đây mô tả cách xoá hoặc tắt những tài nguyên này.

Xoá tập dữ liệu BigQuery

Hãy làm theo các hướng dẫn sau để xoá tập dữ liệu BigQuery mà bạn đã tạo trong phần hướng dẫn này. Hoặc chuyển đến bảng điều khiển BigQuery, truy cập dự án hcls-testing-data nếu bạn đã sử dụng tập dữ liệu thử nghiệm fhir_20k_patients_analytics.

Tắt phiên bản Sổ tay trên nền tảng AI

Làm theo hướng dẫn trong liên kết này Tắt một phiên bản sổ tay | AI Platform Notebooks sẽ ngừng hoạt động một phiên bản Sổ tay nền tảng AI.

Xoá dự án

Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.

Cách xoá dự án:

  1. Trong Bảng điều khiển GCP, hãy chuyển đến trang Dự án. CHUYỂN ĐẾN TRANG DỰ ÁN
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá rồi nhấp vào Delete (Xoá).
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.

9. Xin chúc mừng

Xin chúc mừng! Bạn đã hoàn tất thành công lớp học lập trình để truy cập, truy vấn và phân tích dữ liệu chăm sóc sức khoẻ được định dạng FHIR bằng BigQuery và Sổ tay nền tảng AI.

Bạn đã truy cập vào một tập dữ liệu BigQuery công khai trong GCP.

Bạn đã phát triển và thử nghiệm các truy vấn SQL bằng giao diện người dùng BigQuery.

Bạn đã tạo và ra mắt một thực thể Sổ tay nền tảng AI.

Bạn đã thực thi các truy vấn SQL trong JupyterLab và lưu trữ kết quả truy vấn trong Pandas DataFrame.

Bạn đã tạo biểu đồ và đồ thị bằng Matplotlib.

Bạn đã cam kết và chuyển sổ tay của mình sang một Kho lưu trữ nguồn đám mây trong GCP.

Giờ đây, bạn đã biết các bước quan trọng cần thiết để bắt đầu hành trình Phân tích dữ liệu trong lĩnh vực chăm sóc sức khoẻ bằng Sổ tay trên nền tảng BigQuery và AI trên Google Cloud Platform.

©Google, Inc. hoặc các đơn vị liên kết của Google. Bảo lưu mọi quyền. Không được phân phối.