تسلط بر هنر پاکسازی داده ها در پایتون - KDnuggets

تسلط بر هنر پاکسازی داده ها در پایتون – KDnuggets

گره منبع: 2939047

تسلط بر هنر پاکسازی داده ها در پایتون
تصویر توسط نویسنده
 

Data cleaning is a critical part of any data analysis process. It’s the step where you remove errors, handle missing data, and make sure that your data is in a format that you can work with. Without a well-cleaned dataset, any subsequent analyses can be skewed or incorrect.

این مقاله شما را با چندین تکنیک کلیدی برای پاکسازی داده ها در پایتون، با استفاده از کتابخانه های قدرتمندی مانند pandas، numpy، seaborn و matplotlib آشنا می کند.

Before diving into the mechanics of data cleaning, let’s understand its importance. Real-world data is often messy. It can contain duplicate entries, incorrect or inconsistent data types, missing values, irrelevant features, and outliers. All these factors can lead to misleading conclusions when analyzing data. This makes data cleaning an indispensable part of the data science lifecycle.

ما وظایف پاکسازی داده های زیر را پوشش خواهیم داد.
 

تسلط بر هنر پاکسازی داده ها در پایتون
تصویر توسط نویسنده

Before getting started, let’s import the necessary libraries. We’ll be using pandas for data manipulation, and seaborn and matplotlib for visualizations.

همچنین ماژول datetime Python را برای دستکاری تاریخ ها وارد می کنیم.

import pandas as pd
import seaborn as sns
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

First, we’ll need to load our data. In this example, we’re going to load a CSV file using pandas. We also add the delimiter argument.

df = pd.read_csv('F:KDNuggetsKDN Mastering the Art of Data Cleaning in Pythonproperty.csv', delimiter= ';')

Next, it’s important to inspect the data to understand its structure, what kind of variables we’re working with, and whether there are any missing values. Since the data we imported is not huge, let’s have a look at the whole dataset.

# Look at all the rows of the dataframe
display(df)

در اینجا نحوه ظاهر مجموعه داده آمده است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

بلافاصله می توانید مشاهده کنید که مقداری از دست رفته وجود دارد. همچنین، فرمت های تاریخ متناقض هستند.

حال، بیایید با استفاده از متد info() نگاهی به خلاصه DataFrame بیندازیم.

# Get a concise summary of the dataframe
print(df.info())

در اینجا خروجی کد است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

می‌توانیم ببینیم که فقط ستون square_feet هیچ مقدار NULL ندارد، بنابراین باید به نحوی این مورد را مدیریت کنیم. همچنین، ستون‌های advertisement_date و sale_date نوع داده شی هستند، حتی اگر این باید یک تاریخ باشد.

محل ستون کاملا خالی است. آیا ما به آن نیاز داریم؟

ما به شما نشان خواهیم داد که چگونه این مسائل را مدیریت کنید. ما با یادگیری نحوه حذف ستون های غیر ضروری شروع می کنیم.

دو ستون در مجموعه داده وجود دارد که در تجزیه و تحلیل داده ها به آنها نیازی نداریم، بنابراین آنها را حذف خواهیم کرد.

ستون اول خریدار است. ما به آن نیاز نداریم، زیرا نام خریدار بر تجزیه و تحلیل تأثیر نمی گذارد.

ما از متد drop() با نام ستون مشخص شده استفاده می کنیم. برای اینکه مشخص کنیم می خواهیم یک ستون را حذف کنیم، محور را روی 1 قرار می دهیم. همچنین، آرگومان inplace روی True تنظیم شده است تا ما DataFrame موجود را اصلاح کنیم و یک DataFrame جدید بدون ستون حذف شده ایجاد نکنیم.

df.drop('buyer', axis = 1, inplace = True)

ستون دومی که می خواهیم حذف کنیم، مکان است. در حالی که ممکن است داشتن این اطلاعات مفید باشد، این یک ستون کاملاً خالی است، بنابراین اجازه دهید آن را حذف کنیم.

ما همان رویکرد ستون اول را در پیش می گیریم.

df.drop('location', axis = 1, inplace = True)

البته می توانید این دو ستون را به صورت همزمان حذف کنید.

df = df.drop(['buyer', 'location'], axis=1)

هر دو رویکرد چارچوب داده زیر را برمی گرداند.

 

تسلط بر هنر پاکسازی داده ها در پایتون

داده های تکراری ممکن است به دلایل مختلف در مجموعه داده شما رخ دهد و می تواند تجزیه و تحلیل شما را منحرف کند.

