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

کتابخانه Pandas در پایتون: چگونه دیتاست‌های بزرگ را بارگذاری کنیم

    0
    مدت زمان مطالعه: ۶ دقیقه

    کتابخانه Pandas در پایتون یکی از ارکان حیاتی علوم داده به شمار می‌آید. یکی از انتقاداتی که به این کتابخانه وارد می‌شود این است که نمی‌تواند دیتاست‌های بزرگ‌تر از حافظه را تحلیل کند و به همین دلیل در هنگام تحلیل و کار کردن با کلان‌ داد‌ه به مشکل می‌خورد.  تصور کنید می‌خواهیم یک دیتاست بزرگ را تنها با استفاده از کتابخانه Pandas در پایتون تحلیل کنیم. در این حالت ممکن است با چه چالش‌هایی مواجه شویم؟ برای مثال، فرض کنید فایلی شامل ۳ گیگابایت داده‌ در اختیار داریم؛ این داده‌ها چکیده‌ای از اطلاعات مربوط به سفرهایی است که در ماه مارس سال ۲۰۱۶ با تاکسی‌های شهری (زرد) انجام شده است. برای این‌که بتوانیم این دیتاست را تحلیل کنیم، باید ابتدا آن را در حافظه بارگذاری کنیم.  برای خواندن این دیتاست، از تابع ()read_csv  متعلق به کتابخانه Pandas در پایتون استفاده می‌کنیم:

     

    زمانی که سلول/ فایل را اجرا می‌کنم، سیستم Memory Error (خطای حافظه) را نشان می‌دهد ( خطای حافظه بستگی به ظرفیت سیستمی دارد که از آن استفاده می‌کنید).

    کتابخانه Pandas در پایتون

    آیا می‌توان از کتابخانه‌های دیگر استفاده کرد؟

    نکته‌ای که باید به آن توجه داشته باشید این است که کتابخانه Pandas در پایتون ابزار مناسبی برای انجام و اجرای تمامی مسائل نیست. کتابخانه Pandas در پایتون از پردازش چندگانه Multiprocessing پشتیبانی نمی‌کند و کتابخانه‌های دیگر در هنگام کار با کلان‌داده‌ها عملکرد بهتری دارند. یکی از این کتابخانه‌ها Dask نام دارد؛ این کتابخانه  API مشابه کتابخانه Pandas در پایتون دارد که می‌تواند با دیتاست‌هایی بزرگ‌تر از حافظه کار کند. حتی در سند کتابخانه Pandas در پایتون نیز صریحاً به عدم توانایی این کتابخانه در تحلیل کلان‌داده‌ها اشاره شده است:

    بهتر است در ‌چنین مواقعی از کتابخانه Pandas استفاده نشود. Pandas ابزار مناسبی برای انجام و اجرای تمامی مسائل نیست.

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

    • استفاده از ()read_csv به همراه پارامتر اندازه بخش Chunksize
    • استفاده از SQL و کتابخانه Pandas در پایتون

    تقسیم‌بندی: تقسیم‌ کردن دیتاست‌ها به بخش‌های کوچک‌تر

    کتابخانه Pandas در پایتون

     

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

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

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

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

    استفاده از تابع ()read_csv  به همراه اندازه بخش

    برای آن‌که بتوانیم دیتاست را تقسیم بندی کنیم، ابتدا باید اندازه بخش‌ها/ قسمت‌ها را مشخص کنیم. استفاده از تایع به همراه پارمتر اندازه بخش، یک شیء به عنوان خروجی به ما می‌دهد که می‌توانیم چندین بار آن را تکرار کنیم.

    کتابخانه Pandas در پایتون

     

    سپس عدد ۵۰.۰۰۰۰ را به عنوان سایز بخش انتخاب می‌کنیم، به این معنا که هر بار، فقط ۵۰.۰۰۰ ردیف از داده‌ها بارگذاری خواهد شد.

    بارگذاری فایل تک بخشی به عنوان دیتافریم کتابخانه Pandas در پایتون

    حالا چندین بخش داریم و می‌توانیم هر بخش را به عنوان یک دیتافریم کتابخانه Pandas در پایتون بارگذاری کنیم.

     

     

    نتیجه عالی است! سیستم خطای حافظه را نشان نمی‌دهد. حالا می‌خواهیم ببینیم این بخش چه مقدار از حافظه را اشغال کرده است:

    کتابخانه Pandas در پایتون

     

    • هشدار

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

     

    استفاده از SQL و Pandas برای خواندن فایل‌های داده‌ بزرگ

    کتابخانه Pandas در پایتون

     

    یکی دیگر از روش‌هایی که می‌توانیم به کار ببندیم این است که با استفاده از بخش‌ها یک دیتابیس SQLite بسازیم و سپس داده‌های مورد نیاز را با استفاده از پرسمان‌های SQL استخراج کنیم. SQLite سیستم مدیریت دیتابیس مبتنی بر زبان SQL است که برای محیط‌های کوچک‌تر طراحی و بهینه‌سازی شده است. این سیستم را می‌توان با استفاده از یکی از ماژول‌های پایتون به نام sqlite3 در پایتون وارد کرد.

    SQLAlchemy جعبه‌ابزار SQL پایتون است و توسعه‌دهندگان نرم‌افزارهای کاربردی می‌توانند با استفاده از تکنیک Object Relational Mapper از تمامی توان و انعطاف‌پذیری SQL استفاده کنند. از این جعبه‌ابزار برای ساخت موتوری استفاده می‌شود که با استفاده از داده‌های اصلی یک دیتابیس ایجاد می‌کند. در پروژه‌‌ پیش‌رو، این دیتابیس، یک فایل CSV بزرگ است.

    برای انجام پروژه حاضر، باید مراحل زیر را دنبال کنیم:

    بارگذاری کتابخانه‌های مورد نیاز

     

    ایجاد رابطی به دیتابیس

    دیتابس را نام‌گذاری می‌کنیم:

     

    در اینجا، دیتابیس  را با هدف ایجاد csv_database  نام‌گذاری می‌کنیم.

    ایجاد یک دیتابیس از فایل CSV با استفاده از روش تقسیم‌بندی  

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

     

    کتابخانه Pandas در پایتون

    به دلیل این‌که داده‌ها را در دیتابیس csv_database  می‌نویسیم، از تابع chunk.to_sql instead of chunk.to_csv   استفاده می‌کنیم. علاوه بر این، chunk_sql  نامی است که به دلخواه برای بخش انتخاب شده است.

    ساخت دیتافریم کتابخانه Pandas در پایتون با query ارسال شده به دیتابیس SQL

    دیتابیس ایجاد شده است. اکنون می‌توانیم دیتابیس را پرس‌‌و‌جو کنیم و ستون‌های مورد نیاز را استخراج کنیم؛ برای مثال، می‌توانیم ردیف‌هایی که تعداد مسافران (passenger count) آن‌ها کمتر از ۵ و مسافت سفر آن‌ها بیشتر از ۱۰ است را استخراج کنیم. Pandas .read_sql_query ، query  ارسال شده به SQL را در قالب یک دیتافریم می‌خواند.

     

    حالا دیتافریمی داریم که به خوبی در حافظه جای می‌‎گیرد و برای تحلیل‌های آتی می‌توان از آن استفاده کرد.

    نتیجه‌گیری

    کتابخانه Pandas در پایتون کتابخانه‌ای سریع و سودمند برای تحلیل داده‌ها است. با این وجود ابزار مناسبی برای کار کردن و تحلیل کلان‌داده‌ها نیست. در این نوشتار نشان دادیم تقسیم‌بندی و SQL چگونه می‌توانند در تحلیل دیتاست‌های بزرگ‌تر از حافظه سیستم به کمک ما بیایند. اما باید توجه داشته باشید که این روش‌های همیشه مؤثر و کارآمد نیستند و بهتر است از کتابخانه‌هایی استفاده کنید که با هدف کار کردن و تحلیل کلان‌داده‌ها ایجاد شده‌اند.

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    استخراج داده به جای چشم دوختن به چاه نفت؛ تقابل علم داده و اقتصاد

    مقاله قبلی

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

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *