تحليل التفاعلات الدوائية باستخدام BigQuery Graph

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية استخدام BigQuery Graph لنمذجة شبكة تفاعلية بين الأدوية والأهداف وتحليلها. ستستفيد من قوة طلبات البحث في الرسوم البيانية (GQL) لاستكشاف كيفية تفاعل الأدوية مع الأهداف البيولوجية، وتحديد الآثار الجانبية المحتملة (مثل مخاطر القلب)، والكشف عن العلاجات المركّبة المحتملة.

‫🧬 حالة الاستخدام — شبكة تفاعلات الأدوية مع الأهداف

سؤال تجاري: ما هو نطاق التأثير الكامل لأحد المركّبات، أي ما هي الأهداف التي يرتبط بها، وما هي المسارات البيولوجية المتأثرة، وما هي مجالات الأمراض المتأثرة؟

الجداول:

جدول

الوصف

compounds

جزيئات الأدوية مع آلية العمل ومرحلة التطوير

targets

بروتينات مستهدَفة مع أسماء الجينات وأرقام تعريف UniProt

interactions

ألفة الربط بالمركّب المستهدف (الأهداف الأساسية والأهداف غير المقصودة)

pathways

المسارات البيولوجية المرتبطة بمجالات الأمراض

target_pathways

جدول الربط الذي يربط الأهداف بالمسارات التي تشارك فيها

نموذج الرسم البياني للعلاقات:

(Compound)-[BINDS_TO {affinity_nm, ic50_nm, interaction_type}]->(Target)
(Target)-[PARTICIPATES_IN {role, importance_score}]->(Pathway)

مخطط الرسم البياني

🔍 طلبات البحث التجريبية

طلب البحث

ما يعرضه

السؤال 1: ملف تعريف الربط المستهدَف

عمليات الانتقال بخطوة واحدة: من المركّب إلى جميع الأهداف الأساسية وغير الأساسية

السؤال 2: رصد مخاطر القلب المرتبطة بقناة hERG

عملية البحث المكوّنة من خطوتين: المركّب → هدف hERG → مسار القلب

السؤال 3: أزواج المركّبات ذات الهدف المشترك

مطابقة ثنائية الاتجاه: مركّبان يتلاقيان عند عقدة الهدف نفسها

السؤال 4: نطاق تأثير مسار المرض

تجميع على مستوى خطوتين: تغطية المسار الكامل ومنطقة المرض لكل مركب

السؤال 5: اختيار المركّب الآمن

المركّبات التي تغطي نطاقًا واسعًا من الأورام ولكنّها لا تسبّب مشاكل في القلب مرتبطة بقناة hERG

الإجراءات التي ستنفذّها

  • إنشاء مجموعة بيانات ومخطط BigQuery لشبكة تفاعلات الأدوية
  • تحميل بيانات نموذجية (المركّبات، والأهداف، والتفاعلات، والمسارات، ومسارات الأهداف)
  • إنشاء "رسم بياني للمواقع" في BigQuery يربط بين هذه الكيانات
  • طلب البحث من الرسم البياني لفهم التفاعلات المركّبة والمسارات البيولوجية ونطاق تأثير المرض باستخدام عمليات اجتياز الرسم البياني (GRAPH_TABLE وMATCH)
  • مقارنة GQL وSQL العادية جنبًا إلى جنب لفهم بساطة بنية الرسم البياني وقدرتها التعبيرية

المتطلبات

  • متصفّح ويب، مثل Chrome
  • مشروع Google Cloud تم تفعيل الفوترة فيه

هذا الدرس التطبيقي حول الترميز مخصّص للمطوّرين من جميع المستويات، بما في ذلك المبتدئين.

2. قبل البدء

إنشاء مشروع على Google Cloud

  1. في Google Cloud Console، اختَر مشروعًا على Google Cloud أو أنشِئ مشروعًا.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية.

بدء Cloud Shell

  1. انقر على تفعيل Cloud Shell في أعلى "وحدة تحكّم Google Cloud".
  2. إثبات صحة المصادقة:
gcloud auth list
  1. تأكيد مشروعك:
gcloud config get project
  1. اضبطه إذا لزم الأمر:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

تفعيل واجهات برمجة التطبيقات

نفِّذ الأمر التالي لتفعيل واجهة BigQuery API المطلوبة:

gcloud services enable bigquery.googleapis.com

3- تحديد المخطط وتحميل البيانات

أولاً، عليك إنشاء مجموعة بيانات لتخزين الجداول ذات الصلة بالرسم البياني وتعبئتها ببيانات نموذجية.

  1. انتقِل إلى BigQuery Studio في Google Cloud Console.
  2. انقر على محرّر SQL لفتح علامة تبويب طلب جديدة.
  3. نفِّذ العبارة التالية لإنشاء مجموعة البيانات drug_target_graph:
CREATE SCHEMA IF NOT EXISTS drug_target_graph
OPTIONS (location = 'US');

الآن، أنشئ جداول المصدر الخمسة من خلال تنفيذ طلبات بحث DDL التالية في BigQuery Studio.

1. إنشاء compounds جدول

تحتوي على جزيئات الأدوية وآلية عملها ومرحلة تطورها والمجال العلاجي.

CREATE OR REPLACE TABLE drug_target_graph.compounds AS
SELECT 'CPD001' AS compound_id, 'Imatinib'    AS compound_name, 'Kinase Inhibitor'       AS mechanism_of_action, 'Approved'    AS dev_stage, 'Oncology'           AS therapeutic_area, 479.6 AS molecular_weight UNION ALL
SELECT 'CPD002', 'Gefitinib',   'Kinase Inhibitor',        'Approved',    'Oncology',           446.9 UNION ALL
SELECT 'CPD003', 'Erlotinib',   'Kinase Inhibitor',        'Approved',    'Oncology',           393.4 UNION ALL
SELECT 'CPD004', 'Sorafenib',   'Multi-Kinase Inhibitor',  'Approved',    'Oncology',           464.8 UNION ALL
SELECT 'CPD005', 'Vemurafenib', 'BRAF Inhibitor',          'Approved',    'Oncology',           489.9 UNION ALL
SELECT 'CPD006', 'Crizotinib',  'ALK Inhibitor',           'Approved',    'Oncology',           450.3 UNION ALL
SELECT 'CPD007', 'Idelalisib',  'PI3K Inhibitor',          'Approved',    'Oncology',           415.4 UNION ALL
SELECT 'CPD008', 'Trametinib',  'MEK Inhibitor',           'Approved',    'Oncology',           615.4 UNION ALL
SELECT 'CPD009', 'Palbociclib', 'CDK Inhibitor',           'Approved',    'Oncology',           447.5 UNION ALL
SELECT 'CPD010', 'Compound-X1', 'Kinase Inhibitor',        'Phase II',    'Oncology',           412.3 UNION ALL
SELECT 'CPD011', 'Compound-X2', 'PI3K Inhibitor',          'Phase I',     'Oncology',           398.7 UNION ALL
SELECT 'CPD012', 'Saquinavir',  'Protease Inhibitor',      'Approved',    'Infectious Disease', 670.8 UNION ALL
SELECT 'CPD013', 'Metformin',   'AMPK Activator',          'Approved',    'Metabolic',          165.6 UNION ALL
SELECT 'CPD014', 'Rapamycin',   'mTOR Inhibitor',          'Approved',    'Immunology',         914.2 UNION ALL
SELECT 'CPD015', 'Compound-X3', 'Multi-Kinase Inhibitor',  'Preclinical', 'Oncology',           502.1;

2. إنشاء targets جدول

يحتوي على أهداف البروتين وأسماء الجينات ومعرّفات UniProt وفئات الأهداف.

CREATE OR REPLACE TABLE drug_target_graph.targets AS
SELECT 'TGT001' AS target_id, 'BCR-ABL1'    AS target_name, 'ABL1'    AS gene_name, 'P00519' AS uniprot_id, 'Kinase'       AS target_class, TRUE  AS is_oncogene UNION ALL
SELECT 'TGT002', 'EGFR',      'EGFR',    'P00533', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT003', 'VEGFR2',    'KDR',     'P35968', 'Kinase',       FALSE UNION ALL
SELECT 'TGT004', 'BRAF',      'BRAF',    'P15056', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT005', 'ALK',       'ALK',     'Q9UM73', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT006', 'PI3K-alpha','PIK3CA',  'P42336', 'Lipid Kinase', TRUE  UNION ALL
SELECT 'TGT007', 'MEK1',      'MAP2K1',  'Q02750', 'Kinase',       FALSE UNION ALL
SELECT 'TGT008', 'CDK4',      'CDK4',    'P11802', 'Kinase',       FALSE UNION ALL
SELECT 'TGT009', 'CDK6',      'CDK6',    'P30279', 'Kinase',       FALSE UNION ALL
SELECT 'TGT010', 'mTOR',      'MTOR',    'P42345', 'Kinase',       FALSE UNION ALL
SELECT 'TGT011', 'PDGFR-beta','PDGFRB',  'P09619', 'Kinase',       FALSE UNION ALL
SELECT 'TGT012', 'c-KIT',     'KIT',     'P10721', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT013', 'hERG',      'KCNH2',   'Q12809', 'Ion Channel',  FALSE UNION ALL
SELECT 'TGT014', 'AMPK',      'PRKAA1',  'Q13131', 'Kinase',       FALSE UNION ALL
SELECT 'TGT015', 'RAF1',      'RAF1',    'P04049', 'Kinase',       FALSE UNION ALL
SELECT 'TGT016', 'RET',       'RET',     'P07949', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT017', 'FLT3',      'FLT3',    'P36888', 'Kinase',       TRUE  UNION ALL
SELECT 'TGT018', 'AKT1',      'AKT1',    'P31749', 'Kinase',       FALSE UNION ALL
SELECT 'TGT019', 'ERK2',      'MAPK1',   'P28482', 'Kinase',       FALSE UNION ALL
SELECT 'TGT020', 'HIV-Protease','HIV1-PR','Q72547', 'Protease',     FALSE;

