ابزارهای پایتون برای استخراج، تبدیل و بارگذاری داده ها – راهنمای کاربردی
در این مطلب، ابزارهای پایتون برای استخراج، تبدیل و بارگذاری داده ها معرفی شدهاند. استفاده از این ابزارها، فرایند دادهکاوی را تسهیل و تسریع میکند.
ابزارهای پایتون برای استخراج، تبدیل و بارگذاری داده ها
«دادهکاوی» (Data Mining) و «علم داده» (Data Science) فرایندهایی هستند که فعالیتهای مورد نیاز برای انجام ضمن آنها، نه فقط در یک مرحله، که طی چندین مرحله انجام میشود. این فرایندها، خطی نیستند. بدین معنا که در صورت انجام شدن و پایان یافتن یک گام و رفتن به گام بعدی، آن گام از مراحل حذف نمیشود و هر لحظه این امکان وجود دارد که کاربر به گامهای پیشین بازگردد و مجددا فعالیتهای مربوط به آن گام را انجام دهد. فرایند دادهکاوی متشکل از هفت گام است. این گامها عبارتند از:
- «پاکسازی داده» (Data Cleaning)
- «یکپارچهسازی داده» (Data Integration)
- «انتخاب داده» (Data Selection)
- «تبدیل داده» (Data Transformation)
- «کاوش داده» (Data Mining)
- «ارزیابی الگو» (Pattern Evaluation)
- «ارائه دانش» (Knowledge Representation)
اما همانطور که پیش از این نیز اشاره شد، «استخراج، تبدیل و بارگذاری داده ها» (Extraction, Transformation and Load | ETL) نیز جزو گامهای فرایند دادهکاوی است. به طور کلی، فرایند استخراج، تبدیل و بارگذاری دادهها، به «واکشی» (Fetching) دادهها از یک یا تعداد بیشتری از سیستمها و بارگذاری آنها در یک «انبار داده» (Data Warehouse)، پس از انجام برخی تبدیلات روی دادهها، اشاره دارد.
پرسشی که ممکن است برای بسیاری از افراد مطرح شود این است که پس چرا موارد موجود در ETL، به جز مورد «تبدیل دادهها» (Data Transformation)، در هفت گام بیان شده برای دادهکاوی وجود ندارند. در پاسخ به این پرسش به نوعی میتوان گفت که «استخراج دادهها» (Data Extraction) و «بارگذاری» (Load) آنها، از گامهای مستتر در فرایند دادهکاوی هستند. در واقع، استخراج دادهها گامی است که مبنای دادهکاوی محسوب میشود و تا دادهها وجود نداشته باشند، هفت گام بیان شده برای فرایند دادهکاوی انجام نمیشود. استخراج دادهها در واقع به گردآوری دادهها و استخراج آنها از منابع مختلف به منظور انجام دادهکاوی اشاره دارد. بارگذاری دادهها نیز از جمله فعالیتهایی است که به منظور آغاز تحلیل دادهها انجام میشود و ضمن آن، دادههای گردآوری شده در پایگاه داده بارگذاری میشوند.
تبدیل دادهها که در هفت گام بالا نیز اشاره شده است، به فعالیتهایی اشاره دارد که ضمن آن دادهها از شکلی به شکل دیگر تبدیل میشوند. این تبدیل دادهها با هدف سادهتر شدن کار و بهبود صحت و دقت دادهکاوی انجام میشود. برخی از روشهای بسیار کاربردی و متداول تبدیل دادهها، در مطلب «روشهای استانداردسازی دادهها» بیان شده است. «بارگذاری دادهها» (Load Data) در واقع به بارگذاری دادههای استخراج و تبدیل شده، برای حل مسئله اشاره دارد.
ابزارهای ETL زیادی برای انجام فعالیتهای مربوط به استخراج، تبدیل و بارگذاری دادهها وجود دارند. برخی از این ابزارها، یک پیادهسازی کامل «اِند-تو-اِند» (End to End | انتها به انتها) انجام میدهند و برخی از آنها، به کاربر کمک میکنند تا فرایند استخراج، تبدیل و بارگذاری دادهها را از پایه بسازد و بدین منظور، گزینههایی را نیز در اختیار کاربر قرار میدهند. در این مطلب، برخی از ابزارهای ETL محبوب و متداول «زبان برنامهنویسی پایتون» (Python Programming LAnguage) معرفی و اینکه هر یک در چه موقعیتهایی کاربرد دارند بررسی شده است. اما پیش از آنکه به این ابزارهای ویژه استخراج، تبدیل و بارگذاری در پایتون پرداخته شود، برخی از ویژگیهای اساسی که ابزارهای ETL باید داشته باشند مورد بررسی قرار میگیرد.
ویژگیهای ابزارهای ETL
ETL، همانطور که پیش از این نیز بیان شد، سرنامی برای واژگان Transform ،Extract و Load است. بنابراین، هر ابزار ETL باید حداقل یکی از ویژگیهای بیان شده در زیر را داشته باشد.
استخراج
استخراج، در واقع فعالیتهای مربوط به استخراج کردن دادهها از «منابع داده» (Data Sources) مختلف است. یک ابزار ETL خوب، از انواع گوناگون منابع داده پشتیبانی میکند. این انواع منابع داده باید شامل بیشتر پایگاههای داده (هم پایگاه دادههای NoSQL و هم SQL) و قالبهای فایلی مانند xml ،xls ،csv و json باشد.
تبدیل
دادههای استخراج شده از منابع داده گوناگون معمولا در ناحیهای نگهداری میشوند که دادههای خام در آن پاکسازی و به شکل معناداری از دادهها برای ذخیرهسازی در انبار داده تبدیل میشوند. یک ابزار ETL استاندارد، از همه تبدیلهای پایهای دادهها شامل عملیات روی سطرها، اتصالها (Joins)، «مرتبسازی» (Sorting)، «تجمیع» (Aggregation) و دیگر موارد پشتیبانی میکند.
بارگذاری دادهها
در فرایند بارگذاری، دادههای تبدیل شده در یک «انبار داده» (Data Warehouse) هدف بارگذاری میشوند. ابزارهای ETL استاندارد، از اتصالگرها برای انواع گوناگونی از پایگاههای داده شامل «اسنوفلیک» (Snowflake)، (اماس اسکیوال) (MS SQL) و «اوراکل» (Oracle) پشتیبانی میکنند.
دیگر ویژگیهای افزوده
صرفنظر از کارکردهای استخراج، تبدیل و بارگذاری دادهها، برخی از ابزارها از ویژگیهای افزودهای مانند داشبوردها برای بصریسازی و پیگیری سلسلهمراتب گوناگون ETL استفاده میکنند. در حقیقت، در کنار ETL، برخی از ابزارها توانایی انجام فرایندهای موازی یا توزیع شده را نیز فراهم میکنند و در برخی از موارد، حتی در تحلیلهای پایهای، این موارد میتوانند افزونههای خوبی بسته به نیازهای پروژه باشند.
ابزارهای ETL پایتون
پایتون، زبان برنامهنویسی است که یادگیری و استفاده از آن نسبتا ساده است. زبان برنامهنویسی پایتون دارای یک جامعه کاربری فعال و «متن باز» (OpenSource) در «گیتهاب» (Github) است که به طور مستمر روی کتابخانههای جدید پایتون کار میکنند.
به دلیل وجود این جامعه کاربری فعال و نرخ کارایی و البته پیچیدگی پایین زبان پایتون، این زبان برنامهنویسی اکنون کاربردهای قابل توجهی در زمینههایی مانند توسعه بازی، توسعه وب، توسعه برنامههای کاربردی، «پردازش زبان طبیعی» (Natural Language Processing | NLP) و «بینایی کامپیوتری» (Computer Vision) دارد. موارد بیان شده، تنها برخی از زمینههایی هستند که زبان «همه منظوره» (General Purpose) پایتون در آنها کاربرد دارد.
در سالهای اخیر، پایتون به یک زبان برنامهنویسی محبوب برای پردازش داده، تحلیل داده و علم داده مبدل شده است (به ویژه با کتابخانه قدرتمند پانداس یا همان Pandas). بنابراین، این موضوع نباید خیلی شگفتآور باشد که ابزارهای پایتون زیادی وجود دارند که از آنها میتوان برای انجام کارهای مختلف استفاده کرد. در ادامه، نگاهی به ابزارهای متداول این حوزه انداخته میشود.
Petl
ابزار Petl (+) برای استخراج و بارگذاری دادهها و به طور کلی برای علم داده یک ابزار اساسی است که کارکردهای ETL استاندارد شامل «وارد کردن» (Import | ایمپورت) دادهها از منابع مختلف (مانند xls ،text ،json، XML ،csv) به پایگاه داده را فراهم میکند. بدیهی است که این ابزار، مانند دیگر ابزارهای موجود در لیست، قابلیتهای تحلیلی را ارائه نمیکند. اگرچه، این ابزار از همه تبدیلهای استاندارد مانند عملیات روی سطرها، مرتبسازی، اتصال و تجمیع پشتیبانی میکند.
Petl به عنوان یک ابزار ساده، گزینه بدی نیست، اما از مشکلات کارایی رنج میبرد؛ به ویژه در مقایسه با برخی دیگر از گزینههای موجود. بنابراین، اگر کاربر فقط نیاز به ساخت یک سلسله مراتب ETL ساده داشته باشد و کارایی برای او یک مسئله کلیدی محسوب نشود، این ابزار سبک گزینه بسیار مناسبی محسوب میشود. اما برای هر گونه کار پیچیدهتری، یا در صورتی که کاربر انتظار داشته باشد که دامنه پروژه گسترش پیدا کند، ممکن است نیاز به بررسی سایر گزینههای موجود در این لیست نیز باشد.
پانداس
کتابخانه «پانداس» (Pandas) (+) یکی از محبوبترین کتابخانههای زبان برنامهنویسی پایتون است. از این کتابخانه میتوان برای کار با انواع دادهها استفاده کرد. یکی از دلایل اصلی محبوبیت این کتابخانه نیز کاربردهای گستردهای است که در حوزه علم داده دارد و باید به خاطر داشت که علم داده خود یک زمینه سریعا در حال رشد است.
پانداس از «چارچوبهای داده» (Data Frames) به عنوان ساختار دادهای برای نگهداری دادهها در حافظه استفاده میکند (به طور مشابه با روشی که دادهها در زبان برنامهنویسی R مدیریت میشوند). صرفنظر از کارکردهای استخراج، تبدیل و بارگذاری (ETL) متداول، کتابخانه پانداس از بارگذاری دادههای تحلیل و قابلیتهای بصریسازی استفاده میکند.
استفاده از پانداس آسان است و این کتابخانه دارای ویژگیهای غنی زیادی است. به همین دلایل است که «دانشمندان داده» (Data Scientists) از این کتابخانه به طور گسترده برای فعالیتهای ETL و تحلیل اکتشافی دادهها استفاده میکنند. کاربرانی که در حال حاضر از پانداس استفاده میکنند باید بدانند که این کتابخانه گزینه مناسبی برای توسعه سلسله مراتب اثبات مفهوم برای ETL است.
Mara
«مارا» (Mara) (+) یک کتابخانه پایتون سبک وزن برای ETL است. Mara با وجود سبک وزن بودن، دارای ویژگیهای استانداردی برای ساخت یک سلسلهمراتب ETL است. همچنین، این کتابخانه دارای ویژگیهای توکاری مانند «رابط کاربری مبتنی بر وب» (Web Based User Interface) و یکپارچهسازی با خط فرمان است. رابط کاربری وب، به بصریسازی اجرای سلسلهمراتب ETL کمک میکند و قابل یکپارچه شدن با برنامههای کاربردی مبتنی بر فلسک نیز است. مارا (Mara) از PostgreSQL به عنوان موتور پردازش داده خود استفاده میکند. اگر کاربر به دنبال یک ابزار ETL ساده اما دارای ویژگیهای پیچیده زیاد است، Mara گزینه بسیار خوبی محسوب میشود.
Airflow
«آپاچی ارفلو» (Apache Airflow) (+) توسط Airbnb ساخته شده و یک ابزار مدیریت جریان کاری متنباز است. از این ابزار میتوان برای ساخت سلسله مراتب استخراج، تبدیل و بارگذاری دادهها استفاده کرد. به بیان دقیقتر، Airflow به خودی خود یک ابزار ETL نیست؛ در عوض، بیشتر ابزاری است که از آن میتوان برای ساخت، برنامهریزی و نظارت بر جریانهای کاری استفاده کرد. این یعنی، میتوان از Airflow با یکی کردن ماژولهای متعددی که برای فرایند ETL کاربر به طور مستقل نوشتن شدهاند، برای ساخت سلسله مراتب استفاده کرد.
جریان کاری Airflow مفاهیم «گراف جهتدار غیر مدور» (Directed Acyclic Graph | DAG) را دنبال میکند. Airflow، همچون دیگر ابزارهای موجود در لیست، دارای یک داشبورد مبتنی بر مرورگر برای بصریسازی جریانهای کاری و پیگیری اجرای چندین جریان کاری است. همچنین، در صورتی که کاربر تمایل به ساخت جریانهای کاری ETL پیچیده داشته باشد، Airflow گزینه خوبی به شمار میآید و میتوان از آن برای انجام این کار، با زنجیر کردن ماژولهای مستقل و موجود به یکدیگر، استفاده کرد.
Pyspark
«پایاسپارک» (Pyspark) (+) نسخهای از «اسپارک» (Spark) است که روی پایتون اجرا میشود و بنابرین، نام آن به این صورت و در واقع ترکیبی از عبارات «پای» (مخفف پایتون) و «اسپارک» است. در وبسایت اسپارک، پیرامون این ابزار چنین توضیح داده شده است:
«اسپارک یک موتور تحلیلی برای پردازشهای داده بزرگ مقیاس است.»
هسته اسپارک نه تنها ویژگیهای مستحکمی برای ساخت سلسله مراتب ETL فراهم میکند، بلکه، پشتیبانی برای استریم کردن (Spark Streaming)، یادگیری ماشین (MLib)، پردازش گراف (Graph X) و اسکیوال (Spark SQL) دارد. مزیت اصلی استفاده از اسپارک، پردازش سریع حجم زیادی از دادهها است. بنابراین، اگر کاربر به دنبال پردازش سریع «کلان داده» (Big Data | مَهداده) و یا پردازش «جریان داده» (Data Stream) است، قطعا باید Pyspark را به عنوان یک ابزار و گزینه مناسب، مد نظر داشته باشد. البته، لازم به ذکر است که این بهترین و شگفتانگیزترین گزینه موجود در این راستا نیست، ولی همواره باید به آن به عنوان یکی از بخشهای استقرار سلسلهمراتب ETL توجه داشت.
Bonobo
«بونوبو» (Bonobo) (+) یک ابزار ETL سبک است که با استفاده از زبان برنامهنویسی پایتون ساخته شده است. این ابزار ساده و یادگیری آن نسبتا آسان است. Bonobo از مفاهیم گراف برای ساخت سلسله مراتب استفاده و از پردازش موازی چندین عنصر در سلسله مراتب پشتیبانی میکند. همچنین، بونوبو دارای رابط بصری نیز هست که با استفاده از آن، کاربر میتواند پیشرفت سلسله مراتب استخراج، تحلیل و بارگذاری دادهها را به صورت بصری پیگیری کند. بونوبو (Bonobo) به عنوان یک ابزار کامل، ممکن است گزینه خوبی برای بررسیهای موردی ساده باشد؛ اما از ویژگیهای خاص و متعدد زیادی که آن را از دیگر گزینههای موجود متمایز کند، بهره نمیبرد.
Luigi
«لویگی» (Luigi) (+) یک ابزار ETL مبتنی بر پایتون است که توسط «اسپاتیفای» (Spotify) ساخته شده است و در حال حاضر به عنوان یک ابزار متنباز، در دسترس همگان است. این ابزار، نسبت به دیگر گزینههای موجود در این لیست پیچیدهتر است و ویژگیهای قدرتمندی را برای ساخت سلسلهمراتب پیچیده ETL دارد. در صفحه گیتهاب این پروژه، چنین بیان شده است:
Luigi رزولوشن وابستگیها، مدیریت جریان کاری، بصریسازی، مدیریت شکستها، یکپارچهسازی خط فرمان و بسیاری از دیگر موارد را انجام میدهد و اداره میکند.
ابزار Luigi، با یک داشبورد وب برای پیگیری همه کارهای ETL همراه شده است. اگر کاربر در صدد ساخت یک راهکار سازمانی باشد، Luigi انتخاب خوبی محسوب میشود.
Odo
«اودو» (Odo) (+) یک ابزار پایتون است که میتواند دادهها را از یک قالب به قالبی دیگر تبدیل کند. اصلیترین ویژگی Odo، کارایی است که این ابزار در هنگام بارگذاری مجموعه دادههای بسیار بزرگ CSV در پایگاه دادههای متفاوت دارد. در وبسایت Odo درباره این ابزار چنین آمده است:
Odo از قابلیتهای محلی بارگذاری فایلهای CSV، از پایگاه دادههایی که دارای پشتیبانی از آنها است، استفاده میکند. این بارگذارها فوقالعاده سریع هستند. Odo در بحث بارگذاری دادهها هر رویکرد پایتون خالص (کد خالص پایتون، بدون استفاده از هر ابزار یا کتابخانه) دیگری را شکست میدهد.
بررسی خاصی جهت تایید یا تکذیب این ادعای سازندگان Odo، توسط دیگر پژوهشگران انجام نشده است؛ اما واضح است که اگر فرد درصدد ساخت یک سلسله مراتب ساده باشد که تمرکز آن روی بارگذاری حجم انبوهی از مجموعه دادههای CSV در انبار داده است، باید از Odo استفاده کند.
گزینه ترکیبی (ابزار + پایتون خالص)
در صورتی که کاربر تمایل به استفاده از پایتون خالص در فرایند استقرار ETL داشته باشد، Avik Cloud (+) احتمالا گزینه مناسبی باشد و توصیه میشود که کاربر نگاهی به آن داشته باشد. Avik Cloud یک پلتفرم مبتنی بر اسپارک برای ETL است که میتواند سلسله مراتب ETL را در Flow Builder خود بسازد. Avik Cloud به کاربر امکان وارد کردن کد پایتون را به طور مستقیم در سلسله مراتب ETL میدهد.
نقصی که در Avik Cloud وجود دارد آن است که بر خلاف کتابخانههای پایتون، Avik Cloud یک محصول «نرمافزار به عنوان محصول» (Software as a Service | SaaS) است و هزینههای گواهینامه خود را دریافت میکند. بخش خوب کار با Avik Cloud آن است که مدل قیمتدهی این محصول بر پایه فعالیتهای ارائهدهندگان خدمات «رایانش ابری» (Cloud Computing)، مانند «آمازون وب سرویس» (Amazon Web Services | AWS)، «گوگل کلود» (Google Cloud) و «آژور» (Azure) است و هزینه دریافتی برای آن، بر اساس میزان استفاده انجام شده توسط کاربر از این ابزار است.
جمعبندی
چنانچه در این مطلب بیان شده است، ابزارهای پایتون متعددی برای استخراج، تبدیل و بارگذاری دادهها وجود دارد که کاربر میتواند از میان آنها گزینه مناسب برای خودش را انتخاب و از آن استفاده کند. به طور کلی، صرفنظر از یک ابزار خاص، باید گفت که پایتون گزینه مناسبی برای انجام ETL است.
هر یک از ابزارهای ETL بیان شده در این مطلب، برای شرایط خاصی مناسب هستند و بنابراین، کاربر پیش از انتخاب ابزار خود، باید بررسی کوتاهی روی کلیه گزینهها داشته باشد. نباید فراموش کرد که انتخاب یک ابزار مناسب، نقش قابل توجهی در تسریع و تسهیل ETL و مدیریت بهتر یک پروژه دادهکاوی دارد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- آموزش هوش مصنوعی
- مجموعه آموزشهای برنامه نویسی پایتون (Python)
- داده کاوی (Data Mining) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
- ساخت تابع پایتون برای پاکسازی دادهها — راهنمای کاربردی
- گردآوری دادهها برای علم داده در پایتون — راهنمای کاربردی
^^