بیایید موارد تکراری را در مجموعه داده خود شناسایی کنیم. در اینجا نحوه انجام آن آمده است.

کد زیر از روش استفاده می کند تکراری () برای در نظر گرفتن موارد تکراری در کل مجموعه داده. تنظیم پیش‌فرض آن این است که اولین وقوع یک مقدار را منحصر به فرد و موارد بعدی را تکراری در نظر بگیرد. شما می توانید این رفتار را با استفاده از نگه داشتن پارامتر. به عنوان مثال، df.duplicated(keep=False) همه موارد تکراری را به عنوان True علامت گذاری می کند، از جمله اولین رخداد.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

در اینجا خروجی است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

سطر با شاخص 3 به عنوان تکراری علامت گذاری شده است زیرا ردیف 2 با مقادیر یکسان اولین رخداد آن است.

حال باید موارد تکراری را حذف کنیم که این کار را با کد زیر انجام می دهیم.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

La drop_duplicates() function considers all columns while identifying duplicates. If you want to consider only certain columns, you can pass them as a list to this function like this: df.drop_duplicates(subset=[‘column1’, ‘column2’]).

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

همانطور که می بینید، ردیف تکراری حذف شده است. با این حال، نمایه سازی ثابت ماند و شاخص 3 از دست رفت. ما این را با تنظیم مجدد شاخص ها مرتب می کنیم.

df = df.reset_index(drop=True)

این کار با استفاده از reset_index() تابع. آرگومان drop=True برای حذف شاخص اصلی استفاده می شود. اگر این آرگومان را وارد نکنید، نمایه قدیمی به عنوان یک ستون جدید در DataFrame شما اضافه خواهد شد. با تنظیم drop=True، به پانداها می‌گویید که ایندکس قدیمی را فراموش کرده و آن را به شاخص عدد صحیح پیش‌فرض بازنشانی کنند.

برای تمرین، سعی کنید موارد تکراری را از این مجموعه داده مایکروسافت حذف کنید.

گاهی اوقات، ممکن است انواع داده ها به اشتباه تنظیم شوند. به عنوان مثال، یک ستون تاریخ ممکن است به عنوان رشته تفسیر شود. شما باید اینها را به انواع مناسب خود تبدیل کنید.

در مجموعه داده ما، این کار را برای ستون‌های advertisement_date و sale_date انجام می‌دهیم، زیرا آنها به عنوان نوع داده شی نشان داده می‌شوند. همچنین، تاریخ‌های تاریخ در ردیف‌ها به صورت متفاوتی قالب‌بندی می‌شوند. ما باید آن را سازگار کنیم، همراه با تبدیل آن به امروز.

ساده ترین راه استفاده از to_datetime() روش. باز هم می‌توانید آن را ستون به ستون انجام دهید، همانطور که در زیر نشان داده شده است.

هنگام انجام این کار، آرگومان dayfirst را روی True قرار می دهیم زیرا برخی از تاریخ ها با روز اول شروع می شوند.

# Converting advertisement_date column to datetime
df['advertisement_date'] = pd.to_datetime(df['advertisement_date'], dayfirst = True) # Converting sale_date column to datetime
df['sale_date'] = pd.to_datetime(df['sale_date'], dayfirst = True)

همچنین می توانید هر دو ستون را به طور همزمان با استفاده از درخواست دادن() روش با to_datetime().

# Converting advertisement_date and sale_date columns to datetime
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(pd.to_datetime, dayfirst = True)

هر دو رویکرد یک نتیجه را به شما می دهند.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

اکنون تاریخ ها در یک قالب ثابت هستند. می بینیم که همه داده ها تبدیل نشده اند. یک مقدار NaT در advertisement_date و دو مقدار در sale_date وجود دارد. این یعنی تاریخ گم شده است.

بیایید بررسی کنیم که آیا با استفاده از ستون ها به تاریخ تبدیل شده اند اطلاعات () روش.

# Get a concise summary of the dataframe
print(df.info())

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

همانطور که می بینید، هر دو ستون در قالب datetime64[ns] نیستند.

حالا سعی کنید در این قسمت داده ها را از TEXT به NUMERIC تبدیل کنید مجموعه داده Airbnb.

مجموعه داده های دنیای واقعی اغلب مقادیر گم شده ای دارند. مدیریت داده های از دست رفته حیاتی است، زیرا الگوریتم های خاصی نمی توانند چنین مقادیری را مدیریت کنند.

مثال ما مقداری از دست رفته نیز دارد، بنابراین بیایید نگاهی به دو روش معمول برای مدیریت داده های از دست رفته بیندازیم.

حذف ردیف هایی با مقادیر از دست رفته

اگر تعداد ردیف‌هایی که داده‌های از دست رفته در مقایسه با تعداد کل مشاهدات ناچیز است، می‌توانید این ردیف‌ها را حذف کنید.

در مثال ما، ردیف آخر هیچ مقداری به جز فوت مربع و تاریخ تبلیغات ندارد. ما نمی‌توانیم از چنین داده‌هایی استفاده کنیم، بنابراین بیایید این ردیف را حذف کنیم.

در اینجا کدی است که در آن شاخص ردیف را نشان می دهیم.

df = df.drop(8)

اکنون DataFrame به این شکل است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

آخرین ردیف حذف شده است و DataFrame ما اکنون بهتر به نظر می رسد. با این حال، هنوز برخی از داده های گم شده وجود دارد که ما با استفاده از روش دیگری آنها را مدیریت خواهیم کرد.

نسبت دادن مقادیر گمشده

اگر داده‌های از دست رفته قابل توجهی دارید، یک استراتژی بهتر از حذف می‌تواند نسبت دادن باشد. این فرآیند شامل پر کردن مقادیر از دست رفته بر اساس داده های دیگر است. برای داده‌های عددی، روش‌های انتساب متداول شامل استفاده از اندازه‌گیری گرایش مرکزی (میانگین، میانه، حالت) است.

در DataFrame که قبلاً تغییر کرده‌ایم، مقادیر NaT (نه زمان) در ستون‌های advertisement_date و sale_date داریم. ما این مقادیر گم شده را با استفاده از منظور داشتن() روش.

کد از fillna() روشی برای یافتن و پر کردن مقادیر تهی با مقدار میانگین.

# Imputing values for numerical columns
df['advertisement_date'] = df['advertisement_date'].fillna(df['advertisement_date'].mean())
df['sale_date'] = df['sale_date'].fillna(df['sale_date'].mean())

شما همچنین می توانید همین کار را در یک خط کد انجام دهید. ما استفاده می کنیم درخواست دادن() برای اعمال تابع تعریف شده با استفاده از یازدهمین حرف الفبای یونانی. همانند بالا، این تابع از fillna() و منظور داشتن() روش هایی برای پر کردن مقادیر از دست رفته

# Imputing values for multiple numerical columns
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(lambda x: x.fillna(x.mean()))

خروجی در هر دو حالت به این صورت است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

ستون sale_date ما اکنون زمان‌هایی دارد که به آن‌ها نیازی نداریم. آنها را حذف کنیم.

ما از strftime() روشی که تاریخ ها را به نمایش رشته ای و قالب خاصی تبدیل می کند.

df['sale_date'] = df['sale_date'].dt.strftime('%Y-%m-%d')

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

خرماها اکنون کاملاً مرتب به نظر می رسند.

در صورت نیاز به استفاده strftime() در چندین ستون، می توانید دوباره استفاده کنید یازدهمین حرف الفبای یونانی راه زیر

df[['date1_formatted', 'date2_formatted']] = df[['date1', 'date2']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))

حال، بیایید ببینیم چگونه می‌توانیم مقادیر مقوله‌ای گمشده را نسبت دهیم.

Categorical data is a type of data that is used to group information with similar characteristics. Each of these groups is a category. Categorical data can take on numerical values (such as “1” indicating “male” and “2” indicating “female”), but those numbers do not have mathematical meaning. You can’t add them together, for instance.

داده های طبقه بندی معمولاً به دو دسته تقسیم می شوند:

  1. داده های اسمی: این زمانی است که دسته ها فقط برچسب گذاری می شوند و نمی توان آنها را به ترتیب خاصی مرتب کرد. به عنوان مثال می توان به جنسیت (مرد، زن)، گروه خونی (A، B، AB، O) یا رنگ (قرمز، سبز، آبی) اشاره کرد.
  1. داده های ترتیبی: این زمانی است که دسته ها را می توان مرتب کرد یا رتبه بندی کرد. در حالی که فواصل بین دسته ها به یک اندازه فاصله ندارند، ترتیب دسته ها معنی دارد. به عنوان مثال می توان به مقیاس های رتبه بندی (رده بندی 1 تا 5 یک فیلم)، سطح تحصیلات (دبیرستان، کارشناسی، کارشناسی ارشد) یا مراحل سرطان (مرحله I، مرحله II، مرحله III) اشاره کرد.

برای تعیین داده‌های دسته‌بندی گمشده، معمولاً از حالت استفاده می‌شود. در مثال ما، ستون property_category داده‌های طبقه‌بندی (اسمی) است و داده‌هایی در دو ردیف وجود ندارد.

بیایید مقادیر از دست رفته را با حالت جایگزین کنیم.

# For categorical columns
df['property_category'] = df['property_category'].fillna(df['property_category'].mode()[0])

این کد از fillna() تابعی برای جایگزینی تمام مقادیر NaN در ستون property_category. آن را با حالت جایگزین می کند.

Additionally, the [0] part is used to extract the first value from this Series. If there are multiple modes, this will select the first one. If there’s only one mode, it still works fine.

در اینجا خروجی است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

داده ها اکنون بسیار خوب به نظر می رسند. تنها چیزی که باقی می ماند این است که ببینیم آیا موارد پرت وجود دارد یا خیر.

در این مورد می توانید برخورد با null ها را تمرین کنید سوال متا مصاحبه، جایی که باید NULL ها را با صفر جایگزین کنید.

Outliers are data points in a dataset that are distinctly different from the other observations. They may lie exceptionally far from the other values in the data set, residing outside an overall pattern. They’re considered unusual due to their values either being significantly higher or lower compared to the rest of the data.

موارد پرت ممکن است به دلایل مختلفی ایجاد شوند مانند:

  • خطاهای اندازه گیری یا ورودی
  • فساد داده
  • ناهنجاری های آماری واقعی

نقاط پرت می توانند به طور قابل توجهی بر نتایج تجزیه و تحلیل داده ها و مدل سازی آماری شما تأثیر بگذارند. آنها می توانند منجر به توزیع کج، سوگیری یا بی اعتباری مفروضات آماری اساسی شوند، تناسب مدل برآورد شده را مخدوش کنند، دقت پیش بینی مدل های پیش بینی را کاهش دهند، و منجر به نتیجه گیری نادرست شوند.

برخی از روش‌های رایج برای تشخیص نقاط پرت عبارتند از Z-score، IQR (Interquartile Range)، نمودار جعبه، نمودار پراکندگی، و تکنیک‌های تجسم داده‌ها. در برخی موارد پیشرفته، از روش های یادگیری ماشینی نیز استفاده می شود.

Visualizing data can help identify outliers. Seaborn’s boxplot is handy for this.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])

ما از plt.figure() برای تنظیم عرض و ارتفاع شکل به اینچ استفاده می کنیم.

سپس باکس پلات برای ستون های advertised_price و sale_price ایجاد می کنیم که به شکل زیر است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

طرح را می توان برای استفاده آسان تر با اضافه کردن آن به کد بالا بهبود بخشید.

plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

از کد بالا برای تنظیم برچسب ها برای هر دو محور استفاده می کنیم. همچنین متوجه می‌شویم که مقادیر روی محور y در نماد علمی هستند و نمی‌توانیم از آن برای مقادیر قیمت استفاده کنیم. بنابراین با استفاده از تابع ()plt.ticklabel_format این را به سبک ساده تغییر می دهیم.

سپس قالب‌بندی را ایجاد می‌کنیم که مقادیر روی محور y را با کاما به صورت هزار جداکننده و نقطه اعشاری نشان می‌دهد. آخرین خط کد این مورد را روی محور اعمال می کند.

خروجی اکنون به این شکل است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

حال، چگونه می توانیم موارد پرت را شناسایی و حذف کنیم؟

یکی از راه ها استفاده از روش IQR است.

IQR یا محدوده بین ربعی یک روش آماری است که برای اندازه گیری تغییرپذیری با تقسیم یک مجموعه داده به چارک استفاده می شود. ربع ها مجموعه داده های مرتب شده با رتبه را به چهار قسمت مساوی تقسیم می کنند و مقادیر در محدوده چارک اول (صدک 25) و چارک سوم (صدک 75) محدوده بین چارکی را تشکیل می دهند.

The interquartile range is used to identify outliers in the data. Here’s how it works:

  1. First, calculate the first quartile (Q1), the third quartile (Q3), and then determine the IQR. The IQR is computed as Q3 – Q1.
  2. Any value below Q1 – 1.5IQR or above Q3 + 1.5IQR is considered an outlier.

On our boxplot, the box actually represents the IQR. The line inside the box is the median (or second quartile). The ‘whiskers’ of the boxplot represent the range within 1.5*IQR from Q1 and Q3.

هر نقطه داده خارج از این سبیل ها را می توان نقاط پرت در نظر گرفت. در مورد ما، ارزش آن 12,000,000 دلار است. اگر به نمودار جعبه نگاه کنید، خواهید دید که چقدر واضح نشان داده شده است، که نشان می دهد چرا تجسم داده ها در تشخیص نقاط پرت مهم است.

