۳ راه برای کار کردن با مجموعه داده‌های بزرگ در پایتون

منتشر شده در towardsdatascience به تاریخ ۳۰ دسامبر ۲۰۲۱
لینک منبع 3 ways to deal with large datasets in Python

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

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

۱. کاهش استفاده از حافظه با بهینه‌سازی انواع داده‌ها

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

من اخیرا از این روش برای تجزیه و تحلیل استفاده کرده‌ام که در آن بیشتر با انواع اعداد صحیح که نشان‌دهنده سال‌ها، ماه‌ها یا روزها هستند، سر و کار داشتم:

استفاده از Pandas برای بارگذاری پرونده و مشخص کردن انواع (تصویر نویسنده)

برای آن مورد خاص، مشخص کردن انواع داده‌ها منجر به کاهش مهمی در حافظه مورد استفاده شد. لطفاً توجه داشته باشید که در مثال بالا من از نوع پانداس pandas.Int16Dtype استفاده کردم تا ستونی را که حاوی مقادیر گمشده است مجبور کنم از نوع int باشد. این به صورت داخلی با استفاده از pandas.NA به جای numpy.nan برای مقادیر از دست رفته به دست می‌آید

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

۲. داده‌ها را به تکه‌های کوچک تقسیم کنید

هنگامی که داده‌ها برای جا دادن در حافظه بیش از حد بزرگ هستند، می‌توانید از گزینه chunksize Pandas برای تقسیم داده‌ها به تکه‌ها به جای پرداختن به یک بلوک بزرگ استفاده کنید. استفاده از این گزینه یک شی تکراری ایجاد می‌کند که می‌تواند برای عبور از قسمت‌های مختلف مورد استفاده قرار گیرد و فیلتر کردن یا تجزیه و تحلیل را انجام دهد، درست مانند کاری که هنگام بارگذاری مجموعه داده کامل انجام می‌شود.

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

از تجزیه و تحلیل اکتشافی اولیه تا آموزش مدل می‌توان از Chunking استفاده کرد و نیاز به تنظیم اضافی بسیار کمی دارد.

۳. از مزیت ارزیابی تنبل استفاده کنید

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

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

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

من از Pyspark برای انجام تجزیه و تحلیل اکتشافی بر روی مجموعه داده‌های بزرگتر از حافظه استفاده کردم. Dask نیز بسیار محبوب است و یافتن نمونه‌های آن کار سختی نیست. سینتکس Dask از پانداس تقلید می‌کند، بنابراین بسیار آشنا به نظر می‌رسد، اما به استفاده از پایتون محدود می‌شود، در حالی که Spark در جاوا یا اسکالا نیز کار می‌کند.

کتابخانه‌های دیگری مانند Vaex یا Modin قابلیت‌های مشابهی دارند اما من شخصا از آن‌ها استفاده نکرده‌ام.

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