با این راهنمای جامع پایتون پانداز، پیچیدگی های داده های گمشده در مجموعه داده های خود را بررسی کنید. تکنیک های ضروری برای جایگذاری و حذف، مناسب برای مخاطبان جهانی را بیاموزید.
تسلط بر پاکسازی داده ها با پایتون پانداز: راهنمای جهانی مدیریت مقادیر گمشده
در حوزه تجزیه و تحلیل داده ها و یادگیری ماشین، کیفیت داده ها از اهمیت بالایی برخوردار است. یکی از رایج ترین چالش های پیش رو، وجود مقادیر گمشده است. این مقادیر می توانند از منابع مختلفی ناشی شوند، از جمله خطاهای ورود داده، نقص عملکرد حسگرها یا نظرسنجی های ناقص. مدیریت موثر داده های گمشده یک گام حیاتی در فرآیند پاکسازی داده ها است و اطمینان حاصل می کند که تجزیه و تحلیل های شما قوی و مدل های شما دقیق هستند. این راهنما شما را با تکنیک های ضروری برای مدیریت مقادیر گمشده با استفاده از کتابخانه قدرتمند پایتون پانداز آشنا می کند که برای مخاطبان جهانی طراحی شده است.
چرا مدیریت مقادیر گمشده بسیار مهم است؟
داده های گمشده می توانند به طور قابل توجهی نتایج شما را منحرف کنند. بسیاری از الگوریتم های تحلیلی و مدل های آماری برای مدیریت مقادیر گمشده طراحی نشده اند و منجر به خطاها یا نتایج مغرضانه می شوند. به عنوان مثال:
- میانگین های مغرضانه: اگر مقادیر گمشده در گروه های خاصی متمرکز باشند، محاسبه میانگین ها می تواند ویژگی های واقعی جمعیت را به اشتباه نشان دهد.
- کاهش حجم نمونه: صرفاً حذف ردیف ها یا ستون هایی که دارای مقادیر گمشده هستند می تواند به طور چشمگیری مجموعه داده شما را کاهش دهد و به طور بالقوه منجر به از دست رفتن اطلاعات ارزشمند و قدرت آماری شود.
- تخریب عملکرد مدل: مدل های یادگیری ماشینی که بر روی داده های ناقص آموزش داده می شوند ممکن است عملکرد پیش بینی ضعیف و قابلیت های تعمیم داشته باشند.
- تصویرسازی های گمراه کننده: نمودارها و گراف ها می توانند تصویری نادرست ارائه دهند اگر نقاط داده گمشده در نظر گرفته نشوند.
درک و رسیدگی به مقادیر گمشده یک مهارت اساسی برای هر متخصص داده است، صرف نظر از موقعیت جغرافیایی یا صنعت آنها.
شناسایی مقادیر گمشده در پانداز
پانداز روش های شهودی برای تشخیص داده های گمشده ارائه می دهد. بازنمایی های اصلی برای مقادیر گمشده NaN (Not a Number) برای داده های عددی و None برای انواع داده های شیء هستند. پانداز هر دو را به عنوان گمشده در نظر می گیرد.
متدهای isnull() و notnull()
متد isnull() یک DataFrame بولی از همان شکل را برمی گرداند که در آن True نشان دهنده وجود مقدار گمشده و False در غیر این صورت است. برعکس، notnull() مقدار True را برای مقادیر غیر گمشده برمی گرداند.
import pandas as pd
import numpy as np
# Sample DataFrame with missing values
data = {'col1': [1, 2, np.nan, 4, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df = pd.DataFrame(data)
print("Original DataFrame:")
print(df)
print("\nChecking for null values:")
print(df.isnull())
print("\nChecking for non-null values:")
print(df.notnull())
شمارش مقادیر گمشده
برای دریافت خلاصه ای از مقادیر گمشده در هر ستون، می توانید isnull() را با متد sum() زنجیره کنید:
print("\nNumber of missing values per column:")
print(df.isnull().sum())
این خروجی دقیقاً به شما نشان می دهد که چند ورودی گمشده در هر ستون وجود دارد و یک نمای کلی سریع از میزان مشکل ارائه می دهد.
تجسم داده های گمشده
برای مجموعه داده های بزرگتر، تجسم داده های گمشده می تواند بسیار روشنگر باشد. کتابخانه هایی مانند missingno می توانند به شما در شناسایی الگوهای گمشده کمک کنند.
# You might need to install this library:
# pip install missingno
import missingno as msno
import matplotlib.pyplot as plt
print("\nVisualizing missing data:")
msno.matrix(df)
plt.title("Missing Data Matrix")
plt.show()
نمودار ماتریسی یک نوار متراکم برای هر ستونی که داده ها در آن وجود دارد و یک نوار پراکنده در جایی که داده ها وجود ندارند را نشان می دهد. این می تواند نشان دهد که آیا گمشده بودن تصادفی است یا از یک الگو پیروی می کند.
استراتژی هایی برای مدیریت مقادیر گمشده
چندین استراتژی متداول برای برخورد با داده های گمشده وجود دارد. انتخاب استراتژی اغلب به ماهیت داده ها، نسبت مقادیر گمشده و اهداف تجزیه و تحلیل شما بستگی دارد.
1. استراتژی های حذف
حذف شامل حذف نقاط داده ای است که دارای مقادیر گمشده هستند. در حالی که ظاهراً ساده است، درک مفاهیم آن بسیار مهم است.
الف. حذف ردیف (حذف لیست وار)
این ساده ترین رویکرد است: حذف کل ردیف هایی که حداقل یک مقدار گمشده دارند.
print("\nDataFrame after dropping rows with any missing values:")
df_dropped_rows = df.dropna()
print(df_dropped_rows)
مزایا: پیاده سازی ساده، منجر به یک مجموعه داده تمیز برای الگوریتم هایی می شود که نمی توانند مقادیر گمشده را مدیریت کنند.
معایب: می تواند منجر به کاهش قابل توجهی در اندازه مجموعه داده شود، به طور بالقوه اطلاعات ارزشمند را از دست می دهد و در صورت عدم تصادفی بودن گمشده بودن (MCAR - Missing Completely At Random) باعث ایجاد انحراف می شود.
ب. حذف ستون
اگر یک ستون خاص درصد بسیار بالایی از مقادیر گمشده را داشته باشد و برای تجزیه و تحلیل شما حیاتی نباشد، ممکن است حذف کل ستون را در نظر بگیرید.
# Example: Drop 'col1' if it had too many missing values (hypothetically)
# For demonstration, let's create a scenario with more missing data in col1
data_high_missing = {'col1': [1, np.nan, np.nan, np.nan, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df_high_missing = pd.DataFrame(data_high_missing)
print("\nDataFrame with potentially high missingness in col1:")
print(df_high_missing)
print("\nMissing values per column:")
print(df_high_missing.isnull().sum())
# Let's say we decide to drop col1 due to high missingness
df_dropped_col = df_high_missing.drop('col1', axis=1) # axis=1 indicates dropping a column
print("\nDataFrame after dropping col1:")
print(df_dropped_col)
مزایا: در صورتی که یک ستون به دلیل داده های گمشده تا حد زیادی غیر آموزنده باشد، موثر است.
معایب: از دست دادن احتمالی ویژگی های ارزشمند. آستانه "مقادیر گمشده بسیار زیاد" ذهنی است.
2. استراتژی های جایگذاری
جایگذاری شامل جایگزینی مقادیر گمشده با مقادیر تخمینی یا محاسبه شده است. این اغلب به حذف ترجیح داده می شود زیرا اندازه مجموعه داده را حفظ می کند.
الف. جایگذاری میانگین/میانه/مد
این یک تکنیک جایگذاری رایج و ساده است. برای ستونهای عددی، میتوانید مقادیر گمشده را با میانگین یا میانه مقادیر غیر گمشده در آن ستون جایگزین کنید. برای ستون های دسته بندی، مد (مقدار مکرر) استفاده می شود.
- جایگذاری میانگین: مناسب برای داده های توزیع شده به طور معمول. حساس به نقاط دورافتاده.
- جایگذاری میانه: نسبت به جایگذاری میانگین، قوی تر در برابر نقاط دورافتاده است.
- جایگذاری مد: برای ویژگی های دسته بندی استفاده می شود.
# Using the original df with some NaN values
print("\nOriginal DataFrame for imputation:")
print(df)
# Impute missing values in 'col1' with the mean
mean_col1 = df['col1'].mean()
df['col1'].fillna(mean_col1, inplace=True)
# Impute missing values in 'col3' with the median
median_col3 = df['col3'].median()
df['col3'].fillna(median_col3, inplace=True)
# Impute missing values in 'col2' with the mode
mode_col2 = df['col2'].mode()[0] # mode() can return multiple values if there's a tie
df['col2'].fillna(mode_col2, inplace=True)
print("\nDataFrame after mean/median/mode imputation:")
print(df)
مزایا: ساده، اندازه مجموعه داده را حفظ می کند.
معایب: می تواند واریانس و کوواریانس داده ها را مخدوش کند. فرض می کند که میانگین/میانه/مد یک مقدار نماینده خوب برای داده های گمشده است، که ممکن است همیشه درست نباشد.
ب. پر کردن به جلو و پر کردن به عقب
این روش ها به ویژه برای داده های سری زمانی یا داده هایی با ترتیب طبیعی مفید هستند.
- پر کردن به جلو (
ffill): مقادیر گمشده را با آخرین مشاهده معتبر شناخته شده پر می کند. - پر کردن به عقب (
bfill): مقادیر گمشده را با مشاهده معتبر شناخته شده بعدی پر می کند.
# Recreate a DataFrame with missing values suitable for ffill/bfill
data_time_series = {'value': [10, 12, np.nan, 15, np.nan, np.nan, 20]}
df_ts = pd.DataFrame(data_time_series)
print("\nOriginal DataFrame for time-series imputation:")
print(df_ts)
# Forward fill
df_ts_ffill = df_ts.fillna(method='ffill')
print("\nDataFrame after forward fill:")
print(df_ts_ffill)
# Backward fill
df_ts_bfill = df_ts.fillna(method='bfill')
print("\nDataFrame after backward fill:")
print(df_ts_bfill)
مزایا: برای داده های مرتب شده مفید است، روابط زمانی را حفظ می کند.
معایب: اگر شکاف های طولانی از داده های گمشده وجود داشته باشد، می تواند مقادیر نادرست را منتشر کند. ffill اطلاعات آینده را در نظر نمی گیرد و bfill اطلاعات گذشته را در نظر نمی گیرد.
ج. جایگذاری با استفاده از Groupby
یک رویکرد پیچیده تر، جایگذاری مقادیر گمشده بر اساس آمار گروه است. این امر به ویژه زمانی مفید است که مشکوک باشید گمشده بودن مربوط به یک دسته یا گروه خاص در داده های شما است.
data_grouped = {
'category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'value': [10, 20, np.nan, 25, 15, 30, 12, np.nan]
}
df_grouped = pd.DataFrame(data_grouped)
print("\nOriginal DataFrame for grouped imputation:")
print(df_grouped)
# Impute missing 'value' based on the mean 'value' of each 'category'
df_grouped['value'] = df_grouped.groupby('category')['value'].transform(lambda x: x.fillna(x.mean()))
print("\nDataFrame after grouped mean imputation:")
print(df_grouped)
مزایا: تغییرات بین گروه ها را در نظر می گیرد، که اغلب منجر به جایگذاری های دقیق تر از میانگین/میانه/مد جهانی می شود.
معایب: نیاز به یک متغیر گروه بندی مرتبط دارد. می تواند از نظر محاسباتی برای مجموعه داده های بسیار بزرگ فشرده باشد.
د. تکنیک های جایگذاری پیشرفته تر
برای سناریوهای پیچیده تر، به ویژه در خطوط لوله یادگیری ماشین، این روش های پیشرفته را در نظر بگیرید:
- K-Nearest Neighbors (KNN) Imputer: مقادیر گمشده را با استفاده از مقادیر K نزدیکترین همسایگان خود که در مجموعه آموزشی یافت می شوند، جایگذاری می کند.
- Iterative Imputer (به عنوان مثال، با استفاده از MICE - Multiple Imputation by Chained Equations): هر ویژگی را با مقادیر گمشده به عنوان تابعی از سایر ویژگی ها مدل می کند و از تکمیل ماتریس بیزی تکراری برای جایگذاری استفاده می کند.
- Regression Imputation: مقادیر گمشده را با استفاده از مدل های رگرسیون پیش بینی می کند.
این روش ها به طور کلی در کتابخانه هایی مانند Scikit-learn در دسترس هستند.
# Example using Scikit-learn's KNNImputer
from sklearn.impute import KNNImputer
# KNNImputer works on numerical data. We'll use a sample numerical DataFrame.
data_knn = {'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 20, 30, 40, 50],
'C': [100, np.nan, 300, 400, 500]}
df_knn = pd.DataFrame(data_knn)
print("\nOriginal DataFrame for KNN imputation:")
print(df_knn)
imputer = KNNImputer(n_neighbors=2) # Use 2 nearest neighbors
df_knn_imputed_arr = imputer.fit_transform(df_knn)
df_knn_imputed = pd.DataFrame(df_knn_imputed_arr, columns=df_knn.columns)
print("\nDataFrame after KNN imputation:")
print(df_knn_imputed)
مزایا: می تواند با در نظر گرفتن روابط بین ویژگی ها، جایگذاری های دقیق تری ارائه دهد.
معایب: از نظر محاسباتی گران تر است، نیاز به پیاده سازی دقیق دارد و فرضیات مربوط به روابط ویژگی ها باید برقرار باشد.
مدیریت مقادیر گمشده در داده های دسته بندی
داده های دسته بندی مجموعه ای از چالش های خود را ارائه می دهند. در حالی که جایگذاری مد رایج است، استراتژی های دیگر نیز موثر هستند:
- جایگذاری مد: همانطور که قبلاً نشان داده شد، پر کردن با مکررترین دسته.
- ایجاد یک دسته جدید: مقادیر گمشده را به عنوان یک دسته جداگانه در نظر بگیرید (به عنوان مثال، "ناشناخته"، "گمشده"). اگر این واقعیت که داده ها گمشده اند خود آموزنده باشد، این مفید است.
- جایگذاری بر اساس سایر ویژگی ها: اگر رابطه قوی بین یک ویژگی دسته بندی و سایر ویژگی ها وجود داشته باشد، می توانید از یک طبقه بندی کننده برای پیش بینی دسته گمشده استفاده کنید.
data_cat = {'Product': ['A', 'B', 'A', 'C', 'B', 'A', np.nan],
'Region': ['North', 'South', 'East', 'West', 'North', np.nan, 'East']}
df_cat = pd.DataFrame(data_cat)
print("\nOriginal DataFrame for categorical handling:")
print(df_cat)
# Strategy 1: Mode imputation for 'Region'
mode_region = df_cat['Region'].mode()[0]
df_cat['Region'].fillna(mode_region, inplace=True)
# Strategy 2: Create a new category for 'Product'
df_cat['Product'].fillna('Unknown', inplace=True)
print("\nDataFrame after categorical imputation:")
print(df_cat)
بهترین شیوه ها و ملاحظات برای مخاطبان جهانی
هنگام کار با داده ها از منابع مختلف و برای مخاطبان جهانی، موارد زیر را در نظر بگیرید:
- درک منبع داده: چرا مقادیر گمشده هستند؟ آیا این یک مشکل سیستماتیک در جمع آوری داده ها در یک منطقه یا پلتفرم خاص است؟ دانستن منشاء می تواند استراتژی شما را راهنمایی کند. به عنوان مثال، اگر یک پلتفرم نظرسنجی به طور مداوم نتواند یک جمعیت شناختی خاص را در یک کشور خاص ثبت کند، آن گمشده بودن ممکن است تصادفی نباشد.
- متن کلیدی است: روش "درست" برای مدیریت مقادیر گمشده به متن بستگی دارد. یک مدل مالی ممکن است نیاز به جایگذاری دقیق برای جلوگیری از حتی انحرافات کوچک داشته باشد، در حالی که یک تحلیل اکتشافی سریع ممکن است با روش های ساده تر کافی باشد.
- تفاوت های ظریف فرهنگی در داده ها: روش های جمع آوری داده ها ممکن است در بین فرهنگ ها متفاوت باشد. به عنوان مثال، نحوه گزارش "درآمد" یا اینکه آیا "قابل اجرا نیست" یک پاسخ رایج است می تواند متفاوت باشد. این می تواند بر نحوه تفسیر و مدیریت مقادیر گمشده تأثیر بگذارد.
- مناطق زمانی و تاخیر داده: برای داده های سری زمانی که از مناطق زمانی مختلف منشاء می گیرند، قبل از اعمال روش های جایگذاری مبتنی بر زمان مانند ffill/bfill، اطمینان حاصل کنید که داده ها استاندارد شده اند (به عنوان مثال، به UTC).
- واحد پول و واحدها: هنگام جایگذاری مقادیر عددی که شامل ارزها یا واحدهای مختلف هستند، قبل از جایگذاری از سازگاری یا تبدیل مناسب اطمینان حاصل کنید.
- تصمیمات خود را مستند کنید: همیشه روش هایی را که برای مدیریت داده های گمشده استفاده کرده اید مستند کنید. این شفافیت برای تکرارپذیری و برای درک تجزیه و تحلیل شما توسط دیگران حیاتی است.
- فرایند تکراری: پاکسازی داده ها، از جمله مدیریت مقادیر گمشده، اغلب یک فرآیند تکراری است. ممکن است یک روش را امتحان کنید، تأثیر آن را ارزیابی کنید و سپس رویکرد خود را اصلاح کنید.
- از کتابخانه ها عاقلانه استفاده کنید: پانداز ابزار اصلی شما است، اما برای جایگذاری پیچیده تر، Scikit-learn بسیار ارزشمند است. ابزار مناسب را برای کار انتخاب کنید.
نتیجه
مقادیر گمشده بخشی اجتناب ناپذیر از کار با داده های دنیای واقعی هستند. پایتون پانداز مجموعه ای انعطاف پذیر و قدرتمند از ابزارها را برای شناسایی، تجزیه و تحلیل و مدیریت این ورودی های گمشده ارائه می دهد. چه حذف را انتخاب کنید یا جایگذاری، هر روش دارای مزایا و معایب خاص خود است. با درک این تکنیک ها و در نظر گرفتن زمینه جهانی داده های خود، می توانید به طور قابل توجهی کیفیت و قابلیت اطمینان تجزیه و تحلیل داده ها و مدل های یادگیری ماشین خود را بهبود بخشید. تسلط بر این مهارتهای پاکسازی دادهها، سنگ بنای تبدیل شدن به یک متخصص داده مؤثر در هر نقطه از جهان است.
نکات کلیدی:
- شناسایی: از
df.isnull().sum()و تجسم ها استفاده کنید. - حذف: با احتیاط از
dropna()استفاده کنید، از از دست دادن داده ها آگاه باشید. - جایگذاری: از
fillna()با میانگین، میانه، مد، ffill، bfill یا تکنیک های پیشرفته تر از Scikit-learn استفاده کنید. - زمینه مهم است: بهترین استراتژی به داده ها و اهداف شما بستگی دارد.
- آگاهی جهانی: تفاوت های ظریف فرهنگی و منشاء داده ها را در نظر بگیرید.
به تمرین این تکنیک ها ادامه دهید، و شما یک پایه قوی برای گردش کار علم داده قوی خواهید ساخت.