3- إنشاء interactions جدول

تحتوي على بيانات ألفة الربط بالمركّب المستهدف (الأهداف الأساسية مقابل الأهداف غير المقصودة).

CREATE OR REPLACE TABLE drug_target_graph.interactions AS
SELECT 'INT001' AS interaction_id, 'CPD001' AS compound_id, 'TGT001' AS target_id, 0.025  AS affinity_nm, 0.038  AS ic50_nm, 'primary'    AS interaction_type, 9.8  AS pchembl_value UNION ALL
SELECT 'INT002', 'CPD001', 'TGT011', 0.1,    0.15,   'primary',    8.8  UNION ALL
SELECT 'INT003', 'CPD001', 'TGT012', 0.068,  0.1,    'primary',    9.2  UNION ALL
SELECT 'INT004', 'CPD001', 'TGT016', 0.5,    0.8,    'off-target', 7.4  UNION ALL
SELECT 'INT005', 'CPD001', 'TGT013', 5.2,    8.1,    'off-target', 6.1  UNION ALL
SELECT 'INT006', 'CPD002', 'TGT002', 0.02,   0.033,  'primary',    9.7  UNION ALL
SELECT 'INT007', 'CPD002', 'TGT013', 3.1,    4.8,    'off-target', 6.5  UNION ALL
SELECT 'INT008', 'CPD003', 'TGT002', 0.058,  0.079,  'primary',    9.2  UNION ALL
SELECT 'INT009', 'CPD003', 'TGT013', 8.5,    12.0,   'off-target', 5.9  UNION ALL
SELECT 'INT010', 'CPD004', 'TGT003', 0.09,   0.12,   'primary',    9.1  UNION ALL
SELECT 'INT011', 'CPD004', 'TGT004', 0.038,  0.055,  'primary',    8.9  UNION ALL
SELECT 'INT012', 'CPD004', 'TGT015', 0.22,   0.31,   'primary',    8.5  UNION ALL
SELECT 'INT013', 'CPD004', 'TGT016', 0.58,   0.75,   'primary',    8.1  UNION ALL
SELECT 'INT014', 'CPD004', 'TGT017', 0.33,   0.48,   'primary',    8.4  UNION ALL
SELECT 'INT015', 'CPD004', 'TGT013', 2.8,    4.1,    'off-target', 6.6  UNION ALL
SELECT 'INT016', 'CPD005', 'TGT004', 0.031,  0.044,  'primary',    9.5  UNION ALL
SELECT 'INT017', 'CPD005', 'TGT015', 0.48,   0.65,   'off-target', 7.3  UNION ALL
SELECT 'INT018', 'CPD006', 'TGT005', 0.02,   0.028,  'primary',    9.8  UNION ALL
SELECT 'INT019', 'CPD006', 'TGT003', 0.41,   0.59,   'off-target', 7.4  UNION ALL
SELECT 'INT020', 'CPD007', 'TGT006', 0.019,  0.025,  'primary',    9.8  UNION ALL
SELECT 'INT021', 'CPD007', 'TGT018', 0.55,   0.78,   'off-target', 7.2  UNION ALL
SELECT 'INT022', 'CPD008', 'TGT007', 0.0092, 0.014,  'primary',    10.1 UNION ALL
SELECT 'INT023', 'CPD008', 'TGT019', 0.38,   0.51,   'off-target', 7.4  UNION ALL
SELECT 'INT024', 'CPD009', 'TGT008', 0.011,  0.017,  'primary',    9.9  UNION ALL
SELECT 'INT025', 'CPD009', 'TGT009', 0.015,  0.022,  'primary',    9.8  UNION ALL
SELECT 'INT026', 'CPD010', 'TGT002', 0.041,  0.058,  'primary',    9.4  UNION ALL
SELECT 'INT027', 'CPD010', 'TGT001', 0.38,   0.52,   'off-target', 7.3  UNION ALL
SELECT 'INT028', 'CPD010', 'TGT013', 1.2,    1.8,    'off-target', 7.1  UNION ALL
SELECT 'INT029', 'CPD011', 'TGT006', 0.029,  0.041,  'primary',    9.5  UNION ALL
SELECT 'INT030', 'CPD011', 'TGT010', 0.71,   0.95,   'off-target', 7.0  UNION ALL
SELECT 'INT031', 'CPD012', 'TGT020', 0.39,   0.55,   'primary',    7.3  UNION ALL
SELECT 'INT032', 'CPD013', 'TGT014', 12.0,   18.5,   'primary',    5.7  UNION ALL
SELECT 'INT033', 'CPD014', 'TGT010', 0.0018, 0.0025, 'primary',    11.8 UNION ALL
SELECT 'INT034', 'CPD015', 'TGT004', 0.055,  0.078,  'primary',    9.2  UNION ALL
SELECT 'INT035', 'CPD015', 'TGT003', 0.12,   0.17,   'primary',    8.9  UNION ALL
SELECT 'INT036', 'CPD015', 'TGT016', 0.29,   0.41,   'primary',    8.5  UNION ALL
SELECT 'INT037', 'CPD015', 'TGT013', 0.95,   1.35,   'off-target', 7.2;