حال، بیایید با استفاده از روش IQR در کد پایتون، موارد پرت را حذف کنیم. ابتدا، قیمت‌های پرت آگهی‌شده را حذف می‌کنیم.

Q1 = df['advertised_price'].quantile(0.25)
Q3 = df['advertised_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['advertised_price'] (Q1 - 1.5 * IQR)) |(df['advertised_price'] > (Q3 + 1.5 * IQR)))]

ابتدا چارک اول (یا صدک 25) را با استفاده از عبارت محاسبه می کنیم quantile() تابع. همین کار را برای چارک سوم یا صدک 75 انجام می دهیم.

آنها مقادیری را نشان می دهند که به ترتیب 25٪ و 75٪ از داده ها زیر آنها قرار می گیرند.

سپس تفاوت بین چارک ها را محاسبه می کنیم. همه چیز تا کنون فقط ترجمه مراحل IQR به کد پایتون است.

As a final step, we remove the outliers. In other words, all data less than Q1 – 1.5 * IQR or more than Q3 + 1.5 * IQR.

The ‘~’ operator negates the condition, so we are left with only the data that are not outliers.

سپس می توانیم همین کار را با قیمت فروش انجام دهیم.

Q1 = df['sale_price'].quantile(0.25)
Q3 = df['sale_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['sale_price'] (Q1 - 1.5 * IQR)) |(df['sale_price'] > (Q3 + 1.5 * IQR)))]

البته، می توانید با استفاده از برای حلقه.

for column in ['advertised_price', 'sale_price']: Q1 = df[column].quantile(0.25) Q3 = df[column].quantile(0.75) IQR = Q3 - Q1 df = df[~((df[column] (Q1 - 1.5 * IQR)) |(df[column] > (Q3 + 1.5 * IQR)))]

حلقه دو ستون تکرار می شود. برای هر ستون، IQR را محاسبه می کند و سپس ردیف های DataFrame را حذف می کند.

لطفا توجه داشته باشید که این عملیات به صورت متوالی، ابتدا برای advertised_price و سپس برای sale_price انجام می شود. در نتیجه، DataFrame در جای خود برای هر ستون اصلاح می‌شود و ردیف‌ها را می‌توان به دلیل پرت بودن در هر ستون حذف کرد. بنابراین، این عملیات ممکن است منجر به ردیف‌های کمتری نسبت به زمانی شود که مقادیر پرت برای advertised_price و sale_price به طور مستقل حذف شوند و نتایج پس از آن ترکیب شوند.

در مثال ما، خروجی در هر دو حالت یکسان خواهد بود. برای اینکه ببینیم نمودار جعبه چگونه تغییر کرده است، باید دوباره آن را با استفاده از همان کد قبلی ترسیم کنیم.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])
plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

در اینجا خروجی است.

 

تسلط بر هنر پاکسازی داده ها در پایتون
 

شما می توانید محاسبه صدک ها را در پایتون با حل کردن تمرین کنید سوال مصاحبه مجمع عمومی.

Data cleaning is a crucial step in the data analysis process. Though it can be time-consuming, it’s essential to ensure the accuracy of your findings.

Fortunately, Python’s rich ecosystem of libraries makes this process more manageable. We learned how to remove unnecessary rows and columns, reformat data, and deal with missing values and outliers. These are the usual steps that have to be performed on most any data. However, you’ll also sometimes need to ترکیب دو ستون در یک, بررسی داده های موجود, برچسب هایی را به آن اختصاص دهید، یا از شر فضاهای سفید خلاص شوید.

همه اینها پاکسازی داده است، زیرا به شما امکان می دهد داده های کثیف و واقعی را به یک مجموعه داده ساختاریافته تبدیل کنید که می توانید با اطمینان آن را تجزیه و تحلیل کنید. فقط مجموعه داده ای را که با آن شروع کردیم با مجموعه ای که به پایان رساندیم مقایسه کنید.

اگر رضایت شما را در این نتیجه نمی بینید و داده های تمیز شما را به طرز عجیبی هیجان زده نمی کند، در علم داده چه می کنید!؟
 

ناتی روزیدی یک دانشمند داده و در استراتژی محصول است. او همچنین یک استاد کمکی در تدریس تجزیه و تحلیل است و بنیانگذار آن است StrataScratch، پلتفرمی است که به دانشمندان داده کمک می کند تا برای مصاحبه های خود با سؤالات مصاحبه واقعی از شرکت های برتر آماده شوند. با او ارتباط برقرار کنید توییتر: StrataScratch or لینک.

تمبر زمان:

بیشتر از kdnuggets