1. مقدمة
تاريخ التعديل الأخير: 22-9-2022
ينفِّذ هذا الدرس التطبيقي نمطًا للوصول إلى بيانات الرعاية الصحية المجمّعة في BigQuery وتحليلها باستخدام أجهزة الكمبيوتر الدفترية في BigQueryUI وAI Platform. وهو يوضّح استكشاف البيانات لمجموعات بيانات الرعاية الصحية الكبيرة باستخدام أدوات معروفة، مثل Pandas وmatplotlib وغيرها في دفاتر ملاحظات مستندة إلى الذكاء الاصطناعي (HIPPA) متوافقة مع النظام الأساسي للذكاء الاصطناعي (HIPPA). "الخدعة" وهي تنفيذ الجزء الأول من التجميع في BigQuery، واستعادة مجموعة بيانات Pandas، ثم العمل مع مجموعة بيانات Pandas الأصغر محليًا. توفّر أجهزة الكمبيوتر الدفترية المستندة إلى الذكاء الاصطناعي تجربة مُدارة من خلال Jupyter، لذلك لا تحتاج إلى تشغيل خوادم هذه الخوادم بنفسك. تم دمج أداة AI Platform Notebook بشكل جيد مع خدمات GCP الأخرى، مثل Big Query وCloud Storage، ما يجعل بدء عملية تحليل البيانات وتعلُّم الآلة على Google Cloud Platform سريعًا وبسيطًا.
في هذا الدرس التطبيقي حول الترميز، ستتعلّم ما يلي:
- إنشاء طلبات بحث SQL واختبارها باستخدام واجهة مستخدم BigQuery
- إنشاء مثيل AI Platform Notebook وإطلاقه في Google Cloud Platform.
- نفِّذ طلبات بحث SQL من ورقة الملاحظات وخزِّن نتائج طلب البحث في Pandas DataFrame.
- إنشاء المخططات والرسوم البيانية باستخدام Matplotlib.
- الالتزام بإرسال ورقة الملاحظات إلى مستودع Cloud Source في Google Cloud Platform
ما هي متطلبات تشغيل هذا الدرس التطبيقي حول الترميز؟
- تحتاج إلى الوصول إلى مشروع Google Cloud Platform.
- يجب منحك دور المالك في مشروع Google Cloud Platform.
- يجب استخدام مجموعة بيانات الرعاية الصحية في BigQuery.
إذا لم يكن لديك مشروع Google Cloud Platform، اتّبِع هذه الخطوات لإنشاء مشروع Google Cloud Platform جديد.
2. إعداد المشروع
في هذا الدرس التطبيقي حول الترميز، سنستخدم مجموعة بيانات حالية في BigQuery (hcls-testing-data.fhir_20k_patients_analytics). تتم تعبئة مجموعة البيانات هذه تلقائيًا ببيانات رعاية صحية اصطناعية.
احصل على إمكانية وصول إلى مجموعة البيانات الاصطناعية
- من عنوان البريد الإلكتروني الذي تستخدمه لتسجيل الدخول إلى Cloud Console، أرسِل رسالة إلكترونية إلى hcls-solutions-external+subscribe@google.com لطلب الانضمام.
- ستصلك رسالة إلكترونية تتضمّن تعليمات حول كيفية تأكيد الإجراء.
- يمكنك استخدام خيار الردّ على الرسالة الإلكترونية للانضمام إلى المجموعة. ولا تنقر على الزر .
- بعد تلقّي رسالة التأكيد الإلكترونية، يمكنك الانتقال إلى الخطوة التالية في الدرس التطبيقي حول الترميز.
تثبيت المشروع
- في وحدة تحكُّم Google Cloud Platform، اختَر مشروعك، ثم انتقِل إلى BigQuery.
- انقر على القائمة المنسدلة +إضافة بيانات واختَر "تثبيت مشروع". > "إدخال اسم المشروع" .
- أدخِل اسم المشروع، "hcls-testing-data"، ثم انقر على رقم التعريف الشخصي. مجموعة بيانات اختبار BigQuery "fhir_20k_patients_analytics" متاحة للاستخدام.
3- إنشاء طلبات البحث باستخدام واجهة مستخدم BigQuery
إعداد واجهة مستخدم BigQuery
- انتقِل إلى وحدة تحكُّم BigQuery عن طريق اختيار BigQuery من قائمة GCP في أعلى يسار الشاشة ("hamburger").
- في وحدة تحكُّم BigQuery، انقر على المزيد ← إعدادات طلب البحث وتأكَّد من عدم وضع علامة في المربّع بجانب قائمة SQL القديمة (سنستخدم لغة الاستعلامات البنيوية (SQL) العادية).
إنشاء استعلامات
في نافذة "محرِّر طلبات البحث"، اكتب طلب البحث التالي وانقر على Run" (تشغيل) لتنفيذه. بعد ذلك، اطّلِع على النتائج في نافذة "نتائج طلب البحث".
مرضى طلب البحث
#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 Notebook
اتّبِع التعليمات الواردة في هذا الرابط لإنشاء مثيل جديد من AI Platform Notebook (JupyterLab).
يُرجى الحرص على تفعيل Compute Engine API.
يمكنك اختيار " إنشاء ورقة ملاحظات جديدة باستخدام الخيارات التلقائية" أو " إنشاء دفتر ملاحظات جديد وتحديد خياراتك".
5- إنشاء دفتر ملاحظات لتحليلات البيانات
فتح النسخة الافتراضية من AI Platform Notebook
سنقوم في هذا القسم بتأليف وترميز دفتر ملاحظات Jupyter جديد من البداية.
- افتح مثيل دفتر ملاحظات من خلال الانتقال إلى صفحة دفاتر الملاحظات في AI Platform في وحدة تحكُّم Google Cloud Platform. الانتقال إلى صفحة دفتر الملاحظات في منصة الذكاء الاصطناعي
- اختَر فتح JupyterLab للمثيل الذي تريد فتحه.
- توجّهك AI Platform Notebooks إلى عنوان URL لمثيل ورقة الملاحظات.
إنشاء دفتر ملاحظات
- في JupyterLab، انتقل إلى ملف -> جديد -> دفتر الملاحظات واختَر Kernel "Python 3" في النافذة المنبثقة، أو اختر "Python 3" ضمن قسم "الدفتر" في نافذة مشغّل التطبيقات لإنشاء دفتر ملاحظات Untitled.ipynbnotebook.
- انقر بزر الماوس الأيمن على 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 Platform
تنفيذ خلايا الرمز البرمجي في ورقة الملاحظات "fhir_data_from_bigquery.ipynb" لرسم رسم بياني شريطي.
على سبيل المثال، احصل على متوسط مدة اللقاءات بالدقائق.
df4.plot(kind='bar', x='encounter_class', y='avg_minutes');
نتائج التعليمة البرمجية والتنفيذ:
7. تضمين ورقة الملاحظات في مستودع مصدر السحابة الإلكترونية
- في وحدة تحكُّم Google Cloud Platform، انتقِل إلى "مستودعات المصدر". إذا كانت هذه هي المرة الأولى التي تستخدمها، فانقر على "البدء" ثم على "إنشاء مستودع".
- للمرّة اللاحقة، انتقِل إلى Google Cloud Platform -> مستودعات Cloud Source، وانقر على "+إضافة مستودع" لإنشاء مستودع جديد.
- اختَر "إنشاء مستودع جديد"، ثم انقر على "متابعة".
- أدخِل اسم المستودع واسم المشروع، ثم انقر على "إنشاء".
- اختَر "نسخ المستودع إلى مستودع Git المحلي"، ثم اختَر بيانات الاعتماد التي تم إنشاؤها يدويًا.
- اتّبِع الخطوة الأولى "إنشاء بيانات اعتماد Git وتخزينها" التعليمات (انظر أدناه). انسخ النص البرمجي الذي يظهر على الشاشة.
- ابدأ جلسة الوحدة الطرفية في Jupyter.
- ألصق كل الأوامر من "Configure Git" نافذة إلى نافذة جوبيتر.
- انسخ مسار استنساخ المستودع من مستودعات مصدر Google Cloud Platform (GCP) (الخطوة 2 في لقطة الشاشة أدناه).
- الصق هذا الأمر في الوحدة الطرفية JupiterLab. سيظهر الأمر على النحو التالي:
git clone https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- و"my-ai-notebooks" Google (Jupyterlab).
- انقل دفتر ملاحظاتك (fhir_data_from_bigquery.ipynb) إلى المجلد "my-ai-notebooks".
- في الوحدة الطرفية جوبيتر، غيِّر الدليل إلى "cd my-ai-notebooks".
- يمكنك تنظيم التغييرات باستخدام الطرف الكهربائي Jupyter. وبدلاً من ذلك، يمكنك استخدام واجهة جوبيتر (Jupyter UI) (انقر بزر الماوس الأيمن على الملفات في المنطقة "غير تتبع"، وحدد "تعقب"، ثم يتم نقل الملفات إلى المنطقة المتعقبة، والعكس صحيح. تحتوي المنطقة التي تم تغييرها على الملفات المعدلة).
git remote add my-ai-notebooks https://source.developers.google.com/p/<your -project-name>/r/my-ai-notebooks
- يمكنك تنفيذ التغييرات باستخدام وحدة جوبيتر الطرفية أو واجهة مستخدم جوبيتر (اكتب في الرسالة، ثم انقر على الزر "محدد").
git commit -m "message goes here"
- يمكنك إرسال التغييرات إلى المستودع البعيد باستخدام وحدة جوبيتر الطرفية أو واجهة مستخدم جوبيتر (انقر على رمز "دفع التغييرات المُنفَّذة" ).
git push --all
- في وحدة تحكُّم Google Cloud Platform، انتقِل إلى "مستودعات المصدر". انقر فوق my-ai-notebooks. لاحظ أن "fhir_data_from_bigquery.ipynb" الآن في مستودع مصدر Google Cloud Platform.
8. تنظيف
لتجنُّب تحمُّل أي رسوم من حسابك على Google Cloud Platform مقابل الموارد المستخدَمة في هذا الدرس التطبيقي، يمكنك حذف الموارد التي أنشأتها على Google Cloud Platform حتى لا يتم تحصيل رسوم منك في المستقبل. بعد الانتهاء من البرنامج التعليمي. توضّح الأقسام التالية كيفية حذف هذه المراجع أو إيقافها.
حذف مجموعة بيانات BigQuery
اتبع هذه التعليمات لحذف مجموعة بيانات BigQuery التي أنشأتها كجزء من هذا البرنامج التعليمي. أو انتقِل إلى وحدة تحكُّم BigQuery، وهي مشروع UnPIN hcls-testing-data إذا كنت قد استخدمت مجموعة بيانات الاختبار fhir_20k_patients_analytics.
جارٍ إيقاف مثيل أجهزة AI Platform Notebook
اتّبِع التعليمات الواردة في هذا الرابط إيقاف مثيل ورقة الملاحظات | AI Platform Notebook لإيقاف مثيل AI Platform Notebook.
حذف المشروع
أسهل طريقة لإزالة الفوترة هي حذف المشروع الذي أنشأته للبرنامج التعليمي.
لحذف المشروع:
- في وحدة تحكُّم Google Cloud Platform، انتقِل إلى صفحة المشاريع. الانتقال إلى صفحة "المشاريع"
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه وانقر على حذف.
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف التشغيل لحذف المشروع.
9. تهانينا
تهانينا، لقد أكملت بنجاح التمرين المعملي حول الترميز للوصول إلى بيانات الرعاية الصحية بتنسيق FHIR وتحليلها باستخدام BigQuery وAI Platform Notebook.
وصلت إلى مجموعة بيانات BigQuery عامة في Google Cloud Platform.
لقد طوّرت واختبرت طلبات بحث SQL باستخدام واجهة مستخدم BigQuery.
أنشأت وأطلقت مثيل AI Platform Notebook.
لقد نفّذت طلبات بحث SQL في JupyterLab وخزّنت نتائج طلب البحث في Pandas DataFrame.
أنشأت رسومات بيانية باستخدام Matplotlib.
لقد التزمت بذلك وأرسلت دفتر ملاحظاتك إلى مستودع Cloud Source في Google Cloud Platform.
أنت الآن على علم بالخطوات الأساسية المطلوبة لبدء عملية تحليل بيانات الرعاية الصحية باستخدام أجهزة الكمبيوتر الدفترية في BigQuery وAI Platform على Google Cloud Platform.
©Google, Inc. أو الشركات التابعة لها. جميع الحقوق محفوظة. يُرجى عدم توزيعها.