Fuzzy Matching در Power BI
حتما تا به حال پیش آمده که بخواهید دو جدول را بر اساس ستون هایی که مقادیرشان به یکدیگر شبیه است اما دقیقا یکسان نیستند، Join کنید. Power BI این ویژگی را تحت عنوان Fuzzy Matching برای کاربران خود در نظر گرفته است.
فعال کردن قابلیت Fuzzy Matching
اگر از نسخه های پایین تر Power BI استفاده می کنید نیاز به فعال سازی این ویژگی خواهید داشت. برای فعال سازی قابلیت Fuzzy Matching باید به طریق زیر عمل کنیم. مطابق تصویر از طریق منوی File، گزینه Option and Setting را انتخاب کرده و به Option می رویم.
حال برگه ای پیش روی شما باز می شود که اگر به قسمت Preview feature بروید می توانید با فعال کردن گزینه Enable Fuzzy Merge این قابلیت را در Power BI فعال کنید. پس از فعال سازی یک بار Power BI را بسته و دوباره باز کنید:
پیاده سازی Fuzzy Matching
برای پیاده سازی Fuzzy Matching از دو جدول ساده استفاده کرده ایم. یکی از جداول حاوی اطلاعات دپارتمان ها است. جدول Department حاوی 3 دپارتمان فروش (Sales)، فناوری اطلاعات (Information Technology) و مدیریت (Management) است. جدول دیگر حاوی اطلاعات کارمندان است. همان طور که ملاحظه می کنید کاربران در ورود اطلاعات دقت کافی نداشته اند و اطلاعات دپارتمان ها را با نگارش های مختلف وارد کرده اند.
حال می خواهیم این دو جدول را با یکدیگر Join کنیم:
ابتدا به صورت عادی و معمول عمل Join را انجام می دهیم. از طریق Merge Queries به برگه Merge وارد می شویم.
حال ستون مشترک (Department) را انتخاب نموده و نوع Join را بر روی inner join قرار می دهیم:
حال ستون های مورد نظر را انتخاب می کنیم.
نتیجه نهایی به صورت زیر جدول زیر خواهد بود.
همین طور که مشاهده می کنید بسیاری از ردیف ها حذف شده اند و تنها دو ردیف باقی مانده اند. حال نوع Join را بر روی Left outer Join قرار می دهیم.
نتیجه Join به صورت تصویر زیر خواهد بود. همان طور که مشاهده می نمایید برای بسیاری از ردیف ها دپارتمان نامعلوم است، چرا که Join به صورت عادی تنها ردیف هایی را که مقادیر آن ها در هر دو ستون کاملا برابر است را به عنوان خروجی نمایش می دهد.
حال عمل Fuzzy Match را برای این دو جدول انجام می دهیم. باز هم مانند قبل گام های Merge را انجام داده و گزینه Use fuzzy matching to compare the merge را برای آن فعال می کنیم.
حال گزینه fuzzy merge option را به منظور انجام تنظیمات بیشتر باز می کنیم. ابتدا بدون تغییر در تنظیمات عمل Fuzzy Merge را انجام می دهیم. نتیجه مطابق تصویر زیر است.
همان طور که در تصویر مشاهده می کنید اکنون با عمل Fuzzy Merge تعداد بیشتری از ردیف ها در جدول نهایی ظاهر شده اند. ردیف هایی که با رنگ قرمز مشخص شده اند مواردی هستند که علیرغم یکسان نبودن مقادیر ستون ها به عنوان مقدار برابر تشخیص داده شده اند. در واقع fuzzy merge میزان شباهت مقادیر دو ستون را بررسی می کند و در صورتی که به آستانه تعیین شده توسط کاربر (به صورت پیش فرض 90 درصد) برسد آن ها را مساوی تشخیص می دهد.
بدیهیست هر چه این آستانه بالاتر تعیین شود عمل matching با سخت گیری بیشتر و هر چه پایین تر تنظیم شود، عمل تطابق با سخت گیری کمتری صورت می پذیرد. به طور مثال دو کلمه Sale و Sales موفق به رسیدن به آستانه تنظیمی کاربر شده اند و یکسان تشخیص داده شده اند. اما دو کلمه Mangmt و Management موفق به رسیدن به آستانه شباهت 90 درصدی نشده اند.
عمل Fuzzy Merge تنظیمات زیادی دارد. اولین تنظیم مربوط به threshold است که بین 0 تا 1 قابل تنظیم است. عدد تنظیمی در این قسمت آستانه شباهت مد نظر کاربر را نشان می دهد. در واقع با وارد کردن عدد در این باکس می گوییم مقادیر با شباهت بالاتر از این مقدار یکسان در نظر گرفته شوند.
گزینه Ignore case تنظیمات مربوط به حساسیت یا عدم حساسیت به حروف بزرگ و کوچک را انجام می دهد. همچنین Ignore Space تنظیمات مربوط به در نظر گرفتن یا نگرفتن Space ها را انجام می دهد.
اما مهمترین بخش مربوط به Transformation table است. Transformation Table یا Mapping Table جدولی است که ما به صورت آگاهانه جدولی را مشخص کرده و مقادیر مورد نظر را در این جدول تعریف می کنیم. این جدول باید دارای دو ستون From و To باشد و فراموش نکنید که Power Query به حروف کوچک و بزرگ حساس است.
در واقع در این روش باید جدول mapping را تعریف کرده و تمام مقادیر مورد نظر را در آن تعریف کنیم و به جای تعریف کردن آستانه شباهت و سپردن عمل Join به قضا و قدر و احتمال، آگاهانه مقادیر ممکن و معادل آن ها را تعریف کنیم. با هم به بررسی مثال بپردازیم.
عمل Fuzzy Matching با استفاده از mapping table
برای پیاده سازی این عمل 2 جدول شرکت ها و میزان فروش آن ها را ثبت شده است. در تصویر زیر شرکت های ثبت شده را مشاهده می نمایید. در این جدول 3 شرکت سایپا، ایران خودرو و بهمن موتور ثبت شده است.
در تصویر زیر میزان فروش ثبت شده توسط اپراتورهای مختلف را مشاهده می کنید. هر اپراتور به سلیقه ی خود عنوانی را برای نام شرکت ثبت نموده است. همان طور می بینید یکی از اپراتورها کلمه سایپا، دیگری گروه خودرو سازی سایپا و … را ثبت کرده است. بدیهی است این 2 جدول قابل Join نیستند، چرا که ستون ها دارای مقادیر یکسان نیستند.
پس بهترین راه ایجاد یک transformation table است که در آن تمامی مقادیر ممکن برای هر شرکت ثبت شود. این جدول در تصویر زیر قابل مشاهده است. ستون From مقادیر ممکن برای هر شرکت و To مقدار معتبر واحد برای هر شرکت است. به طور مثال تمام مقادیر سایپا، گروه سایپا، گروه خودرو سازی سایپا، شرکت سایپا و Saipa به عنوان سایپا شناخته شوند.
حال عمل Fuzzy Matching را انجام داده و جدول mapping ایجاد شده را به عنوان جدول Transformation Table، معرفی میکنیم. نحوه انجام این عمل را در تصویر زیر مشاهده می کنید.
نتیجه نهایی در تصویر زیر قابل مشاهده است. همان طور که مشاهده می کنید تمامی موارد به درستی تشخیص داده شده و عمل Join صورت پذیرفته است.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقی
سلام جناب وثوقی
تشکر از مطلب کارا و مفید شما
اما من در مورد ی دیتا به مشکل عجیبی در استفاده از Fuzzy Matching می خورم
چطور میتونم این مشکل رو با شما در میون بزارم؟
سلام
مورد شما را دیدم
حد رو رو 0.95 بذارید درست میشه
سلام آقا دم شما گرم توی این وانفسا بذار من هم جزء انگیزه دهندگان باشم خیلی خیلی سپاس
خداراشکر. ممنون از انرژی مثبت شما.