# Scikit-learn ကို အသုံးပြု၍ Regression Model တည်ဆောက်ခြင်း - ဒေတာကို ပြင်ဆင်ပြီး ရှင်းလင်းဖော်ပြခြင်း ![ဒေတာရှင်းလင်းဖော်ပြမှု infographic](../../../../2-Regression/2-Data/images/data-visualization.png) Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) ## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [ဒီသင်ခန်းစာကို R မှာလည်းရနိုင်ပါတယ်!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## အကျဉ်းချုပ် Scikit-learn ကို အသုံးပြု၍ Machine Learning Model တည်ဆောက်ရန် လိုအပ်သော tools များကို ပြင်ဆင်ပြီးနောက်၊ သင်၏ဒေတာကို မေးခွန်းထုတ်ရန် အဆင်သင့်ဖြစ်ပါပြီ။ ML ဖြေရှင်းချက်များကို အသုံးပြုပြီး ဒေတာနှင့်အလုပ်လုပ်သည့်အခါ၊ သင့်ဒေတာ၏ အခွင့်အလမ်းများကို အကောင်းဆုံးအသုံးချနိုင်ရန် မေးခွန်းကို မှန်ကန်စွာမေးနိုင်ဖို့ အရေးကြီးပါတယ်။ ဒီသင်ခန်းစာမှာ သင်လေ့လာရမည့်အရာများမှာ: - Model တည်ဆောက်ရန်အတွက် ဒေတာကို ပြင်ဆင်နည်း။ - Matplotlib ကို အသုံးပြု၍ ဒေတာကို ရှင်းလင်းဖော်ပြနည်း။ ## သင့်ဒေတာကို မှန်ကန်စွာမေးခွန်းထုတ်ခြင်း သင်လိုအပ်သော အဖြေကို သတ်မှတ်သည့် မေးခွန်းသည် သင်အသုံးပြုမည့် ML algorithm အမျိုးအစားကို ဆုံးဖြတ်ပေးပါမည်။ သင်ရရှိမည့် အဖြေ၏ အရည်အသွေးသည် သင့်ဒေတာ၏ သဘာဝပေါ်မူတည်ပါမည်။ ဒီသင်ခန်းစာအတွက် [ဒေတာ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ကို ကြည့်ပါ။ ဒီ .csv ဖိုင်ကို VS Code မှာ ဖွင့်နိုင်ပါတယ်။ အမြန်ကြည့်လိုက်တာနဲ့ အလွတ်နေရာများ၊ စာသားနှင့် ကိန်းဂဏန်းများရောနှောနေမှုကို တွေ့နိုင်ပါတယ်။ 'Package' ဆိုတဲ့ ထူးဆန်းတဲ့ ကော်လံမှာ 'sacks', 'bins' စတဲ့ အမျိုးမျိုးသော အချက်အလက်တွေ ရှိပါတယ်။ ဒေတာက တကယ်တော့ အတော်လေး ရှုပ်ထွေးနေပါတယ်။ [![ML for beginners - How to Analyze and Clean a Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML for beginners - How to Analyze and Clean a Dataset") > 🎥 အထက်ပါပုံကို နှိပ်ပြီး ဒီသင်ခန်းစာအတွက် ဒေတာကို ပြင်ဆင်နည်းကို ကြည့်ပါ။ တကယ်တော့ ML model တစ်ခုကို တည်ဆောက်ရန် အဆင်သင့်ဖြစ်နေသော ဒေတာကို ရရှိခြင်းသည် ရှားပါးသောအရာဖြစ်သည်။ ဒီသင်ခန်းစာမှာ သင် Python libraries များကို အသုံးပြု၍ raw dataset ကို ပြင်ဆင်နည်းကို လေ့လာပါမည်။ ဒါ့အပြင် ဒေတာကို ရှင်းလင်းဖော်ပြရန် နည်းလမ်းများကိုလည်း လေ့လာပါမည်။ ## Case study: 'ဖရုံသီးဈေးကွက်' ဒီ folder မှာ [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ဆိုတဲ့ .csv ဖိုင်ကို `data` folder ရဲ့ root မှာ တွေ့နိုင်ပါတယ်။ ဒီဖိုင်မှာ မြို့အလိုက် အုပ်စုဖွဲ့ထားတဲ့ ဖရုံသီးဈေးကွက်အကြောင်း 1757 လိုင်းရှိပါတယ်။ ဒါဟာ [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) မှ ထုတ်ယူထားတဲ့ raw data ဖြစ်ပြီး အမေရိကန် စိုက်ပျိုးရေးဌာနက ဖြန့်ဝေထားတာဖြစ်ပါတယ်။ ### ဒေတာကို ပြင်ဆင်ခြင်း ဒီဒေတာဟာ public domain မှာ ရှိပါတယ်။ ဒေတာကို USDA website မှာ မြို့အလိုက် ဖိုင်များအနေနဲ့ ဒေါင်းလုဒ်လုပ်နိုင်ပါတယ်။ အလွဲလွဲအချော်ချော် ဖိုင်များကို ရှောင်ရှားရန် မြို့အလိုက် ဒေတာအားလုံးကို spreadsheet တစ်ခုအဖြစ် ပေါင်းစည်းထားပြီး ဒေတာကို အနည်းငယ် ပြင်ဆင်ထားပါတယ်။ အခုတော့ ဒေတာကို နီးကပ်စွာ ကြည့်လိုက်ရအောင်။ ### ဖရုံသီးဒေတာ - စောစောကနေ သုံးသပ်ချက်များ ဒီဒေတာအကြောင်း သင်ဘာတွေ သတိထားမိပါသလဲ? စာသား၊ ကိန်းဂဏန်း၊ အလွတ်နေရာများနှင့် ထူးဆန်းတဲ့ အချက်အလက်များ ရောနှောနေမှုကို သင်ကြည့်ပြီးသားဖြစ်ပါတယ်။ Regression နည်းလမ်းကို အသုံးပြု၍ ဒီဒေတာကို ဘယ်လိုမေးခွန်းထုတ်နိုင်မလဲ? "တစ်လအတွင်းရောင်းချသော ဖရုံသီးတစ်လုံး၏ဈေးနှုန်းကို ခန့်မှန်းပါ" ဆိုတဲ့ မေးခွန်းကို မေးနိုင်ပါတယ်။ ဒေတာကို ပြန်ကြည့်လိုက်ရင် ဒီ task အတွက် လိုအပ်သော data structure ကို ဖန်တီးရန် အချို့ပြောင်းလဲမှုများ လိုအပ်ပါသည်။ ## လေ့ကျင့်ခန်း - ဖရုံသီးဒေတာကို သုံးသပ်ခြင်း [Pandas](https://pandas.pydata.org/) ကို အသုံးပြုပါ။ (Pandas ဆိုတာ `Python Data Analysis` ကို ရည်ညွှန်းပါတယ်) ဒေတာကို အဆင်ပြေစွာ ပြင်ဆင်ရန် အထူးအသုံးဝင်တဲ့ tool ဖြစ်ပါတယ်။ ### ပထမဦးဆုံး၊ နေ့စွဲပျောက်နေမှုကို စစ်ဆေးပါ သင်အရင်ဆုံး နေ့စွဲပျောက်နေမှုကို စစ်ဆေးရန် လိုအပ်ပါမည်: 1. နေ့စွဲများကို လအဖြစ် ပြောင်းပါ (ဒီဟာ US dates ဖြစ်တဲ့အတွက် format က `MM/DD/YYYY` ဖြစ်ပါတယ်)။ 2. လကို အသစ်သော ကော်လံတစ်ခုထဲမှာ ထုတ်ယူပါ။ _notebook.ipynb_ ဖိုင်ကို Visual Studio Code မှာ ဖွင့်ပြီး spreadsheet ကို Pandas dataframe အသစ်တစ်ခုထဲ import လုပ်ပါ။ 1. `head()` function ကို အသုံးပြု၍ ပထမ ၅ ရွေ့ကို ကြည့်ပါ။ ```python import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head() ``` ✅ နောက်ဆုံး ၅ ရွေ့ကို ကြည့်ရန် ဘယ် function ကို အသုံးပြုမလဲ? 1. လက်ရှိ dataframe မှာ ပျောက်နေသော ဒေတာရှိမရှိ စစ်ဆေးပါ: ```python pumpkins.isnull().sum() ``` ပျောက်နေသော ဒေတာရှိပါတယ်၊ ဒါပေမယ့် ဒီ task အတွက် အရေးမကြီးလို့ ဖြစ်နိုင်ပါတယ်။ 1. သင့် dataframe ကို အလုပ်လုပ်ရန် ပိုမိုလွယ်ကူစေရန် `loc` function ကို အသုံးပြု၍ လိုအပ်သော ကော်လံများကိုသာ ရွေးပါ။ `:` ဆိုတဲ့ expression က "အလုံးစုံသော ရွေ့များ" ကို ရည်ညွှန်းပါတယ်။ ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select] ``` ### ဒုတိယ၊ ဖရုံသီး၏ ပျမ်းမျှဈေးနှုန်းကို ဆုံးဖြတ်ပါ ဖရုံသီးတစ်လုံး၏ ပျမ်းမျှဈေးနှုန်းကို ဆုံးဖြတ်ရန် ဘယ်ကော်လံများကို ရွေးမလဲ? အကြံပြုချက် - သင့်အတွက် ၃ ကော်လံလိုအပ်ပါမည်။ ဖြေရှင်းချက် - `Low Price` နှင့် `High Price` ကော်လံများ၏ ပျမ်းမျှကို ရယူပြီး Price column အသစ်ကို ဖြည့်ပါ၊ နေ့စွဲကော်လံကို လသာသာ ပြောင်းပါ။ အထက်ပါစစ်ဆေးမှုအရ၊ နေ့စွဲများနှင့်ဈေးနှုန်းများအတွက် ပျောက်နေသော ဒေတာမရှိပါ။ 1. ပျမ်းမျှကိုတွက်ရန် အောက်ပါ code ကို ထည့်ပါ: ```python price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month ``` ✅ `print(month)` ကို အသုံးပြု၍ သင်စစ်ဆေးလိုသော ဒေတာကို print လုပ်နိုင်ပါတယ်။ 2. ပြောင်းလဲထားသော ဒေတာကို Pandas dataframe အသစ်တစ်ခုထဲ copy လုပ်ပါ: ```python new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) ``` သင့် dataframe ကို print လုပ်ပါက သင် regression model အသစ်တစ်ခုတည်ဆောက်ရန် သန့်ရှင်းပြီး tidy ဖြစ်သော dataset ကို တွေ့ပါမည်။ ### ဒါပေမယ့်! ဒီမှာ ထူးဆန်းတဲ့အရာတစ်ခုရှိပါတယ် `Package` ကော်လံကို ကြည့်ပါက ဖရုံသီးများကို အမျိုးမျိုးသော configuration များဖြင့် ရောင်းချထားသည်ကို တွေ့နိုင်ပါတယ်။ တချို့ကို '1 1/9 bushel' အတိုင်းရောင်းပြီး တချို့ကို '1/2 bushel' အတိုင်းရောင်းထားပါတယ်၊ တချို့ကို တစ်လုံးချင်း၊ တချို့ကို ပေါင်ချင်း၊ တချို့ကို အကျယ်အဝန်းအမျိုးမျိုးရှိသော box ใหญ่များဖြင့် ရောင်းထားပါတယ်။ > ဖရုံသီးများကို တိကျစွာချိန်ဆမရလွယ်ကူပါ မူရင်းဒေတာကို စူးစမ်းကြည့်ပါက `Unit of Sale` က 'EACH' သို့မဟုတ် 'PER BIN' ဖြစ်သောအခါ `Package` အမျိုးအစားသည် inch, bin, သို့မဟုတ် 'each' ဖြစ်သည်ကို တွေ့နိုင်ပါတယ်။ ဖရုံသီးများကို တိကျစွာချိန်ဆမရလွယ်ကူသောကြောင့် `Package` ကော်လံတွင် 'bushel' စာသားပါသော ဖရုံသီးများကိုသာ ရွေးပါ။ 1. .csv import အစပိုင်းတွင် filter တစ်ခု ထည့်ပါ: ```python pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] ``` ဒေတာကို print လုပ်ပါက သင် bushel ဖြင့် ရောင်းချသော ဖရုံသီး 415 ရွေ့ခန့်သာ ရရှိနေသည်ကို တွေ့နိုင်ပါမည်။ ### ဒါပေမယ့်! လုပ်စရာတစ်ခုကျန်နေပါတယ် Bushel အရေအတွက်သည် row တစ်ခုချင်းစီအလိုက် ကွဲပြားနေသည်ကို သတိထားမိပါသလား? သင် bushel တစ်ခုအတိုင်းဈေးနှုန်းကို ပြသရန် ဈေးနှုန်းကို normalize လုပ်ရန် လိုအပ်ပါသည်။ 1. new_pumpkins dataframe ဖန်တီးသော block အောက်တွင် အောက်ပါ code ကို ထည့်ပါ: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) ``` ✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) အဆိုအရ bushel ၏ အလေးချိန်သည် ထုတ်ကုန်အမျိုးအစားပေါ်မူတည်ပြီး ကွဲပြားပါသည်။ "ဥပမာအားဖြင့် တမာတီဖရုံသီး bushel တစ်ခုသည် 56 ပေါင်အလေးချိန်ရှိသင့်သည်... အရွက်များနှင့် အပင်များသည် ပိုမိုနေရာယူပြီး အလေးချိန်နည်းပါသည်၊ ထို့ကြောင့် spinach bushel တစ်ခုသည် 20 ပေါင်သာရှိသည်။" ဒါဟာ အတော်ရှုပ်ထွေးပါတယ်! Bushel-to-pound conversion ကို မလုပ်တော့ပါ၊ bushel အတိုင်းဈေးနှုန်းကိုသာ ပြသပါ။ Bushel ၏ သဘာဝကို နားလည်ရန် အရေးကြီးကြောင်းကို ဒီဖရုံသီး bushel များကို လေ့လာခြင်းမှ သက်သေပြနိုင်ပါတယ်။ အခုတော့ bushel အတိုင်း standardized ဖြစ်သောဈေးနှုန်းကို သုံးသပ်နိုင်ပါပြီ။ ဒေတာကို print လုပ်ပါက သင် standardized ဖြစ်သော ဒေတာကို တွေ့နိုင်ပါမည်။ ✅ Half-bushel ဖြင့် ရောင်းချသော ဖရုံသီးများသည် အတော်လေးဈေးကြီးနေသည်ကို သတိထားမိပါသလား? ဘာကြောင့်ဖြစ်နိုင်မလဲ? အကြံပြုချက် - သေးငယ်သော ဖရုံသီးများသည် ကြီးမားသော ဖရုံသီးများထက် ပိုမိုဈေးကြီးပါသည်၊ အကြောင်းကတော့ တစ် bushel အတွင်း သေးငယ်သော ဖရုံသီးများသည် အလုံးအရေအတွက်ပိုများပြီး ကြီးမားသော ဖရုံသီးတစ်လုံး၏ အလွတ်နေရာများကို ယူထားသောကြောင့် ဖြစ်နိုင်ပါသည်။ ## Visualization Strategies Data Scientist တစ်ဦး၏ အလုပ်တစ်ခုမှာ သူတို့အလုပ်လုပ်နေသော ဒေတာ၏ အရည်အသွေးနှင့် သဘာဝကို ဖော်ပြရန် ဖြစ်သည်။ ဒေတာ၏ အမျိုးမျိုးသော aspect များကို ဖော်ပြသော interesting visualizations, plots, graphs, နှင့် charts များကို ဖန်တီးခြင်းဖြင့် ဒေတာ၏ ဆက်နွယ်မှုများနှင့် ရှာဖွေရန်ခက်ခဲသော အပိုင်းများကို ရှင်းလင်းဖော်ပြနိုင်သည်။ [![ML for beginners - How to Visualize Data with Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML for beginners - How to Visualize Data with Matplotlib") > 🎥 အထက်ပါပုံကို နှိပ်ပြီး ဒီသင်ခန်းစာအတွက် ဒေတာကို ရှင်းလင်းဖော်ပြနည်းကို ကြည့်ပါ။ Visualizations များသည် ML technique အတွက် သင့်လျော်သောနည်းလမ်းကို ဆုံးဖြတ်ရန်လည်း အထောက်အကူပြုနိုင်သည်။ Scatterplot တစ်ခုသည် လိုင်းတစ်ခုလိုမျိုးဖြစ်နေသည်ကို တွေ့ပါက ဒေတာသည် linear regression exercise အတွက် သင့်လျော်သည်ကို ပြသနိုင်သည်။ Jupyter notebooks တွင် အလုပ်လုပ်ရန် သင့်လျော်သော data visualization library တစ်ခုမှာ [Matplotlib](https://matplotlib.org/) ဖြစ်သည် (သင်မကြာသေးမီက သင်ခန်းစာတွင်လည်း Matplotlib ကို တွေ့ခဲ့ပါသည်)။ > [ဒီ tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) တွင် data visualization ကို ပိုမိုလေ့လာပါ။ ## လေ့ကျင့်ခန်း - Matplotlib ကို စမ်းသပ်ခြင်း သင်ဖန်တီးထားသော dataframe အသစ်ကို ပြသရန် အခြေခံ plot များကို ဖန်တီးကြည့်ပါ။ အခြေခံ line plot တစ်ခုက ဘာကို ပြသမလဲ? 1. ဖိုင်၏ အပေါ်ပိုင်း Pandas import အောက်တွင် Matplotlib ကို import လုပ်ပါ: ```python import matplotlib.pyplot as plt ``` 1. notebook အားလုံးကို ပြန်လည် run လုပ်ပါ။ 1. notebook အောက်ဆုံးတွင် box အဖြစ် ဒေတာကို plot လုပ်ရန် cell တစ်ခု ထည့်ပါ: ```python price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show() ``` ![Scatterplot showing price to month relationship](../../../../2-Regression/2-Data/images/scatterplot.png) ဒီ plot သုံးစွဲရန် အသုံးဝင်ပါသလား? ဘာအကြောင်းကြောင့် အံ့ဩမိပါသလဲ? ဒါဟာ အသုံးဝင်တဲ့ plot မဟုတ်ပါဘူး၊ ဒါက သင့်ဒေတာကို တစ်လအတွင်း point များအဖြစ် ပြသထားတာသာ ဖြစ်ပါတယ်။ ### အသုံးဝင်အောင်လုပ်ပါ Charts များကို အသုံးဝင်အောင်လုပ်ရန် ဒေတာကို အုပ်စုဖွဲ့ရန် လိုအပ်ပါသည်။ ဒေတာကို အုပ်စုဖွဲ့ပြီး y axis တွင် လများကို ပြသပြီး ဒေတာသည် distribution ကို ပြသသော plot တစ်ခုကို ဖန်တီးကြည့်ပါ။ 1. Grouped bar chart ဖန်တီးရန် cell တစ်ခု ထည့်ပါ: ```python new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price") ``` ![Bar chart showing price to month relationship](../../../../2-Regression/2-Data/images/barchart.png) ဒါဟာ ပိုမိုအသုံးဝင်သော data visualization ဖြစ်ပါတယ်! ဖရုံသီးများ၏ အမြင့်ဆုံးဈေးနှုန်းသည် စက်တင်ဘာနှင့် အောက်တိုဘာတွင် ဖြစ်သည်ကို ပြသနေသည်။ ဒါဟာ သင့်မျှော်လင့်ချက်နှင့် ကိုက်ညီပါသလား? ဘာကြောင့်/ဘာကြောင့်မဟုတ်ပါလဲ? --- ## 🚀Challenge Matplotlib မှ ပေးသော visualization အမျိုးအစားများကို စူးစမ်းပါ။ Regression problems အတွက် သင့်လျော်သော အမျိုးအစားများက ဘာတွေလဲ? ## [Post-lecture quiz](https://ff-quizzes.netlify --- **ဝက်ဘ်ဆိုက်မှတ်ချက်**: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှန်ကန်မှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက်ဘာသာပြန်ဆိုမှုများတွင် အမှားများ သို့မဟုတ် မတိကျမှုများ ပါဝင်နိုင်သည်ကို ကျေးဇူးပြု၍ သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတည်သော ရင်းမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူကူးဘာသာပြန်ဝန်ဆောင်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်ကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော နားလည်မှုမှားများ သို့မဟုတ် အဓိပ္ပာယ်မှားများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။