4. إنشاء pathways جدول

يحتوي على المسارات البيولوجية ومجالات الأمراض ذات الصلة ومدى صلتها بالسرطان.

CREATE OR REPLACE TABLE drug_target_graph.pathways AS
SELECT 'PWY001' AS pathway_id, 'MAPK Signaling'           AS pathway_name, 'hsa04010' AS kegg_id, 'Cell Proliferation'     AS biological_process, 'Oncology'           AS disease_area, 'high'   AS cancer_relevance UNION ALL
SELECT 'PWY002', 'PI3K-AKT Signaling',        'hsa04151', 'Cell Survival',         'Oncology',           'high'   UNION ALL
SELECT 'PWY003', 'VEGF Signaling',             'hsa04370', 'Angiogenesis',          'Oncology',           'high'   UNION ALL
SELECT 'PWY004', 'ErbB Signaling',             'hsa04012', 'Cell Growth',           'Oncology',           'high'   UNION ALL
SELECT 'PWY005', 'mTOR Signaling',             'hsa04150', 'Cell Growth',           'Oncology',           'medium' UNION ALL
SELECT 'PWY006', 'Cell Cycle',                 'hsa04110', 'Cell Division',         'Oncology',           'high'   UNION ALL
SELECT 'PWY007', 'Cardiac Muscle Contraction', 'hsa04260', 'Cardiac Function',      'Cardiovascular',     'low'    UNION ALL
SELECT 'PWY008', 'hERG Cardiac Channel',       'hsa04022', 'Cardiac Repolarisation','Cardiovascular',     'low'    UNION ALL
SELECT 'PWY009', 'AMPK Signaling',             'hsa04152', 'Energy Metabolism',     'Metabolic',          'low'    UNION ALL
SELECT 'PWY010', 'ALK Signaling',              'hsa04915', 'Cell Proliferation',    'Oncology',           'high'   UNION ALL
SELECT 'PWY011', 'RAS Signaling',              'hsa04014', 'Cell Proliferation',    'Oncology',           'high'   UNION ALL
SELECT 'PWY012', 'HIV Replication',            'hsa05170', 'Viral Replication',     'Infectious Disease', 'low';

5- إنشاء target_pathways جدول

جدول ربط يربط الأهداف بالمسارات البيولوجية التي تشارك فيها

CREATE OR REPLACE TABLE drug_target_graph.target_pathways AS
SELECT 'TP001' AS tp_id, 'TGT001' AS target_id, 'PWY001' AS pathway_id, 'activator' AS role, 0.95 AS importance_score UNION ALL
SELECT 'TP002', 'TGT001', 'PWY011', 'activator', 0.88 UNION ALL
SELECT 'TP003', 'TGT002', 'PWY004', 'activator', 0.98 UNION ALL
SELECT 'TP004', 'TGT002', 'PWY001', 'activator', 0.82 UNION ALL
SELECT 'TP005', 'TGT002', 'PWY002', 'activator', 0.75 UNION ALL
SELECT 'TP006', 'TGT003', 'PWY003', 'activator', 0.96 UNION ALL
SELECT 'TP007', 'TGT003', 'PWY001', 'activator', 0.71 UNION ALL
SELECT 'TP008', 'TGT004', 'PWY001', 'activator', 0.97 UNION ALL
SELECT 'TP009', 'TGT004', 'PWY011', 'activator', 0.89 UNION ALL
SELECT 'TP010', 'TGT005', 'PWY010', 'activator', 0.99 UNION ALL
SELECT 'TP011', 'TGT005', 'PWY001', 'activator', 0.78 UNION ALL
SELECT 'TP012', 'TGT006', 'PWY002', 'activator', 0.98 UNION ALL
SELECT 'TP013', 'TGT006', 'PWY005', 'activator', 0.85 UNION ALL
SELECT 'TP014', 'TGT007', 'PWY001', 'activator', 0.94 UNION ALL
SELECT 'TP015', 'TGT007', 'PWY011', 'activator', 0.88 UNION ALL
SELECT 'TP016', 'TGT008', 'PWY006', 'activator', 0.95 UNION ALL
SELECT 'TP017', 'TGT009', 'PWY006', 'activator', 0.93 UNION ALL
SELECT 'TP018', 'TGT010', 'PWY005', 'activator', 0.99 UNION ALL
SELECT 'TP019', 'TGT010', 'PWY002', 'activator', 0.91 UNION ALL
SELECT 'TP020', 'TGT011', 'PWY003', 'activator', 0.87 UNION ALL
SELECT 'TP021', 'TGT011', 'PWY001', 'activator', 0.72 UNION ALL
SELECT 'TP022', 'TGT012', 'PWY001', 'activator', 0.83 UNION ALL
SELECT 'TP023', 'TGT012', 'PWY011', 'activator', 0.79 UNION ALL
SELECT 'TP024', 'TGT013', 'PWY008', 'substrate', 0.99 UNION ALL
SELECT 'TP025', 'TGT013', 'PWY007', 'substrate', 0.95 UNION ALL
SELECT 'TP026', 'TGT014', 'PWY009', 'activator', 0.97 UNION ALL
SELECT 'TP027', 'TGT015', 'PWY001', 'activator', 0.91 UNION ALL
SELECT 'TP028', 'TGT015', 'PWY011', 'activator', 0.86 UNION ALL
SELECT 'TP029', 'TGT016', 'PWY001', 'activator', 0.84 UNION ALL
SELECT 'TP030', 'TGT016', 'PWY003', 'activator', 0.77 UNION ALL
SELECT 'TP031', 'TGT017', 'PWY001', 'activator', 0.88 UNION ALL
SELECT 'TP032', 'TGT017', 'PWY011', 'activator', 0.82 UNION ALL
SELECT 'TP033', 'TGT018', 'PWY002', 'activator', 0.96 UNION ALL
SELECT 'TP034', 'TGT018', 'PWY005', 'activator', 0.88 UNION ALL
SELECT 'TP035', 'TGT019', 'PWY001', 'activator', 0.97 UNION ALL
SELECT 'TP036', 'TGT019', 'PWY011', 'activator', 0.91 UNION ALL
SELECT 'TP037', 'TGT020', 'PWY012', 'substrate', 0.99;

