جودة البيانات والتناسق هما كقاعدة المنزل—بدون قاعدة صلبة، كل شيء مبني فوقها معرض للانهيار. هنا تلعب عملية التحقق من البيانات دورًا مهمًا. يساعدك التحقق من البيانات على التأكد من أن بياناتك دقيقة ومتسقة وموثوقة.
توقعات عظيمة هي أداة مفتوحة المصدر للتحقق من البيانات تتيح لك تحديد مشكلات البيانات مبكرًا وتضمن أن بياناتك تلبي معايير الجودة المطلوبة.
في هذا الدليل، سنرشدك خلال عملية استخدام توقعات عظيمة للتحقق من البيانات، مع مثال عملي شامل لمساعدتك في البدء!
ما هي توقعات عظيمة؟
توقعات عظيمة (GX) هي إطار عمل مفتوح المصدر أصبح شائعًا لإدارة وأتمتة التحقق من البيانات في خطوط بيانات حديثة.
إطار العمل المستند إلى بايثون مصمم لمساعدة فرق البيانات في ضمان جودة وتناسق بياناتهم. يمكن للمستخدمين تحديد “التوقعات” – القواعد أو الاختبارات التي تصف كيف يجب أن تبدو البيانات الصالحة – التي تتحقق تلقائيًا مما إذا كانت البيانات تفي بهذه المعايير.
تشمل بعض فوائد التوقعات العظيمة:
- التحقق التلقائي من البيانات – تقوم التوقعات العظيمة بأتمتة عملية التحقق من البيانات، مما يقلل من الجهد اليدوي ويقلل من خطر الأخطاء. إنها تضمن أن البيانات تفي باستمرار بالمعايير المحددة مسبقًا.
- التكامل مع خطوط بيانات – يتكامل بسهولة مع مصادر البيانات المختلفة والمنصات، بما في ذلك قواعد بيانات SQL، التخزين السحابي، وأدوات ETL، مما يسمح بالتحقق من صحة البيانات عبر مراحل مختلفة من خط أنابيبك.
- نتائج تحقق واضحة وقابلة للتنفيذ – توفر الأداة نتائج تحقق شفافة، مما يسهل اكتشاف مشكلات جودة البيانات ومعالجتها بسرعة.
- توثيق البيانات – يمكن لـ Great Expectations توليد توثيق مفصل وسهل الوصول لعمليات التحقق من البيانات الخاصة بك، مما يساعد الفرق على التوافق بشأن معايير الجودة ويوفر مرجعًا للاستخدام المستقبلي.
- قابلية التوسع والمرونة – كأداة مفتوحة المصدر، فإن Great Expectations قابلة للتخصيص للغاية ويمكن أن تتوسع مع احتياجاتك من التحقق من البيانات، مما يوفر مرونة للتكيف مع حالات الاستخدام المختلفة دون تكاليف مرتفعة.
الآن، دعنا نلقي نظرة على مثال شامل من البداية إلى النهاية!
إعداد Great Expectations
في هذا الدليل، ستتعلم كيفية استخدام GX Core، النسخة مفتوحة المصدر من Great Expectations، للتحقق من صحة إطار بيانات Pandas. سنقوم بشرح كيفية إعداد سياق، تسجيل مصدر بيانات Pandas، تحديد التوقعات، والتحقق من دفعات البيانات.
ملاحظة: نوصيك بمتابعة الدليل مع دفتر DataLab، لكن يمكنك أيضًا إنشاء نص Python خاص بك.
1. تثبيت Great Expectations
المتطلبات الأساسية
- تم تثبيت Python من 3.9 إلى 3.12.
- لتجنب النزاعات، يُوصى بشدة أن تقوم بتثبيت Great Expectations ضمن بيئة افتراضية (تنويه: إعداد البيئات الافتراضية يتجاوز نطاق هذه المقالة).
- مجموعة بيانات نموذجية.
ملاحظة: إذا كنت تستخدم دفتر DataLab المقدم، فقد تم تلبية هذه المتطلبات المسبقة بالفعل. لا تتردد في تخطيها.
استخدم الأمر التالي لتثبيت GX عبر pip:
pip install great_expectations
هذا الأمر يثبت الحزمة الأساسية وجميع الاعتماديات اللازمة.
2. تهيئة سياق البيانات
يتطلب Great Expectations سياق بيانات لإدارة التكوينات. نحن نستخدم سياق بيانات مؤقت لتجنب حفظ التكوينات.
import great_expectations as gx # الحصول على سياق البيانات المؤقت context = gx.get_context() assert type(context).__name__ == "EphemeralDataContext"
إنشاء مجموعة التحقق من البيانات الأولى الخاصة بك
الآن بعد أن تم إعداد GX، دعنا ننشئ مجموعة للتحقق من البيانات.
1. الاتصال بمصدر البيانات وإنشاء أصل بيانات
يربط مصدر البيانات بين Great Expectations وبياناتك، بينما يمثل أصل البيانات مجموعة فرعية محددة من البيانات (مثل جدول، DataFrame، أو ملف).
في هذه الحالة، سنقوم بتحضير كل شيء للاتصال بإطار البيانات المسمى inventory_parts_df
. مجموعة البيانات النموذجية متاحة في DataLab المقدم، ويتم إنشاؤها بمجرد تشغيل كتلة SQL:
إذا كنت لا تستخدم DataLab، قم بإنشاء إطار بيانات خاص بك مع بيانات نموذجية.
الآن، قم بإنشاء مصدر بياناتك والأصل:
# أضف مصدر بيانات Pandas data_source = context.data_sources.add_pandas(name="inventory_parts") # أضف أصل بيانات إلى مصدر البيانات data_asset = data_source.add_dataframe_asset(name="inventory_parts_asset")
2. إضافة تعريف دفعة
تعريف الدفعة يحدد وينظم بياناتك للتحقق. هنا، نضيف تعريف دفعة يغطي إطار البيانات بالكامل:
# تعريف اسم تعريف الدفعة batch_definition_name = "inventory_parts_batch" # إضافة تعريف الدفعة batch_definition = data_asset.add_batch_definition_whole_dataframe(batch_definition_name) assert batch_definition.name == batch_definition_name
3. استرجاع دفعة
الدفعة هي مجموعة من البيانات مرتبطة بتعريف دفعة. للتحقق من البيانات، ستحتاج إلى استرجاع وربط الدفعة بإطار البيانات الخاص بك، في هذه الحالة inventory_parts_df
:
# تعريف معلمات الدفعة batch_parameters = {"dataframe": inventory_parts_df} # استرجاع الدفعة batch = batch_definition.get_batch(batch_parameters=batch_parameters)
4. إنشاء مجموعة وتحديد التوقعات
التوقعات هي قواعد للتحقق من البيانات. في هذا المثال، سنحدد التوقعات البسيطة التالية:
- ضمان أن قيم
inventory_id
غير فارغة. - ضمان أن قيم
part_num
فريدة.
# إنشاء مجموعة توقعات expectation_suite_name = "inventory_parts_suite" suite = gx.ExpectationSuite(name=expectation_suite_name) # إضافة توقعات suite.add_expectation( gx.expectations.ExpectColumnValuesToNotBeNull(column="inventory_id") ) suite.add_expectation( gx.expectations.ExpectColumnValuesToBeUnique(column="part_num") ) # إضافة مجموعة التوقعات إلى السياق context.suites.add(suite)
يمكنك استكشاف جميع التوقعات المتاحة في معرض التوقعات. نشجعك على إضافة المزيد!
بعد تحديد التوقعات، يقوم GX بإخراج تكوين مجموعة التوقعات:
{ "name": "inventory_parts_suite", "id": "b2de0b69-0869-4163-8dde-6c09884483f7", "expectations": [ { "type": "expect_column_values_to_not_be_null", "kwargs": { "column": "inventory_id" }, "meta": {}, "id": "53d6c42a-d190-412f-a113-783b706531f4" }, { "type": "expect_column_values_to_be_unique", "kwargs": { "column": "part_num" }, "meta": {}, "id": "362a2bdc-616d-4b3a-b7f0-c73808caee78" } ], "meta": { "great_expectations_version": "1.2.4" }, "notes": null }
تشمل المجموعة التفاصيل التالية:
- اسم المجموعة والمعرف: اسم فريد (
inventory_parts_suite
) ومعرف لتتبع وإدارة المجموعة. - التوقعات: كل قاعدة تحدد:
- نوع التحقق (مثل التأكد من عدم وجود قيم فارغة في عمود أو من إدخالات فريدة).
- المعلمات، مثل العمود الذي يتم التحقق منه.
- بيانات وصفية ومعرف فريد لكل توقع، مما يسهل تتبعه وتخصيصه.
- بيانات وصفية: معلومات الإصدار لـ Great Expectations، لضمان التوافق مع الأداة.
- ملاحظات: مكان لإضافة تعليقات وصفية حول المجموعة (اختياري).
يعمل هذا الإخراج المنظم كوثيقة وكإعداد قابل لإعادة الاستخدام للتحقق من مجموعة البيانات الخاصة بك بحيث تكون توقعاتك محددة بوضوح، وقابلة للتتبع، وجاهزة للاستخدام المستقبلي.
5. التحقق من البيانات
أخيرًا، تحقق من الدفعة مقابل التوقعات المحددة وقيم النتائج.
# تحقق من البيانات مقابل المجموعة validation_results = batch.validate(suite) # تقييم النتائج print(validation_results)
بعد إجراء عملية التحقق، يقدم برنامج Great Expectations تقريرًا مفصلًا حول ما إذا كانت مجموعة البيانات تلبي التوقعات المحددة:
{ "success": false, "results": [ { "success": true, "expectation_config": { "type": "expect_column_values_to_not_be_null", "kwargs": { "batch_id": "inventory_parts-inventory_parts_asset", "column": "inventory_id" }, "meta": {}, "id": "53d6c42a-d190-412f-a113-783b706531f4" }, "result": { "element_count": 580069, "unexpected_count": 0, "unexpected_percent": 0.0, "partial_unexpected_list": [], "partial_unexpected_counts": [], "partial_unexpected_index_list": [] }, "meta": {}, "exception_info": { "raised_exception": false, "exception_traceback": null, "exception_message": null } }, { "success": false, "expectation_config": { "type": "expect_column_values_to_be_unique", "kwargs": { "batch_id": "inventory_parts-inventory_parts_asset", "column": "part_num" }, "meta": {}, "id": "362a2bdc-616d-4b3a-b7f0-c73808caee78" }, "result": { "element_count": 580069, "unexpected_count": 568352, "unexpected_percent": 97.98006788847535, "partial_unexpected_list": [ "48379c01", "paddle", "11816pr0005", "2343", "3003", "30176", "3020", "3022", "3023", "30357", "3039", "3062b", "3068b", "3069b", "3069b", "33291", "33291", "3795", "3941", "3960" ], "missing_count": 0, "missing_percent": 0.0, "unexpected_percent_total": 97.98006788847535, "unexpected_percent_nonmissing": 97.98006788847535, "partial_unexpected_counts": [ { "value": "3069b", "count": 2 }, { "value": "33291", "count": 2 }, { "value": "11816pr0005", "count": 1 }, { "value": "2343", "count": 1 }, { "value": "3003", "count": 1 }, { "value": "30176", "count": 1 }, { "value": "3020", "count": 1 }, { "value": "3022", "count": 1 }, { "value": "3023", "count": 1 }, { "value": "30357", "count": 1 }, { "value": "3039", "count": 1 }, { "value": "3062b", "count": 1 }, { "value": "3068b", "count": 1 }, { "value": "3795", "count": 1 }, { "value": "3941", "count": 1 }, { "value": "3960", "count": 1 }, { "value": "48379c01", "count": 1 }, { "value": "paddle", "count": 1 } ], "partial_unexpected_index_list": [ 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 ] }, "meta": {}, "exception_info": { "raised_exception": false, "exception_traceback": null, "exception_message": null } } ], "suite_name": "inventory_parts_suite", "suite_parameters": {}, "statistics": { "evaluated_expectations": 2, "successful_expectations": 1, "unsuccessful_expectations": 1, "success_percent": 50.0 }, "meta": { "great_expectations_version": "1.2.4", "batch_spec": { "batch_data": "PandasDataFrame" }, "batch_markers": { "ge_load_time": "20241129T122532.416424Z", "pandas_data_fingerprint": "84a1e1939091fcf54324910def3b89cd" }, "active_batch_definition": { "datasource_name": "inventory_parts", "data_connector_name": "fluent", "data_asset_name": "inventory_parts_asset", "batch_identifiers": { "dataframe": "<DATAFRAME>" } } }, "id": null }
تقرير هذا يُفصل جودة بياناتك، موضحًا النجاحات والإخفاقات. إليك شرح مبسط للنتائج:
التحقق العام: كانت نتيجة التحقق جزئيًا ناجحة: 50% من التوقعات تم اجتيازها، و50% فشلت. تشير التوقعات الفاشلة إلى وجود مشكلة في جودة البيانات تحتاج إلى اهتمام. في هذه الحالة، لم يلتزم أحد الأعمدة بالقواعد المحددة.
التوقع 1: inventory_id
يجب ألا يحتوي على قيم مفقودة
- النتيجة: ناجح
- التفسير: كل قيمة في عمود
inventory_id
موجودة، ولا توجد قيم فارغة أو مفقودة. هذا يشير إلى كمال البيانات الجيد لهذا العمود.
التوقع 2: part_num
يجب أن تحتوي على قيم فريدة
- النتيجة: فشل
- التفسير: تحتوي عمود
part_num
على 97.98% من القيم المكررة، مما يعني أن القليل من القيم فريدة. - النقاط البارزة:
- تشمل القيم المكررة على سبيل المثال “3069b” و “33291”.
- تظهر الأداة أيضًا مدى تكرار ظهور هذه القيم المكررة ومواقع صفوفها، مما يسهل تحديد المشكلات وإصلاحها.
بالطبع، هذه مجرد مجموعة بيانات عينة، وقد قمنا عمداً بتضمين توقع ناجح وآخر فاشل حتى تتمكن من رؤية كلا نتائج التحقق.
هذا كل شيء! لقد قمت بنجاح بتشغيل عمليات التحقق من البيانات من البداية إلى النهاية.
دمج التوقعات العظيمة في خطوط بياناتك
في بيئة الإنتاج، يجب أن تكون عمليات التحقق مدمجة مباشرة في سير العمل لمراقبة جودة البيانات باستمرار في كل مرحلة.
في هذا القسم، سنناقش كيف يمكنك دمج التوقعات العظيمة في خطوط بياناتك.
هذه أمثلة لإعطائك فكرة، وقد تكون هناك تكوينات إضافية غير مذكورة هنا مطلوب. تحقق من وثائق كل أداة للحصول على الصياغة المحدثة!
التكامل مع أدوات ETL
إن دمج Great Expectations مع أدوات ETL الشائعة مثل Apache Airflow أو Prefect هو أمر بسيط نسبيًا. سيتيح لك تضمين خطوات التحقق مباشرة في عمليات ETL اكتشاف ومعالجة مشكلات البيانات في الوقت الفعلي قبل أن تؤثر على التحليل اللاحق.
دعونا نستعرض مثالًا بسيطًا لدمج Great Expectations مع Prefect لتشغيل تحقق البيانات كجزء من سير عمل ETL المؤتمت:
from prefect import task, Flow import great_expectations as ge # تعريف مهمة لتشغيل تحقق Great Expectations @task def validate_data(): context = ge.data_context.DataContext() batch_kwargs = {"path": "path/to/your/datafile.csv", "datasource": "your_datasource"} batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite") results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch]) # تحقق من نتائج التحقق ورفع تنبيه إذا فشل التحقق if not results["success"]: raise ValueError("Data validation failed!") # تعريف سير عمل ETL الخاص بك with Flow("ETL_with_GE_Validation") as flow: validation = validate_data() # تنفيذ سير العمل flow.run()
في هذا المثال، نقوم بتعريف سير عمل Prefect مع مهمة لتشغيل تحقق Great Expectations.
تقوم مهمة validate_data()
بتحميل سياق التوقعات العظيمة، واسترجاع دفعة البيانات، وتطبيق مجموعة التوقعات.
إذا لم تستوفِ البيانات معايير التحقق، فإن المهمة تثير تنبيهاً، مما يؤدي إلى توقف سير العمل ومنع الأخطاء في المراحل التالية.
التحقق المستمر من البيانات
يمكنك جدولة مهام التحقق باستخدام أدوات مختلفة، مثل مهام الكرون على الأنظمة المستندة إلى يونكس أو الخدمات المدارة مثل Apache Airflow. في هذا المثال، سنوضح كيفية جدولة عمليات التحقق باستخدام Airflow، الذي يناسب بشكل جيد تنظيم خطوط بيانات.
إليك كيفية إعداد DAG في Airflow (الرسم البياني الموجه غير الدوري) لتشغيل تحقق التوقعات العظيمة يومياً:
from airflow import DAG from airflow.operators.python_operator import PythonOperator from datetime import datetime import great_expectations as ge # تعريف الـ DAG وتحديد الجدول الزمني للتشغيل يومياً default_args = { 'owner': 'airflow', 'start_date': datetime(2024, 1, 1), 'retries': 1, } dag = DAG( 'great_expectations_validation', default_args=default_args, schedule_interval='@daily', # يعمل مرة واحدة في اليوم ) # تعريف الدالة لتشغيل التحقق def run_validation(): context = ge.data_context.DataContext() batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite") results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch]) return results # إعداد المهمة في Airflow validation_task = PythonOperator( task_id='run_great_expectations_validation', python_callable=run_validation, dag=dag, ) # تعيين المهمة في الـ DAG validation_task
في هذا المثال، نقوم بتعريف DAG يقوم بجدولة تشغيل التحقق مرة واحدة في اليوم (@daily
).
تقوم دالة run_validation()
بتنفيذ التحقق من خلال تحميل سياق التوقعات العظيمة وتشغيل مجموعة التوقعات المحددة مقابل البيانات.
أفضل الممارسات للتحقق من البيانات مع التوقعات العظيمة
اتباع أفضل الممارسات دائماً هو الأفضل لتحقيق القابلية للتوسع والكفاءة، وليس هناك اختلاف في ذلك بالنسبة للتحقق من البيانات مع التوقعات العظيمة.
ابدأ صغيراً وكرر
ابدأ بفحوصات جودة البيانات الأساسية وتوسع تدريجياً. من الأفضل التركيز على التوقعات الأساسية في البداية، حيث أن ذلك يساعد في تجنب تعقيد العملية، مما يسهل التكامل ويجعل حل المشكلات أكثر سهولة. مع تحسن فهمك لمجموعة البيانات، يمكنك إضافة عمليات تحقق أكثر تعقيدًا.
التعاون بين الفرق
جودة البيانات ليست مجرد مسألة تقنية. تعاون مع الفرق التجارية لتحديد التوقعات وضمان توافق التحقق المطبق مع المنطق التجاري والأهداف الأساسية. تضمن هذه المقاربة متعددة الوظائف أن البيانات تخدم الغرض المقصود منها وتلبي متطلبات جميع الأطراف المعنية.
التلقائية حيثما أمكن
قم بأتمتة العملية حيثما كان ذلك ممكنًا لدمج تحقق البيانات في خطوط بيانات. يتيح دمج عمليات التحقق التلقائية مراقبة مستمرة لجودة البيانات دون تدخل يدوي، مما يحسن الكفاءة بشكل كبير.
الخاتمة
عمل رائع! لقد تعلمت كيفية تكوين والتحقق من البيانات في Great Expectations. ستساعدك هذه التقنيات في الحفاظ على جودة البيانات العالية والشفافية في سير عملك.
لمواصلة تطوير مهاراتك، تحقق من هذه الموارد:
- ETL و ELT في بايثون: تعلم كيفية تحويل ونقل البيانات بشكل فعال.
- مقدمة في جودة البيانات: استكشف أساسيات إدارة جودة البيانات.
- تنظيف البيانات في بايثون: اتقن تقنيات تنظيف البيانات لضمان الدقة والاتساق.
- ورقة غش أبعاد جودة البيانات: دليل مفيد لأبعاد جودة البيانات.
Source:
https://www.datacamp.com/tutorial/great-expectations-tutorial