مایکل ماکولی

برای سفر یادگیری ماشین باید عملکرد پانداها را بدانید

گره منبع: 1865356

این مقاله به عنوان بخشی از بلاگاتون علم داده

معرفی

خوب، امکان خوبی وجود دارد که بتوانید!

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

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

یکی از اشکالات کلیدی پانداها این است که با مجموعه داده های بزرگ دست و پنجه نرم می کند زیرا پانداها ساختارهای داده خود را در RAM ذخیره می کنند، که با افزایش اندازه داده ها ناکافی می شود. برای این کار از PySpark یا Dask استفاده کنید.

با وجود اینکه بسته پاندا به طور گسترده مورد استفاده قرار می گیرد، هنوز عملکردهای زیادی وجود دارد که ممکن است افراد از آنها چشم پوشی کنند، چه به دلیل استفاده کمتر از آن و چه به دلیل بی اطلاعی از وجود آن. این پست قصد دارد شما را دوباره با این ویژگی ها آشنا کند و نشان دهد که پانداها بسیار توانمندتر از آنچه قبلاً می دانستید، هستند.

لوله

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

به عنوان مثال، اگر دوست دارید توابعی مانند drop_duplicates، encode_categoricals، remove_outliers را اعمال کنید که آرگومان های آن را می پذیرند.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['قیمت'، 'قیراط'، 'عمق']).

فاکتورسازی کنید

این تابع جایگزینی برای Sklearns Label Encoder است.

# به [0] در انتهای الماس توجه کنید["cut_enc"] = pd.factorize(الماس["cut"])[0] >>> الماس["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 نام: cut_enc، dtype: int64

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

values, unique = pd.factorize(diamonds["cut"], sort=True) >>> مقادیر[:10] آرایه([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> منحصر به فرد ['ایده آل'، 'ممتاز'، 'بسیار خوب'، 'خوب'، 'منصفانه']

منفجر شدن

منفجر شدن | عملکرد پانداها

عکس ادوا فاستر on می Unsplash

Explode تابعی با نام جالب است. بیایید با یک مثال و سپس توضیح شروع کنیم:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("کثیف") >>> df
داده | عملکرد پانداها
تصویر توسط نویسنده

ستون ویژگی دارای دو ردیف است که با لیست مشخص شده است. این نوع داده ها در نظرسنجی ها در دسترس هستند که در آن چند سؤال چند گزینه ای را می پذیرند.

>>> df.explode("کثیف"، ignore_index=True)
داده ها منفجر می شوند
تصویر توسط نویسنده

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

میان

برای نمایه سازی بولی ویژگی های عددی در یک محدوده، در اینجا یک تابع مفید وجود دارد:

# الماس هایی را دریافت کنید که قیمت آنها بین 3500 تا 3700 دلار است. الماس [الماس["قیمت"].
بین داده ها | عملکرد پانداها
تصویر توسط نویسنده

 

T

DataFrame دارای یک ویژگی T ساده است که به عنوان transpose شناخته می شود. ممکن است اغلب از آن استفاده نکنیم، روش توصیف هنگام مشاهده دیتافریم مفید است.

>>> boston.describe().T.head(10)
انتقال
تصویر توسط نویسنده

 

گزینه های پانداها

می توان از تنظیمات جهانی پانداها استفاده کرد که به اصلاح و تغییر رفتارهای پیش فرض کمک می کند.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

از 5 ماژول تشکیل شده است. بیایید گزینه های موجود را در زیر نمایشگر ببینیم. گزینه های زیادی وجود دارد، اما من بیشتر از max_columns استفاده می کنم.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' ، "عرض"]

اکثر مردم از max_columns و دقت استفاده می کنند

# محدودیت نمایش تعداد cols را بردارید pd.options.display.max_columns = هیچکدام # فقط 5 عدد بعد از اعشار نشان داده شود pd.options.display.precision = 5 # از علامت علمی خلاص می شود

Convert_dtypes

همه ما می دانیم که پانداها عادت آزاردهنده ای دارند که برخی از ستون ها را به عنوان انواع داده های شی علامت گذاری می کنند. به جای تعریف مستقیم انواع آنها، می توانید از روش تبدیل dtypes استفاده کنید، که تلاش می کند بهترین نوع داده را استنتاج کند:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId"، "CO"، "O3"، "AQI_Bucket"]) >>> sample.dtypes شی StationId CO float64 O3 float64 AQI_Bucket شی dtype: object >>> sample.convert_dtypes().dtypes StationId رشته CO float64 O3 float64 AQI_Bucket string dtype: object

Select_dtypes

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

فقط ستون های عددی با np.number را انتخاب کنید، برای مثال:

# فقط ستون های عددی را انتخاب کنید diamonds.select_dtypes(include=np.number).head()
dtypes را انتخاب کنید
تصویر توسط نویسنده

 

ماسک

این تابع به جایگزینی مقادیری که شرایط سفارشی برآورده نمی شود کمک می کند.

# ایجاد سنین داده نمونه = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
ماسک | داده ها
تصویر توسط نویسنده

پس از انجام عملیات فوق.

پوشش انجام شده است
تصویر توسط نویسنده

حداقل و حداکثر

اگرچه min و max به خوبی شناخته شده است، اما برخی از خواص بهتری برای برخی از موارد لبه دارد.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) برای lib در کتابخانه ها}, index=index ) >>> df
حداقل و حداکثر
تصویر توسط نویسنده 

DataFrame خیالی بالا نتایج چهار کتابخانه مختلف تقویت کننده گرادیان را در پنج مجموعه داده نشان می دهد. ما به دنبال بسته ای هستیم که بهترین عملکرد را در هر مجموعه داده داشته باشد. در اینجا نحوه انجام آن با حداکثر به شیوه ای درجه یک آمده است:

>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 Loan Default 97.96728 dtype: float64

بزرگترین و کوچکترین

بزرگترین و کوچکترین برای مشاهده مقادیر بالای N یا ~(بالا N) یک متغیر مفید است.

diamonds.nlargest (5، "قیمت")
بزرگترین و کوچکترین
تصویر توسط نویسنده
diamonds.nsmallest (5، "قیمت")
nsکوچکترین
تصویر توسط نویسنده

 

Idxmax و Idxmin

پانداها وقتی حداکثر یا حداقل را در یک ستون تماس می‌گیرید، بزرگترین/کوچک‌ترین عدد را برمی‌گردانند. با این حال، شرایطی وجود دارد که شما به موقعیت حداقل/حداکثر نیاز دارید، که این توابع آن را ارائه نمی دهند.

در عوض، می توانید از idxmax/idxmin استفاده کنید:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

Value_Counts

یک راه متداول برای یافتن درصد مقادیر از دست رفته، ترکیب isnull و sum و تقسیم بر اندازه آرایه است.

اما، value_counts با آرگومان‌های مرتبط همین کار را انجام می‌دهد:

مسکن = pd.read_csv("train.csv") >>> مسکن["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 NaN: 0.01644. float0.01370

گیره یا پنس

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

>>>ages.clip(50، 60)
داده برای کلیپ
تصویر توسط نویسنده

 

at_time و Betweeen_time

این توابع هنگام کار با سری های زمانی با دانه بندی بالا مفید هستند.

at_time به دریافت مقادیر در یک تاریخ یا زمان خاص کمک می کند.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time مثال | عملکرد پانداها
تصویر توسط نویسنده

>>> df.at_time ("15:00")

.at_time | عملکرد پانداها
تصویر توسط نویسنده

between_time برای واکشی ردیف ها در یک محدوده سفارشی استفاده می شود.

from datetime import datetime >>> df.between_time("09:45", "12:00")
بین_زمان
تصویر توسط نویسنده

 

Bdate_range

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

series = pd.bdate_range("2021-01-01", "2021-01-31") # دوره یک ماهه >>> len(series) 21

در و Iat

این دو دسترسی به طور قابل ملاحظه ای سریعتر از loc و iloc هستند. با این حال، آنها یک نقطه ضعف دارند. آنها فقط به شما اجازه می دهند هر بار یک مقدار را انتخاب یا جایگزین کنید:

# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # جایگزین ردیف 16541 ستون قیمت >> > diamonds.at[16541، "قیمت"] = 10000

آرگسورت

این تابع به استخراج شاخص هایی کمک می کند که آرایه ای از ویژگی ها را مرتب کنند.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # اکنون، "نکات" را بر اساس total_bill tips.iloc[sort_idx].head() مرتب کنید.
arg_sort
تصویر توسط نویسنده

 

لوازم جانبی گربه

پانداها توابع داخلی پایتون را در تاریخ ها و رشته ها با استفاده از لوازم جانبی مانند str یا dt اجازه می دهند.

>>> diamonds.dtypes قیراط float64 دسته برش دسته رنگ وضوح دسته عمق float64 جدول float64 قیمت int64 x float64 y float64 z float64 cut_enc int64 dtype: object:

می توان از بسیاری از توابع ویژه با استفاده از cat accessor در ستون های دسته بندی استفاده کرد. دارای توابعی مانند دسته‌ها برای یافتن یکتا، rename_categories برای تغییر نام ویژگی‌ها.

diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C'، 'D'، 'E']، dtype='object')

برای لیست بیشتر توابع زیر، این را بررسی کنید لوازم جانبی گربه.

فشار دادن

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

هنگامی که یک مقدار واحد از یک شرط مورد استفاده برای زیر مجموعه یک DataFrame برگردانده می شود، این یکی از این موارد است. سناریوی زیر را در نظر بگیرید:

زیر مجموعه = diamonds.loc[diamonds.index >> زیر مجموعه
قیمت

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

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

>>> subset.squeeze() 326

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

>>> subset.squeeze("columns") # or "rows" 0 326 نام: price, dtype: int64

توجه داشته باشید که این تابع فقط برای Series یا DataFrame با مقادیر تک کار می کند.

Excel_writer

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

# بارگذاری دو مجموعه داده الماس = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # در همان فایل اکسل با pd.ExcelWriter("data/data.xlsx") به عنوان نویسنده بنویسید: diamonds.to_excel (writer, sheet_name = "الماس") tips.to_excel (writer, sheet_name = "نکات")

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

نتیجه

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

کتابخانه‌هایی مانند Dask و datatable به تدریج جایگزین پانداها با ویژگی‌های جدید و پر زرق و برق خود برای مدیریت مجموعه داده‌های بزرگ می‌شوند، پانداها همچنان پرکاربردترین ابزار دستکاری داده در جامعه علم داده پایتون است. به دلیل اینکه چقدر خوب در پشته SciPy جا می‌شود، کتابخانه به عنوان پارادایم برای دنبال کردن و ساخت بسته‌های دیگر عمل می‌کند.

امیدوارم این پست برای شما مفید بوده باشد و از خواندن شما سپاسگزارم.

رسانه های نشان داده شده در این مقاله متعلق به Analytics Vidhya نیستند و به صلاحدید نویسنده استفاده می شوند.

منبع: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

تمبر زمان:

بیشتر از تجزیه و تحلیل Vidhya