Mage هي أداة قوية لمهام ETL، مع ميزات تتيح استكشاف البيانات واستخراجها، وتصورات سريعة من خلال قوالب الرسوم البيانية والعديد من الميزات الأخرى التي تحول عملك بالبيانات إلى شيء سحري.
في معالجة البيانات، أثناء عملية ETL، من الشائع العثور على البيانات المفقودة التي يمكن أن تولد مشاكل في المستقبل، اعتمادًا على النشاط الذي سننفذه مع مجموعة البيانات، يمكن أن تكون البيانات الفارغة مدمرة تمامًا.
لتحديد عدم وجود بيانات في مجموعة البيانات الخاصة بنا، يمكننا استخدام Python ومكتبة Pandas للتحقق من البيانات التي تقدم قيمًا فارغة، بالإضافة إلى أنه يمكننا إنشاء رسوم بيانية توضح بشكل أكثر وضوحًا تأثير هذه القيم الخالية في مجموعة البيانات لدينا.
يتكون مسارنا من 4 خطوات: البدء بتحميل البيانات وخطوتين للمعالجة وتصدير البيانات.
سنستخدم في هذه المقالة مجموعة البيانات: التنبؤ الثنائي بالفطر السام والمتاح على Kaggle كجزء من المنافسة. دعونا نستخدم مجموعة بيانات التدريب المتاحة على الموقع.
فلنقم بإنشاء خطوة أداة تحميل البيانات باستخدام لغة بايثون حتى نتمكن من تحميل البيانات التي سنستخدمها. قبل هذه الخطوة، قمت بإنشاء جدول في قاعدة بيانات Postgres، وهو موجود محليًا على جهازي، حتى أتمكن من تحميل البيانات. نظرًا لأن البيانات موجودة في Postgres، فسوف نستخدم قالب تحميل Postgres المحدد بالفعل داخل Mage.
from mage_ai.settings.repo import get_repo_path from mage_ai.io.config import ConfigFileLoader from mage_ai.io.postgres import Postgres from os import path if 'data_loader' not in globals(): from mage_ai.data_preparation.decorators import data_loader if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @data_loader def load_data_from_postgres(*args, **kwargs): """ Template for loading data from a PostgreSQL database. Specify your configuration settings in 'io_config.yaml'. Docs: https://docs.mage.ai/design/data-loading#postgresql """ query = 'SELECT * FROM mushroom' # Specify your SQL query here config_path = path.join(get_repo_path(), 'io_config.yaml') config_profile = 'default' with Postgres.with_config(ConfigFileLoader(config_path, config_profile)) as loader: return loader.load(query) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
ضمن الدالة load_data_from_postgres() سنقوم بتحديد الاستعلام الذي سنستخدمه لتحميل الجدول في قاعدة البيانات. في حالتي، قمت بتكوين معلومات البنك في الملف io_config.yaml حيث تم تعريفها على أنها التكوين الافتراضي، لذلك نحتاج فقط إلى تمرير الاسم الافتراضي إلى المتغير config_profile.
بعد تنفيذ الكتلة، سنستخدم ميزة إضافة مخطط، والتي ستوفر معلومات حول بياناتنا من خلال قوالب محددة بالفعل. ما عليك سوى النقر على الأيقونة الموجودة بجوار زر التشغيل، والمميزة في الصورة بخط أصفر.
سنختار خيارين لاستكشاف مجموعة البيانات الخاصة بنا بشكل أكبر، خياري summay_overview وfeature_profiles. من خلال Summary_overview، نحصل على معلومات حول عدد الأعمدة والصفوف في مجموعة البيانات. يمكننا أيضًا عرض إجمالي عدد الأعمدة حسب النوع، على سبيل المثال إجمالي عدد الأعمدة الفئوية والرقمية والبوليانية. من ناحية أخرى، تقدم ميزة Features_profiles معلومات وصفية أكثر حول البيانات، مثل: النوع، الحد الأدنى للقيمة، الحد الأقصى للقيمة، من بين معلومات أخرى، يمكننا حتى تصور القيم المفقودة، والتي هي محور معالجتنا.
لكي نتمكن من التركيز بشكل أكبر على البيانات المفقودة، فلنستخدم القالب: % من القيم المفقودة، ورسم بياني شريطي مع النسبة المئوية للبيانات المفقودة، في كل عمود.
يعرض الرسم البياني 4 أعمدة حيث تقابل القيم المفقودة أكثر من 80% من محتواه، وأعمدة أخرى تمثل القيم المفقودة ولكن بكميات أقل، تتيح لنا هذه المعلومات الآن البحث عن استراتيجيات مختلفة للتعامل مع هذا بيانات فارغة
بالنسبة للأعمدة التي تحتوي على أكثر من 80% من القيم الخالية، ستكون الإستراتيجية التي سنتبعها هي تنفيذ أعمدة إسقاط في إطار البيانات، وتحديد الأعمدة التي سنقوم باستبعادها من إطار البيانات. باستخدام كتلة TRANSFORMER في لغة بايثون، سنختار خيار إزالة العمود .
from mage_ai.data_cleaner.transformer_actions.base import BaseAction from mage_ai.data_cleaner.transformer_actions.constants import ActionType, Axis from mage_ai.data_cleaner.transformer_actions.utils import build_transformer_action from pandas import DataFrame if 'transformer' not in globals(): from mage_ai.data_preparation.decorators import transformer if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @transformer def execute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame: """ Execute Transformer Action: ActionType.REMOVE Docs: https://docs.mage.ai/guides/transformer-blocks#remove-columns """ action = build_transformer_action( df, action_type=ActionType.REMOVE, arguments=['veil_type', 'spore_print_color', 'stem_root', 'veil_color'], axis=Axis.COLUMN, ) return BaseAction(action).execute(df) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
ضمن الوظيفة execute_transformer_action() سنقوم بإدراج قائمة بأسماء الأعمدة التي نريد استبعادها من مجموعة البيانات، في متغير الوسائط، بعد هذه الخطوة، فقط قم بتنفيذ الكتلة.
الآن بالنسبة للأعمدة التي تحتوي على أقل من 80% من القيم الخالية، سنستخدم استراتيجية ملء القيم المفقودة، كما هو الحال في بعض الحالات على الرغم من وجود بيانات مفقودة، واستبدالها بقيم مثل متوسطًا أو عصريًا، فقد يكون قادرًا على تلبية احتياجات البيانات دون التسبب في العديد من التغييرات في مجموعة البيانات، اعتمادًا على هدفك النهائي.
هناك بعض المهام، مثل التصنيف، حيث يمكن أن يساهم استبدال البيانات المفقودة بقيمة ذات صلة (الوضع، المتوسط، الوسيط) لمجموعة البيانات، في خوارزمية التصنيف، والتي يمكن أن تصل إلى استنتاجات أخرى إذا تم حذف البيانات كما في الإستراتيجية الأخرى التي استخدمناها.
لاتخاذ قرار بشأن القياس الذي سنستخدمه، سوف نستخدم وظيفة Mage إضافة مخطط مرة أخرى. باستخدام القالب القيم الأكثر شيوعًا يمكننا تصور وضع وتكرار هذه القيمة في كل عمود.
باتباع الخطوات المشابهة للخطوات السابقة، سنستخدم المحول ملء القيم المفقودة، للقيام بمهمة طرح البيانات المفقودة باستخدام الوضع الخاص بكل عمود: steam_surface، gill_spacing، cap_surface ، مرفق الخياشيم، نوع الحلقة.
from mage_ai.data_cleaner.transformer_actions.constants import ImputationStrategy from mage_ai.data_cleaner.transformer_actions.base import BaseAction from mage_ai.data_cleaner.transformer_actions.constants import ActionType, Axis from mage_ai.data_cleaner.transformer_actions.utils import build_transformer_action from pandas import DataFrame if 'transformer' not in globals(): from mage_ai.data_preparation.decorators import transformer if 'test' not in globals(): from mage_ai.data_preparation.decorators import test @transformer def execute_transformer_action(df: DataFrame, *args, **kwargs) -> DataFrame: """ Execute Transformer Action: ActionType.IMPUTE Docs: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values """ action = build_transformer_action( df, action_type=ActionType.IMPUTE, arguments=df.columns, # Specify columns to impute axis=Axis.COLUMN, options={'strategy': ImputationStrategy.MODE}, # Specify imputation strategy ) return BaseAction(action).execute(df) @test def test_output(output, *args) -> None: """ Template code for testing the output of the block. """ assert output is not None, 'The output is undefined'
في الدالة execute_transformer_action()، نحدد استراتيجية استبدال البيانات في قاموس بايثون. لمزيد من خيارات الاستبدال، ما عليك سوى الوصول إلى وثائق المحول: https://docs.mage.ai/guides/transformer-blocks#fill-in-missing-values.
عند تنفيذ جميع التحويلات، سنحفظ مجموعة البيانات التي تمت معالجتها الآن، في نفس قاعدة بيانات Postgres ولكن الآن باسم مختلف حتى نتمكن من التمييز. باستخدام كتلة Data Exporter واختيار Postgres، سنحدد الشيما والجدول الذي نريد حفظه، مع تذكر أن تكوينات قاعدة البيانات قد تم حفظها مسبقًا في الملف io_config.yaml.
from mage_ai.settings.repo import get_repo_path from mage_ai.io.config import ConfigFileLoader from mage_ai.io.postgres import Postgres from pandas import DataFrame from os import path if 'data_exporter' not in globals(): from mage_ai.data_preparation.decorators import data_exporter @data_exporter def export_data_to_postgres(df: DataFrame, **kwargs) -> None: """ Template for exporting data to a PostgreSQL database. Specify your configuration settings in 'io_config.yaml'. Docs: https://docs.mage.ai/design/data-loading#postgresql """ schema_name = 'public' # Specify the name of the schema to export data to table_name = 'mushroom_clean' # Specify the name of the table to export data to config_path = path.join(get_repo_path(), 'io_config.yaml') config_profile = 'default' with Postgres.with_config(ConfigFileLoader(config_path, config_profile)) as loader: loader.export( df, schema_name, table_name, index=False, # Specifies whether to include index in exported table if_exists='replace', #Specify resolution policy if table name already exists )
الريبو -> https://github.com/DeadPunnk/Mushrooms/tree/main
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3