4. إنشاء الرسم البياني للمواقع

بعد إنشاء الجداول بنجاح، يمكنك الآن إنشاء الرسم البياني للمواقع. يربط هذا الجدول العُقد (المركّبات والأهداف والمسارات) باستخدام جداول الحواف (Interactions وTarget Pathways).

نفِّذ العبارة التالية في "محرّر SQL" في BigQuery Studio:

CREATE OR REPLACE PROPERTY GRAPH drug_target_graph.drug_target_interaction_graph
NODE TABLES (
  drug_target_graph.compounds
    AS compound_node
    KEY (compound_id)
    LABEL Compound
    PROPERTIES (compound_id, compound_name, mechanism_of_action, dev_stage, therapeutic_area, molecular_weight),

  drug_target_graph.targets
    AS target_node
    KEY (target_id)
    LABEL Target
    PROPERTIES (target_id, target_name, gene_name, uniprot_id, target_class, is_oncogene),

  drug_target_graph.pathways
    AS pathway_node
    KEY (pathway_id)
    LABEL Pathway
    PROPERTIES (pathway_id, pathway_name, kegg_id, biological_process, disease_area, cancer_relevance)
)
EDGE TABLES (
  drug_target_graph.interactions
    AS binds_to_edge
    KEY (interaction_id)
    SOURCE KEY (compound_id) REFERENCES compound_node (compound_id)
    DESTINATION KEY (target_id) REFERENCES target_node (target_id)
    LABEL BINDS_TO
    PROPERTIES (interaction_id, affinity_nm, ic50_nm, interaction_type, pchembl_value),

  drug_target_graph.target_pathways
    AS participates_in_edge
    KEY (tp_id)
    SOURCE KEY (target_id) REFERENCES target_node (target_id)
    DESTINATION KEY (pathway_id) REFERENCES pathway_node (pathway_id)
    LABEL PARTICIPATES_IN
    PROPERTIES (tp_id, role, importance_score)
);

سيؤدي ذلك إلى إنشاء رسم بياني باسم drug_target_interaction_graph في مجموعة البيانات.

مخطط الرسم البياني

5- طلب البحث 1: ملف ربط كامل مستهدف لكل مركب

لننفّذ استعلام الرسم البياني الأول. هذه عملية انتقال بخطوة واحدة تجيب عن السؤال التالي: ما هي المركّبات التي ترتبط بالأهداف، وما هو تقاربها؟

طلب بحث GQL

نفِّذ الاستعلام التالي في "محرّر SQL":

SELECT
  compound_name,
  dev_stage,
  target_name,
  gene_name,
  target_class,
  interaction_type,
  ROUND(affinity_nm, 3) AS affinity_nm,
  ROUND(ic50_nm, 3)     AS ic50_nm,
  pchembl_value
FROM GRAPH_TABLE(
  drug_target_graph.drug_target_interaction_graph
  MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)
  COLUMNS (
    c.compound_name    AS compound_name,
    c.dev_stage        AS dev_stage,
    t.target_name      AS target_name,
    t.gene_name        AS gene_name,
    t.target_class     AS target_class,
    b.interaction_type AS interaction_type,
    b.affinity_nm      AS affinity_nm,
    b.ic50_nm          AS ic50_nm,
    b.pchembl_value    AS pchembl_value
  )
)
ORDER BY compound_name, interaction_type, affinity_nm;

إليك ما سيظهر لك في النتائج:

نتيجة الرسم البياني للربع الأول

6. طلب البحث 2: رصد مخاطر الإصابة بأمراض القلب

السؤال التجاري

في مجال اكتشاف الأدوية، من أكثر الأسباب شيوعًا لفشل مركب واعد في التجارب السريرية هو السمية القلبية، وتحديدًا الارتباط غير المقصود ببروتين hERG (الجين: KCNH2)، وهو قناة أيونات البوتاسيوم التي تنظّم نظم القلب. يمكن أن يؤدي التفاعل غير المستهدف مع قناة hERG إلى حدوث اضطرابات قاتلة في ضربات القلب، وقد كان السبب في سحب العديد من الأدوية البارزة.

السؤال الذي نريد الإجابة عنه هو:

"أيّ من المركّبات في خط إنتاجنا لديها حدث ربط خارج الهدف على بروتين hERG، وما هي مسارات القلب التي يعرّضها ذلك للخطر؟"

هذا سؤال من خطوتين: علينا الانتقال من مركب، من خلال هدف (hERG)، إلى مسار، أي ربط ثلاثة أنواع من الكيانات عبر علاقتين في طلب بحث واحد.

كتابة طلب GQL

نفِّذ الاستعلام التالي في "محرّر SQL" في BigQuery:

SELECT
  compound_name,
  dev_stage,
  therapeutic_area,
  target_name,
  ROUND(affinity_nm, 3) AS herg_affinity_nm,
  pathway_name,
  disease_area          AS pathway_disease_area
FROM GRAPH_TABLE(
  drug_target_graph.drug_target_interaction_graph
  MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
  WHERE t.gene_name        = 'KCNH2'
    AND b.interaction_type = 'off-target'
    AND pw.disease_area    = 'Cardiovascular'
  COLUMNS (
    c.compound_name    AS compound_name,
    c.dev_stage        AS dev_stage,
    c.therapeutic_area AS therapeutic_area,
    t.target_name      AS target_name,
    b.affinity_nm      AS affinity_nm,
    pw.pathway_name    AS pathway_name,
    pw.disease_area    AS disease_area
  )
)
ORDER BY herg_affinity_nm;

لاحظ كيف تبدو عبارة MATCH وكأنّها جملة: "ابحث عن مركّب يرتبط بهدف يشارك في مسار"، مع تطبيق الفلاتر على كل عقدة وحافة على طول المسار.

في ما يلي البيانات التي ستظهر لك في النتائج:

نتيجة جدول الربع الثاني للرسم البياني

تصوُّر "شبكة المخاطر" على شكل رسم بياني

يعرض الجدول البيانات، ولكنّه لا يوضّح بنية المخاطر. هل تتلاقى مركّبات متعددة في المسار نفسه؟ هل هناك مركّب واحد عالي الخطورة أم عدة مركّبات؟

ويتيح لك تصور الرسم البياني رؤية ذلك على الفور. شغِّل الخلية أدناه لعرض عملية الانتقال نفسها بخطوتين كشبكة تفاعلية:

GRAPH `drug_target_graph.drug_target_interaction_graph`
MATCH pt = (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
WHERE t.gene_name     = 'KCNH2'
  AND pw.disease_area = 'Cardiovascular'
RETURN
  TO_JSON(pt) AS path

من المفترض أن يظهر لك رسم بياني على النحو التالي:

عرض الرسم البياني

يتتبّع كل مسار في الرسم البياني سلسلة مسؤولية كاملة: يرتبط مركب (عُقد زرقاء) ببروتين hERG في الوسط، والذي يرتبط بمسار واحد أو أكثر من مسارات القلب (عُقد خضراء). ما كان عبارة عن قائمة مسطّحة من الصفوف في الجدول أصبح الآن شبكة مخاطر مرئية، فالمركبات التي تتضمّن تعرّضًا لمسارات متعددة تبرز على الفور كأولوية أعلى لمراجعة السلامة.

التعرّف على سبب كون GQL أكثر أناقة من SQL

لتنفيذ استعلام من خطوتَين نفسه في لغة SQL القياسية، تحتاج إلى 4 عمليات ربط صريحة. أنت تبذل جهدًا معرفيًا في وصف كيفية ضم الجداول بدلاً من وصف نوع العلاقة التي تبحث عنها. تتيح لك لغة GQL التركيز على السؤال.

SELECT
  c.compound_name,
  c.dev_stage,
  c.therapeutic_area,
  t.target_name,
  ROUND(i.affinity_nm, 3) AS herg_affinity_nm,
  pw.pathway_name,
  pw.disease_area         AS pathway_disease_area
FROM drug_target_graph.compounds c
JOIN drug_target_graph.interactions i ON c.compound_id = i.compound_id
JOIN drug_target_graph.targets t ON i.target_id = t.target_id
JOIN drug_target_graph.target_pathways tp ON t.target_id = tp.target_id
JOIN drug_target_graph.pathways pw ON tp.pathway_id = pw.pathway_id
WHERE t.gene_name = 'KCNH2'
  AND i.interaction_type = 'off-target'
  AND pw.disease_area = 'Cardiovascular'
ORDER BY herg_affinity_nm;

التعمّق أكثر: رصد مخاطر الأيضات المتعدّدة الخطوات

يحدّد طلب البحث أعلاه المركّبات التي ترتبط مباشرةً ببروتين hERG، ولكن في إجراءات سلامة الأدوية الفعلية، تكون المخاطر أحيانًا على بُعد خطوة واحدة: قد يتم تحويل المركّب استقلابيًا في الجسم إلى جزيء ثانوي (مستقلب) يرتبط بعد ذلك ببروتين hERG، وهي مسؤولية قد لا ترصدها فحوص الربط المباشر تمامًا.

إذا كان الرسم البياني الخاص بموقعك يتضمّن جدول عقدة Metabolite وحافة METABOLISES_INTO، يمكنك توسيع نمط MATCH نفسه إلى عملية اجتياز من 3 خطوات:

(Compound)-[METABOLISES_INTO]->(Metabolite)-[BINDS_TO]->
(Target)-[PARTICIPATES_IN]->(Pathway)

سيتغيّر بنية طلب بحث GQL بمقدار عقدة واحدة وحافة واحدة بالضبط، بينما سيتطلّب طلب بحث SQL المكافئ عمليتَي JOIN إضافيتَين. هذا هو النمط الذي يجعل عملية اجتياز الرسم البياني فعّالة بشكل خاص في تحليل سلسلة الأمان، إذ يزداد تعقيد طلب البحث بشكل خطي بينما تزداد المعلومات البيولوجية بشكل كبير.

7. طلب البحث 3: أزواج مركّبة ذات استهداف مشترك

للعثور على مرشّحين للعلاج التوافقي، يمكننا تحديد الحالات التي يرتبط فيها مركّبان مختلفان بعقدة الهدف نفسها. نستخدم المطابقة الثنائية الاتجاه للإجابة عن السؤال التالي: ما هي مركّبات علاج الأورام التي تتلاقى على الهدف نفسه تمامًا؟

نفِّذ الاستعلام التالي في "محرّر SQL":

SELECT
  compound_a,
  compound_b,
  shared_target,
  gene_name,
  ROUND(affinity_a_nm, 3) AS affinity_a_nm,
  ROUND(affinity_b_nm, 3) AS affinity_b_nm
FROM GRAPH_TABLE(
  drug_target_graph.drug_target_interaction_graph
  MATCH (c1:Compound)-[b1:BINDS_TO]->(t:Target)<-[b2:BINDS_TO]-(c2:Compound)
  WHERE c1.compound_id < c2.compound_id
    AND c1.therapeutic_area = 'Oncology'
    AND c2.therapeutic_area = 'Oncology'
  COLUMNS (
    c1.compound_name AS compound_a,
    c2.compound_name AS compound_b,
    t.target_name    AS shared_target,
    t.gene_name      AS gene_name,
    b1.affinity_nm   AS affinity_a_nm,
    b2.affinity_nm   AS affinity_b_nm
  )
)
ORDER BY compound_a, compound_b, affinity_a_nm;

في ما يلي البيانات التي ستظهر لك في النتائج:

نتيجة الرسم البياني للربع الثالث

عرض الرسم البياني

يمكنك عرض الرسم البياني مباشرةً في BigQuery من خلال تنفيذ الرمز التالي في محرّر SQL.

GRAPH `drug_target_graph.drug_target_interaction_graph`
MATCH p = (c1:Compound)-[b1:BINDS_TO]->(t:Target)<-[b2:BINDS_TO]-(c2:Compound)
WHERE c1.compound_id < c2.compound_id
  AND c1.therapeutic_area = 'Oncology'
RETURN
  TO_JSON(p) AS path

يؤدي هذا البحث الثنائي الاتجاه إلى إظهار أزواج مركّبة تتلاقى على البروتين المستهدف نفسه، وهو نمط يصعب رصده في جدول تفاعلات مسطّح، ولكنّه يظهر على الفور كرسم بياني. في مجال اكتشاف الأدوية، تُعدّ أزواج الأهداف المشتركة نقطة البداية لتصميم العلاج المركّب: قد يؤدي مركّبان يستهدفان العقدة نفسها في مسار السرطان إلى تأثير تآزري، أو قد يشيران إلى تكرار غير مقصود في خط الإنتاج.

عرض الرسم البياني

8. طلب البحث 4: نطاق انتشار مسار المرض

ما هو النطاق الواسع للتأثير البيولوجي لكل مركّب؟ لننفّذ عملية اجتياز من خطوتَين مع تجميع للإجابة عن السؤال التالي: كم عدد المسارات البيولوجية والأهداف المميّزة التي يؤثّر فيها كل مركب، مع تجميعها حسب مجال المرض؟

نفِّذ الاستعلام التالي في "محرّر SQL":

SELECT
  compound_name,
  dev_stage,
  disease_area,
  COUNT(DISTINCT pathway_id) AS pathways_affected,
  COUNT(DISTINCT target_id)  AS targets_involved,
  STRING_AGG(DISTINCT pathway_name ORDER BY pathway_name) AS pathway_list
FROM GRAPH_TABLE(
  drug_target_graph.drug_target_interaction_graph
  MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
  COLUMNS (
    c.compound_name AS compound_name,
    c.dev_stage     AS dev_stage,
    t.target_id     AS target_id,
    pw.pathway_id   AS pathway_id,
    pw.pathway_name AS pathway_name,
    pw.disease_area AS disease_area
  )
)
GROUP BY compound_name, dev_stage, disease_area
ORDER BY compound_name, pathways_affected DESC;

إليك ما سيظهر لك في النتائج:

Graph q4 Result

9- الاستعلام 5: اختيار المركّب الآمن

أخيرًا، لنبحث عن مركّبات ذات تغطية عالية في علم الأورام ولكنها تتجنّب بشكل صريح مخاطر hERG (القلبية) غير المستهدفة. يتطابق هذا مع أنماط الاختيار الشائعة التي تعطي الأولوية للسلامة في مسارات اكتشاف الأدوية.

نفِّذ الاستعلام التالي في "محرّر SQL":

WITH oncology_compounds AS (
  SELECT DISTINCT compound_id, compound_name, dev_stage
  FROM GRAPH_TABLE(
    drug_target_graph.drug_target_interaction_graph
    MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)-[p:PARTICIPATES_IN]->(pw:Pathway)
    WHERE pw.disease_area     = 'Oncology'
      AND pw.cancer_relevance = 'high'
    COLUMNS (
      c.compound_id   AS compound_id,
      c.compound_name AS compound_name,
      c.dev_stage     AS dev_stage
    )
  )
),
herg_risk_compounds AS (
  SELECT DISTINCT compound_id
  FROM GRAPH_TABLE(
    drug_target_graph.drug_target_interaction_graph
    MATCH (c:Compound)-[b:BINDS_TO]->(t:Target)
    WHERE t.gene_name = 'KCNH2'
    COLUMNS (c.compound_id AS compound_id)
  )
)
SELECT
  o.compound_name,
  o.dev_stage,
  'Clean cardiac profile' AS cardiac_safety
