ترفندهای SQL برای دانشمندان داده – راهنمای کاربردی
در این مطلب، نکات و ترفندهای SQL برای دانشمندان داده به منظور کار کردن سریعتر و بهتر با دادههای موجود در پایگاه داده، آموزش داده شده است.

ترفندهای SQL برای دانشمندان داده
در ادامه، نکات و ترفندهای SQL برای دانشمندان داده بیان شده است که به آنها کمک میکند که کار تحلیل خود را به طور موثرتر و سادهتری با استفاده از SQL و یکپارچهسازی آن با زبانهای برنامهنویسی مانند پایتون و R انجام دهند. در اینجا، با Oracle SQL روی جدول دادهای که در زیر نمایش داده شده و شامل چندین نوع از عناصر داده است، کار شده است.

دستور COALESCE() برای بازکدگذاری دادههای نال/ناموجود
در این مثال، هدف بازکدگذاری NULL_VAR به کاراکتر «MISSING» است. قطعه کد لازم برای انجام این کار، در ادامه آورده شده است. توصیه میشود کلیه قطعه کدها و اعمالی که از این پس آموزش داده میشود را کاربر خود نیز بررسی کند تا به خوبی آنها را بیاموزد.
خروجی قطعه کد بالا، به صورت زیر است.

نکته بسیار مهمی که در این وهله باید به آن توجه داشت این است که در پایگاه داده، «مقادیر ناموجود» (Missing Values | به آنها مقادیر گم شده نیز گفته میشود) را میتوان علاوه بر NULL، به شکلهای گوناگون دیگری نیز کدگذاری کرد. به عنوان نمونه، ممکن است یک رشته یا فضای خالی باشند، برای مثال، در جدول معرفی شده در این مطلب به صورت «EMPTY_STR_VAR» است؛ همچنین، میتواند یک رشته کاراکتر «NA» باشد که در مثال ارائه شده در این مطلب، «NA_STR_VAR» است. در این مثالها، COALESCE( ) کار نمیکند؛ اما میتوان این موارد را با عبارت CASE WHEN مدیریت کرد.
خروجی قطعه کد بالا، به صورت زیر است.

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

خروجیها، در سمت چپ جدول قرار دارند. در اینجا، دو ترفند وجود دارد؛ اول آنکه انجام عمل SUM روی «ردیف پیش از آماده سازی»، جمع همه مقادیر در اولویت نسبت به این نقطه را محاسبه میکند. دوم آنکه یک JOIN_ID برای محاسبه جمع کل میسازد. در اینجا از «تابع پنجره» (Window Function) برای این محاسبات استفاده میشود و از توزیع تجمعی، میتوان به خوبی فهمید که آخرین رکورد احتمالا یک دورافتادگی است.
پیدا کردن رکوردهایی با مقادیر فوقالعاده، بدون استفاده از Self Joining
خروجی قطعه کد و در واقع «کوئری» (Query) بالا، به صورت زیر است. در این خروجی، سطرهای دارای بیشینه NUM_VAR را که بر اساس ID گروهبندی شدهاند، نشان داده شدهاند.

دستور WHERE شرطی
دستور WHERE در SQL برای مجموعهها مورد استفاده قرار میگیرد. در حقیقت، افرادی که با SQL کار میکنند بسیاری از مواقع از WHERE استفاده میکنند. برای مثال، در این جدول، هدف آن است که تنها سطرهایی با منطق زیر نگه داشته شوند.
if SEQ_VAR in (1, 2, 3) & diff(DATE_VAR2, DATE_VAR1)≥ 0
elif SEQ_VAR in (4, 5, 6) & diff(DATE_VAR2, DATE_VAR1) ≥1
else diff(DATE_VAR2, DATE_VAR1) ≥2
قطعه کد زیر، آنچه در بالا بیان شد را پیادهسازی میکند.
خروجی قطعه کد بالا به صورت زیر است.

منطقی که پیش از این بیان شد، باید توالی ۴ و ۵ از ID = 19064 را حذف کند. دلیل این امر، تفاوت بین date2 و date1 = 0 است و این دقیقا همان خروجی است که قطعه کد بالا ارائه میکند.
دستورات Lag() و Lead() برای کار با سطرهای متوالی
دستور Lag (بررسی سطر قبلی) و Lead (بررسی سطر بعدی) احتمالا دو تا از پرکاربردترین توابع تحلیلی در فعالیتهای روزانه تحلیلگران دادهای است که از SQL طی کارها و فعالیتهای خود استفاده میکنند. این دو تابع به کاربران این امکان را میدهد که بیش از یک سطر را در هر بار با دستور self-joining کوئری بزنند.
فرض میشود که هدف، محاسبه تفاوت در NUM_VAR بین دو سطر متوالی است (که بر اساس توالی مرتب شدهاند)؛ قطعه کد لازم برای انجام این کار، در ادامه آورده شده است.
تابع LAG() سطر پیشین را باز میگرداند و اگر هیچ سطری وجود نداشت (برای مثال، اگر سطر مورد نظر، اولین سطر از هر ID بود)، PREV_NUM برابر با ۰ کدگذاری میشود تا تفاوت را که با NUM_DIFF در زیر نمایش داده شده است، محاسبه کند.

یکپارچهسازی کوئری SQL با پایتون و R
سادهترین راهکار برای استفاده از کوئری برای مثال در پایتون، کپی و چسباندن (Paste) کردن آن به عنوان رشته و سپس، فراخوانی «pandas.read_sql()» است. قطعه کد لازم برای این کار، در ادامه آمده است.
بنابراین، تا هنگامی که کوئریها کوتاه هستند و بدون نیاز به تغییرات بیشتر نهایی میشوند، این متد به خوبی کار میکند. پرسشی که در این وهله برای برخی از افراد احتمالا مطرح میشود این است که اگر کوئری دارای ۱۰۰۰ خط باشد و یا نیاز باشد که به طور مداوم آن را به روز رسانی کرد، چه کار میتوان انجام داد. در این سناریو، باید فایلهای sql. را به طور مستقیم در پایتون یا R خواند. دستورات زیر نشان میدهد که چگونه باید دستور getSQL را در پایتون پیادهسازی کرد. ایده مورد استفاده برای این کار، در زبان برنامهنویسی R نیز مشابه است.
در اینجا، اولین arg sql_query فایل sql. را به طور جداگانه و تنها دریافت میکند که به سادگی قابل نگهداری است. پیادهسازی آنچه بیان شد، در ادامه انجام شده است.
«ID_LIST» یک رشته نگهدارنده برای مقادیری است که قرار داده میشوند و getSQL( ) با استفاده از کد زیر قابل فراخوانی است.
عبارات با قاعده در SQL
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- آموزش هوش مصنوعی
- مجموعه آموزشهای برنامه نویسی پایتون (Python)
- داده کاوی (Data Mining) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
- معرفی منابع جهت آموزش یادگیری عمیق (Deep Learning) — راهنمای کامل
- آموزش SQL Server Management Studio | کامل، رایگان و گام به گام
^^
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













