دادههای ناقص همواره یکی از چالشهای اصلی در سناریوهای واقعی محسوب میشوند. حوزههایی مانند یادگیری ماشین (Machine Learning) و داده کاوی (Data Mining) به شدت تحت تأثیر کیفیت پایین دادهها قرار میگیرند که یکی از دلایل اصلی آن، وجود مقادیر گمشده در دادهها است. در این حوزهها، یکی از تمرکزهای اصلی، نحوه برخورد با مقادیر گمشده است تا دقت و اعتبار مدلهای پیشبینی افزایش یابد. در این مقاله با روش های مختلف پاکسازی داده در پایتون آشنا میشوید که به بهبود کیفیت تحلیل و مدل سازی کمک میکند.
چه زمانی و چرا دادهها ناقص میشوند؟
برای مثال، فرض کنید یک نظرسنجی آنلاین درباره یک محصول برگزار شده است. در بسیاری از مواقع، کاربران تمام اطلاعات مربوط به خود را به اشتراک نمیگذارند. برخی فقط تجربه استفاده از محصول را ثبت میکنند اما مدت زمان استفاده را ذکر نمیکنند. برخی دیگر، مدت استفاده و تجربه خود را مینویسند اما اطلاعات تماسشان را وارد نمیکنند. به این ترتیب، در عمل بخشی از دادهها معمولاً ناقص است و این موضوع در دنیای واقعی بسیار رایج میباشد.
نحوه مدیریت مقادیر گمشده در Pandas
در این بخش میخواهیم نحوه مدیریت مقادیر گمشده مانند NA
یا NaN
را با استفاده از کتابخانه Pandas بررسی کنیم.
1 2 3 4 5 6 7 8 9 10 |
# import the pandas library import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df |
1 2 3 4 5 6 7 8 9 |
one two three a 0.077988 0.476149 0.965836 b NaN NaN NaN c -0.390208 -0.551605 -2.301950 d NaN NaN NaN e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g NaN NaN NaN h 0.085100 0.532791 0.887415 |
در این مثال، با استفاده از تابع reindex
ایندکسهایی به DataFrame اضافه شدهاند که در دادههای اولیه وجود نداشتند و به همین دلیل، سلولهای متناظر با آنها دارای مقدار NaN
هستند. مقدار NaN
مخفف عبارت Not a Number بوده و نمایانگر دادههای گمشده در DataFrame میباشد.
بررسی وجود مقادیر گمشده در دادهها
برای اینکه بتوان راحت تر مقادیر گمشده را در انواع مختلف آرایهها شناسایی کرد، کتابخانه Pandas توابعی به نام isnull()
و notnull()
ارائه میدهد. این توابع هم به صورت مستقل قابل استفاده هستند و هم به عنوان متد روی اشیای Series
و DataFrame
عمل میکنند.
مثال:
1 2 3 4 5 6 7 8 9 |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df['one'].isnull() |
1 2 3 4 5 6 7 8 9 |
a False b True c False d True e False f False g True h False Name: one, dtype: bool |
در این خروجی، True
نشان میدهد که مقدار آن سلول گمشده است و False
به این معنی است که داده ای در آن قسمت وجود دارد. تابع isnull()
به شما کمک میکند تا خیلی سریع و ساده مقادیر خالی (NaN
) را در هر ستون یا کل DataFrame شناسایی کنید. این قابلیت برای پیش پردازش دادهها و پاکسازی آن ها قبل از تجزیه و تحلیل یا آموزش مدل، بسیار کاربردی است.
پاکسازی و پر کردن مقادیر گمشده در دادهها
کتابخانه Pandas ابزارهای متنوعی برای پاکسازی و جایگزینی مقادیر گمشده ارائه میدهد. یکی از پرکاربردترین توابع برای این منظور، تابع fillna()
است. این تابع امکان پر کردن مقادیر NA
(یا NaN
) را با روشهای مختلف فراهم میکند. در ادامه چند روش مهم را بررسی میکنیم.
جایگزینی مقدار NaN با یک مقدار ثابت
در مثال زیر، تمام مقادیر NaN
با عدد صفر جایگزین میشوند:
1 2 3 4 5 6 7 8 |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c']) print df print ("NaN replaced with '0':") print df.fillna(0) |
1 2 3 4 5 6 7 8 9 10 |
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN replaced with '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580 |
در اینجا، با استفاده از fillna(0)
تمام سلول هایی که مقدار NaN
داشتند با عدد صفر جایگزین شدند. البته به جای صفر میتوان از هر مقدار دلخواه دیگری نیز استفاده کرد.
پر کردن مقادیر گمشده با استفاده از مقدار قبلی یا بعدی
برای پر کردن مقادیر گمشده بر اساس ردیف های قبلی یا بعدی، میتوان از روش های pad
(رو به جلو) و backfill
(رو به عقب) استفاده کرد. این روش ها به صورت زیر عمل میکنند:
روش | عملکرد |
---|---|
pad یا fill |
مقدار قبلی را به سلول گمشده منتقل میکند |
bfill یا backfill |
مقدار بعدی را به سلول گمشده منتقل میکند |
مثال:
1 2 3 4 5 6 7 8 |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.fillna(method='pad') |
خروجی این کد به شکل زیر خواهد بود:
1 2 3 4 5 6 7 8 9 |
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415 |
در این مثال، مقادیر گمشده به صورت خودکار با مقدار ردیف قبلی (از بالا به پایین) پر شده اند. این روش برای زمانی مفید است که ترتیب زمانی یا منطقی دادهها اهمیت دارد.
حذف مقادیر گمشده از دادهها
اگر هدف شما این باشد که به سادگی ردیف هایی را که شامل مقادیر گمشده هستند از مجموعه داده حذف کنید، میتوانید از تابع dropna()
استفاده کنید. این تابع به صورت پیشفرض با axis=0
عمل میکند، یعنی اگر هر مقدار در یک ردیف NA
باشد، آن ردیف به طور کامل حذف میشود.
مثال:
1 2 3 4 5 6 7 8 |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.dropna() |
خروجی این کد به شکل زیر خواهد بود:
1 2 3 4 5 6 |
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415 |
در این مثال، تمام ردیف هایی که حداقل یک مقدار گمشده داشتند، به طور کامل حذف شده اند. این روش زمانی کاربرد دارد که دادههای ناقص برای تحلیل قابل اعتماد نباشند و حذف آن ها بهتر از جایگزینی با مقدار دیگر باشد.
جایگزینی مقادیر گمشده یا عمومی با مقدار مشخص
در بسیاری از مواقع، نیاز داریم یک مقدار خاص یا عمومی را در دادهها با مقدار دیگری جایگزین کنیم. این کار با استفاده از متد replace()
به سادگی قابل انجام است.
جایگزینی مقدار NaN
با یک عدد ثابت نیز رفتاری مشابه تابع fillna()
دارد.
مثال:
1 2 3 4 5 |
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print df.replace({1000:10,2000:60}) |
خروجی این کد به شکل زیر خواهد بود:
1 2 3 4 5 6 7 |
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60 |
در اینجا، عدد 1000 در ستون دوم با عدد 10 جایگزین شده و عدد 2000 در ستون اول نیز با عدد 60 جایگزین شده است. متد replace()
برای پاکسازی دادههای دارای مقادیر غیرعادی یا خارج از محدوده کاربرد فراوان دارد و به شما امکان میدهد دادههای خود را استانداردسازی و بهینه کنید.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۷ مرداد ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس