متین کریم پور
متین کریم پور
خواندن ۵ دقیقه·۲ سال پیش

معرفی polars، جایگزین pandas!


اکثر دانشمندان/تحلیلگران داده که از پایتون استفاده می کنند با pandas آشنا هستند. و اگر در زمینه علم داده فعالیت می کنید، احتمالاً زمان زیادی را صرف یادگیری نحوه استفاده از آنها برای دستکاری داده های خود کرده اید. با این حال، یکی از مشکلات اصلی pandas سرعت و ناکارآمدی آن در هنگام برخورد با مجموعه داده های بزرگ است. خوشبختانه، یک کتابخانه دیتافریم جدید وجود دارد که سعی دارد به این شکایت اصلی در مورد پانداها رسیدگی کند polars.

ماژول Polars کتابخانه دیتافریم است که به طور کامل با Rust برای پایتون و Rust نوشته شده است. در این پست، من شما را با اصول اولیه Polars و نحوه استفاده از آن به جای pandas آشنا می کنم. در پست‌های بعدی، به سراغ زبان Rust میریم و با هم با استفاده از burn یک مدل شبکه عصبی از صفر راه اندازی می‌کنیم.

معرفی Polars

بهترین راه برای درک Polars این است که کتابخانه دیتافریم بهتری نسبت به pandas است. در اینجا برخی از مزایای Polars نسبت به pandas اشاره شده است:

  • اول Polars از ایندکس برای دیتا فریم استفاده نمی کند. حذف ایندکس، دستکاری دیتافریم را بسیار آسان‌تر می‌کند (به هر حال، ایندکس در دیتافریم پانداز زیاد است).
  • دوم Polars داده ها را به صورت داخلی با استفاده از آرایه های Apache Arrow نشان می دهد در حالی که Pandas داده ها را در داخل با استفاده از آرایه های NumPy ذخیره می کند. آرایه های Apache Arrow در زمینه هایی مانند زمان بارگذاری، استفاده از حافظه و محاسبات بسیار کارآمدتر هستند.
  • سوم Polars از عملیات موازی بیشتری نسبت به پانداها پشتیبانی می کند. چون که Polars در Rust نوشته شده است، می تواند بسیاری از عملیات را به صورت موازی انجام دهد.
  • چهار Polars از ارزیابی تنبل پشتیبانی (lazy evaluation) می کند. بر اساس کوئری شما، Polars کوئری‌های شما را بررسی می کند، آنها را بهینه می کند و به دنبال راه هایی برای سرعت بخشیدن به کوئری یا کاهش مصرف حافظه می گردد. از سوی دیگر، Pandas فقط از ارزیابی مشتاقانه(eager evaluation) پشتیبانی می کنند، که بلافاصله به محض برخورد یک عبارت، آن را ارزیابی می کند.

نصب Polars

در این پست صرفا به polars در پایتون می‌پردازیم. برای نصب به سادگی میتوانید از دستور pip استفاده کنید:

pip install polars

یا می‌توانید از conda استفاده کنید:

conda install polars

شروع کار با Polars

در ادامه بعد از نصب برای آشنایی بیشتر یک دیتافریم می‌سازیم و با چند تایع ابتدایی آن کار می‌کنیم.

کار با DataFrame

بهترین راه برای یادگیری یک کتابخانه جدید این است که دستان خود را کثیف کنید. بنابراین بیایید با وارد کردن ماژول Polars و ایجاد یک Polars Dataframe شروع کنیم:

خروجی Polars هم مانند pandas زمانی که دیتافریم در Jupyter Notebook نمایش داده می شود، به زیبایی چاپ می کند:

یک نکته مهم این است که polars نام ستون‌ها را به صورت رشته (string) قبول می‌کند. کد زیر را برای نمونه نگاه کنید:

کد بالا این خطا را به همراه دارد:

ValueError: Series name must be a string.

همانطور که دید قطعه کد بالا کار کرد زیرا کلیدهای دیکشنری از نوع عدد صحیح (0 و 1) هستند. برای اینکه کار کند، باید مطمئن شوید که کلیدها از نوع رشته ای هستند ("0" و "1"):

در Polars علاوه بر نمایش نام سرصفحه برای هر ستون، نوع داده هر ستون را نیز نمایش می دهد. اگر می خواهید نوع داده هر ستون را به صراحت نمایش دهید، از ویژگی های dtypes استفاده کنید:

برای دریافت نام ستون ها، از ویژگی columns استفاده کنید:

برای دریافت محتوای دیتافریم به عنوان لیستی از تاپل ها، از متد ()rows استفاده کنید:

در polars برخلاف pandas مفهوم index وجود ندارد. فلسفه طراحی Polars به صراحت بیان می کند که index در دیتافریم مفید نیست.

انتخاب ستون‌ها

انتخاب ستون(ها) در Polars سر راست است - به سادگی نام ستون را با استفاده از روش ()select مشخص کنید:

و خروجی آن به صورت زیر می‌باشد:

لازم به ذکر است polars از روش براکت مربع نیز پشتیبانی می کند، روشی که اکثر توسعه دهندگان pandas با آن آشنا هستند. با این حال، مستندات برای Polars به طور خاص ذکر کرده است که روش براکت مربع یک ضد الگو برای Polars است. در حالی که می‌توانید با استفاده از df[:,[0]] کارهای بالا را انجام دهید، این احتمال وجود دارد که روش نمایه‌سازی براکت مربع در نسخه‌های بعدی Polars حذف شود. برای مثال می‌توانید با استفاده از کد پایین هم ستون‌ها را انتخاب کنید.
df['Model']

اگر می‌خواهید تمام ستون‌های عدد صحیح (مخصوصاً Int64) را در دیتافریم بازیابی کنید، می‌توانید از یک عبارت در متد ()select استفاده کنید:

عبارت pl.col(pl.Int64) به عنوان یک اصطلاح در Polars شناخته می شود. این اصطلاح به این صورت تعبیر می‌شود: تمام ستون‌هایی که نوع داده‌شان Int64 است را دریافت کنید. قطعه کد بالا خروجی زیر را تولید می کند:

اصطلاحات در polars بسیار قدرتمند هستند. به عنوان مثال، می توانید اصطلاحات را با هم ترکیب کنید، مانند این:

اصطلاحات بالا ستون های Model و Sales را انتخاب می کند و سپس ردیف ها را بر اساس مقادیر موجود در ستون Sales مرتب می کند:

انتخاب سطر

برای انتخاب یک سطر در یک دیتافریم، شماره ردیف را با استفاده از متد ()row ارسال کنید. خروجی به صورت یک tuple می‌باشد:

اگر نیاز به دریافت چندین ردیف بر اساس شماره ردیف دارید، باید از روش نمایه سازی براکت مربع استفاده کنید، اگرچه این روش توصیه شده در Polars نیست. در اینجا چند نمونه آورده شده است:

برای انتخاب چند ردیف، Polars استفاده از تابع ()filter را توصیه می کند. به عنوان مثال، اگر می خواهید تمام محصولات اپل را بازیابی کنید، می توانید از عبارت زیر استفاده کنید:

همچنین می توانید با استفاده از عملگر منطقی چندین شرط را مشخص کنید:

می توانید از عملگرهای منطقی زیر در Polars استفاده کنید:
| - OR
& - AND
~ - NOT

انتخاب سطر و ستون

اغلب اوقات، شما باید ردیف ها و ستون ها را همزمان انتخاب کنید. شما می توانید این کار را با زنجیر کردن متدهای ()filter و ()select مانند این انجام دهید:

اگر می خواهید ستون Sales را نیز نمایش دهید، یک لیست را به متد ()select ارسال کنید:

خلاصه

در این پست، من اصول اولیه Polars DataFrame را به شما نشان دادم. شما اصول استخراج سطرها و ستون ها و استفاده از متدهای ()select و ()filter را یاد گرفته اید. این پست ترجمه مقاله زیر می‌باشد.

https://towardsdatascience.com/getting-started-with-the-polars-dataframe-library-6f9e1c014c5c

polarsشبکه عصبیpythondata sciencerust
علاقه‌مند به یادگیری ماشین همراه با نیم نگاهی به زبان جذاب Rust :)
شاید از این پست‌ها خوشتان بیاید