چگونه پاندا تمیز کردن داده های ETL را ساده می کند

هنگام بحث در مورد “T” در فرآیند ETL (عصاره ، تبدیل ، بار) ، بخش عظیمی از کار شامل تمیز کردن داده ها و اطمینان از آماده سازی آن برای تجزیه و تحلیل است.
اگر شما یک مهندس داده هستید ، احتمالاً بارها و بارها از بشکه صفحات گسترده کثیف خیره شده اید ، ستون هایی که دارای مقادیر تهی هستند ، تاریخ هایی که به هر روشی ، متن متناقض و آن دسته از فضای باز و دلپذیر قالب بندی می شوند. کار ما این است که این هرج و مرج را به خطوط لوله داده تمیز و قابل اعتماد بپردازیم.
در این مقاله خواهیم دید که چگونه پاندا ، یک کتابخانه دستکاری داده که در پایتون نوشته شده است ، می تواند به رفع این چالش ها کمک کرده و فرآیند تمیز کردن داده ها را در زمینه خطوط لوله ETL ساده کند.
ما از یک نمونه واقعی از داده های بانکی ذخیره شده در یک فایل CSV استفاده خواهیم کرد تا دقیقاً ببینیم که چگونه پاندا با مسائل مربوط به داده های مشترک سروکار دارد و اطلاعات خام و کثیف را به فرمی تبدیل می کند که کاملاً برای تجزیه و تحلیل کار می کند.
پاندا چیست؟
Pandas یک کتابخانه پایتون برای دستکاری و تجزیه و تحلیل داده ها است. این مانند یک چاقوی ارتش سوئیس برای حل و فصل داده ها برای ارائه ابزارهای همه کاره برای کنترل داده های کثیف از هر اندازه و مناسب برای هر دو تجزیه و تحلیل سریع و خطوط لوله داده پیچیده عمل می کند. بنیاد کتابخانه بر دو ساختار داده اصلی استوار است:
-
DataFrame: یک ساختار 2D ، جدول مانند (شبیه به صفحه گسترده) برای نگه داشتن داده های دارای برچسب و ساختار یافته.
-
سری: یک آرایه با برچسب 1D ، به طور موثری یک ستون از یک DataFrame.
این توانایی برای کارآمد و شهودی به چالش های داده های در دنیای واقعی همان چیزی است که پانداس را بسیار قدرتمند می کند.
موانع مشترک در کیفیت داده ها
داده های ورود به فرآیندهای ETL اغلب کثیف است و عدم شناسایی و تصحیح موضوعات مشترک می تواند به طور جدی تجزیه و تحلیل و مدل های یادگیری ماشین را تضعیف کند و منجر به بینش های ناقص شود. قبل از کاوش در راه حل های پانداس ، بیایید این مشکلات معمولی را بشناسیم:
-
داده های گمشده: سوابق به دلیل خطاهای جمع آوری یا حذف ، ممکن است ناقص (مقادیر تهی یا خالی) باشد.
-
قالب بندی متناقض: بازنمایی داده ها می تواند بسیار متفاوت باشد (به عنوان مثال ، سبک های مختلف تاریخ ، انواع مختلط در یک ستون ، برچسب های متناقض).
-
تکثیر: ورودی های اضافی از همان اطلاعات می توانند مجموعه داده ها و تجزیه و تحلیل skew را نفخ کنند.
-
Outliers: مقادیر غیرعادی ، شدید ممکن است خلاصه های آماری و عملکرد مدل را تحریف کند.
-
انواع داده های نادرست: برخی از ستون ها ممکن است حاوی انواع داده های غیر منتظره باشند. مثال خوب یک نوع داده متنی است که در آن تعداد انتظار می رود.
پرداختن به این چالش ها یک گام مهم است ، و این امر نیاز به ابزارهای تمیز کردن داده های قوی مانند پاندا را برجسته می کند.
تمیز کردن داده ها با پاندا
پانداس مهندسان داده را به یک ابزار قوی مجهز می کند و کار اغلب خسته کننده از تمیز کردن داده ها را به طور قابل توجهی آسان می کند. توابع آن ، رسیدگی به مقادیر گمشده ، استاندارد سازی قالب ها ، ادغام منابع داده و موارد دیگر را ساده می کند. قابلیت های کلیدی شامل موارد زیر است:
-
پرداختن به مقادیر گمشده: از توابع مانند استفاده کنید
isna()
برای تشخیص تهی ها ،fillna()
برای تحمیل آنها (با میانگین ، متوسط ، حالت و غیره) ، یاdropna()
برای حذف آنها -
تبدیل و استاندارد کردن داده ها: به راحتی ستون ها را تغییر نام دهید ، توابع سفارشی را اعمال کنید (
apply()
باmap()
) ، دستکاری های رشته ای را انجام دهید و از قالب بندی مداوم در بین مجموعه داده ها اطمینان حاصل کنید. -
ترکیب منابع داده: داده ها را از جداول یا پرونده های مختلف با استفاده از ادغام با کارایی بالا ادغام کنید (
merge()
باjoin()
) و هماهنگی (concat()
) عملیات. -
حذف افزونگی: ردیف های تکراری را به طور کارآمد با آن شناسایی و حذف کنید
drop_duplicates()
برای حفظ منحصر به فرد بودن داده ها. -
تصحیح انواع داده ها: ستون ها را به انواع مناسب خود (عددی ، رشته ، بولی ، DateTime) تبدیل کنید
astype()
یا مبدل های تخصصی مانندto_datetime()
بشر
این ویژگی ها امکان تهیه داده های سیستماتیک و کارآمد در خطوط لوله ETL را فراهم می کند
مثال در دنیای واقعی: تمیز کردن داده های بازاریابی بانکی
بیایید نگاهی به نمونه ای از دنیای واقعی در مورد چگونگی کمک پاندا به داده های تمیز بیندازیم. تصور کنید که با داده های یک کمپین بازاریابی اخیر برای یک بانک کار می کنید ، جایی که هدف این است که مشتریان بالقوه را برای وام های شخصی شناسایی کنید.
داده های خام به احتمال زیاد حاوی موضوعات مشترک است: مقادیر گمشده ، قالب های متناقض متن (مانند 'yes"https://dev.to/"no'
تغییرات) ، انواع داده های نادرست ، و شاید برخی از فضای باز. قبل از استفاده از داده ها می توان برای تجزیه و تحلیل یا بارگذاری در یک دریاچه داده یا یک انبار داده ، آنها را اصلاح کرد.
در اینجا تفکیک انواع داده های درگیر و کارهای تمیز کردن معمولی آورده شده است:
-
داده های مشتری: شامل جزئیاتی مانند نوع شغل ، وضعیت تأهل ، سطح تحصیلات و وضعیت وام مسکن است. تمیز کردن ممکن است شامل:
- جایگزینی متن متناقض (به عنوان مثال ، استاندارد سازی کار یا ورودی های آموزشی حاوی “.”) با مقادیر مداوم.
- رسیدگی به مقادیر گمشده (به عنوان مثال ، جایگزین کردن سطح تحصیلات “ناشناخته”
NaN
– نه یک شماره). - تبدیل کننده
'yes"https://dev.to/"no'
زمینه ها (مانندcredit_default
یاmortgage
) به بولی (True/False
) انواع.
-
داده های کمپین: شامل اطلاعات مربوط به تاریخچه تماس ، مانند تعداد مخاطبین ، مدت زمان ، نتایج کمپین های قبلی و آخرین تاریخ تماس است. تمیز کردن اغلب نیاز دارد:
- تبدیل توضیحات نتیجه (به عنوان مثال ، “موفقیت” ، “شکست” ، “وجود”) به پرچم های بولی یا عددی.
- قطعات تاریخ تجزیه (مانند روز و ماه) به یک قالب استاندارد DateTime.
-
شاخص های اقتصادی: داده های متنی مانند شاخص قیمت مصرف کننده یا نرخ بهره (
EURIBOR
). تمیز کردن به طور معمول روی:- اطمینان از این ستون ها از نوع داده عددی صحیح برخوردار است.
- پرداختن به هر مقدار عددی از دست رفته به طور مناسب (به عنوان مثال ، پر کردن یا حذف).
در اینجا یک قطعه کد وجود دارد که نشان می دهد چگونه پاندا با برخی از این مراحل تمیز کردن مقابله می کند:
import pandas as pd
import numpy as np # Often needed for handling NaN
# Let's pretend we loaded the messy data
# df = pd.read_csv('bank_marketing_messy.csv') # Placeholder for loading
# --- Client Data Cleaning ---
client = df[['client_id', 'age', 'job', 'marital', 'education', 'credit_default', 'mortgage']].copy() # Use .copy() to avoid SettingWithCopyWarning
# Clean up text inconsistencies (e.g., '.' shouldn't be in job/education)
client['job'] = client['job'].str.replace('.', '_', regex=False)
client['education'] = client['education'].str.replace('.', '_', regex=False)
# Handle 'unknown' consistently - replace with NaN for better handling later
client['education'] = client['education'].replace('unknown', np.NaN)
# Convert yes/no/unknown to more usable types (e.g., boolean or numerical)
# Assuming 'unknown' in credit_default means 'no' for this example
client['credit_default'] = client['credit_default'].map({'yes': True, 'no': False, 'unknown': False}).astype(bool)
client['mortgage'] = client['mortgage'].map({'yes': True, 'no': False, 'unknown': False}).astype(bool) # Assuming 'unknown' means False here too
# --- Campaign Data Cleaning ---
campaign = df[['client_id', 'number_contacts', 'contact_duration', 'previous_campaign_contacts', 'previous_outcome', 'campaign_outcome', 'day', 'month']].copy()
# Map outcomes to boolean (or 1/0)
campaign['previous_outcome'] = campaign['previous_outcome'].map({'success': True, 'failure': False, 'nonexistent': False}).astype(bool)
campaign['campaign_outcome'] = campaign['campaign_outcome'].map({'yes': True, 'no': False}).astype(bool)
# Create a proper datetime column from day/month (assuming year 2022 for context)
# Note: This requires careful handling of potential errors/formats
try:
# Build a date string: '5 May 2022'
date_str = df['day'].astype(str) + ' ' + df['month'].str.capitalize() + ' ' + '2022'
campaign['last_contact_date'] = pd.to_datetime(date_str, format='%d %b %Y', errors='coerce') # errors="coerce" turns bad dates into NaT (Not a Time)
except Exception as e:
print(f"Date conversion error: {e}")
# Handle error - maybe create an empty date column or log issues
campaign['last_contact_date'] = pd.NaT
# Drop original day/month columns if no longer needed
campaign = campaign.drop(columns=['day', 'month'])
# --- Economics Data Cleaning ---
economics = df[['client_id', 'cons_price_idx', 'euribor_three_months']].copy()
# Main task here is often ensuring correct numeric type and handling NaNs
# Example: fill missing economic indicators with the mean/median if appropriate
economics['euribor_three_months'] = economics['euribor_three_months'].fillna(economics['euribor_three_months'].median())
# Ensure data types are correct (they often load as object/string if NaNs were present)
economics['cons_price_idx'] = pd.to_numeric(economics['cons_price_idx'], errors='coerce')
economics['euribor_three_months'] = pd.to_numeric(economics['euribor_three_months'], errors='coerce')
# Now you'd save these cleaned dataframes
client.to_csv('client_cleaned.csv', index=False)
campaign.to_csv('campaign_cleaned.csv', index=False)
economics.to_csv('economics_cleaned.csv', index=False)
print("Data cleaning steps applied (example).")
چرا پانداس ابزاری ارزشمند برای مهندسان داده است
برای مهندسان داده ، ابزارهایی که کارایی و قابلیت حفظ آن را ارائه می دهند بسیار مهم است. پاندا چندین مزیت را ارائه می دهد:
-
دست زدن به داده های کارآمد: این برای عملکرد خوب در مجموعه داده های حافظه طراحی شده است ، و امکان تمیز کردن سریع و دستکاری اغلب سریعتر از تکرار دستی یا استفاده از SQL بیش از حد پیچیده برای تحولات امکان پذیر است.
-
کد قابل خواندن و قابل استفاده مجدد: نحو ساده ، نوشتن ، درک و حفظ اسکریپت های تمیز کردن داده ها را آسان تر می کند.
این اسکریپت ها اغلب می توانند برای پروژه های مختلف اقتباس یا در خطوط لوله داده خودکار ادغام شوند.
- ادغام قوی: پانداس با سایر کتابخانه های اصلی پایتون (مانند Numpy ، Scikit-Learn) و منابع داده/سینک (بانکهای اطلاعاتی ، CSV ، پارکت ، JSON) کار می کند و استفاده از آن در گردش کار جامع پردازش داده ها را تسهیل می کند.
پایان
در نهایت ، Pandas بخش اساسی از ابزار یک مهندس داده است. این که آیا برخورد با داده های بازاریابی مانند مثال فوق یا تهیه مجموعه داده ها برای اهداف دیگر ، Pandas به ساده سازی و استاندارد سازی مرحله تحول ('T “ETL کمک می کند.
با استفاده از (جایگزین “اهرم”) ویژگی های قدرتمند آن باعث صرفه جویی در وقت ، کاهش خطاهای بالقوه می شود و تضمین می کند که داده ها به درستی برای بارگیری و تجزیه و تحلیل بعدی ساخته می شوند. “
تصدیق
مثال تمیز کردن داده های بازاریابی بانکی در دنیای واقعی که در این مقاله مورد بحث قرار گرفته است ، الهام بخش تمرینات و مجموعه داده های ارائه شده در مسیر مهندسی داده DataCamp است.