FROM oncology_compounds o
LEFT JOIN herg_risk_compounds h ON o.compound_id = h.compound_id
WHERE h.compound_id IS NULL
ORDER BY o.dev_stage, o.compound_name;

إليك الناتج الذي سيظهر لك في النتائج:

نتيجة الرسم البياني 5

لقد نفّذت عمليات اجتياز متقدّمة للرسومات البيانية في BigQuery بنجاح لاستخراج ملفات تعريف رئيسية للسلامة والفعالية.

10. قسم إضافي: الدردشة مع الرسم البياني

تتيح لك ميزة Conversational Analytics في BigQuery الآن استخدام الرسم البياني كمصدر للمعرفة، ما يتيح لك الدردشة مع الرسم البياني الذي أنشأته للتو باللغة الطبيعية.

البدء: إضافة رسم بياني كمصدر معرفة

للبدء، أنشئ وكيلًا حواريًا باتّباع الخطوات هنا، ثم اختَر الرسم البياني الذي أنشأته من شريط البحث.

إعداد Graph Conversational Analytics

استخدام ميزة Conversational Analytics في BigQuery للدردشة مع الرسم البياني

بعد إضافة مصدر المعرفة كرسم بياني، أكمل بقية إعداد وكيل التحليلات الحوارية.

يمكنك بعد ذلك بدء الدردشة مع الرسم البياني باللغة الطبيعية.

الدردشة مع الرسم البياني

أسئلة إضافية

  1. ما هي جميع الأهداف الخاصة بالمركّبات التي تخضع حاليًا لتجارب المرحلة الثانية؟
  2. ما هي الأهداف المشتركة بين مركّبات القلب والأوعية الدموية والأورام؟

11. تَنظيم

لتجنُّب الرسوم المستمرة على حسابك على Google Cloud، احذف الموارد التي تم إنشاؤها أثناء هذا الدرس العملي.

نفِّذ طلب البحث التالي لإزالة المخطط وجميع الجداول بشكل متتالي:

DROP SCHEMA IF EXISTS drug_target_graph CASCADE;

12. تهانينا

تهانينا! لقد تم بنجاح تصميم وتحليل شبكة تفاعلات بين الأدوية والأهداف باستخدام BigQuery Graph.

ما تعلّمته

  • كيفية تصميم علاقات الكيانات (المركبات والأهداف والمسارات) كرسومات بيانية للخصائص
  • كيفية تحديد المخطط وإنشاء "رسم بياني للعلاقات" في BigQuery
  • كيفية كتابة عمليات اجتياز معقّدة للرسومات البيانية باستخدام GQL ومقارنتها بلغة SQL التقليدية
  • كيفية الاستفادة من GRAPH_TABLE وMATCH والمطابقة الثنائية الاتجاه لحلّ المشاكل في مجال علوم الحياة

المستندات المرجعية