{ "nbformat": 4, "nbformat_minor": 2, "metadata": { "colab": { "name": "lesson_2-R.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true }, "kernelspec": { "name": "ir", "display_name": "R" }, "language_info": { "name": "R" }, "coopTranslator": { "original_hash": "f3c335f9940cfd76528b3ef918b9b342", "translation_date": "2025-09-06T11:56:07+00:00", "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", "language_code": "my" } }, "cells": [ { "cell_type": "markdown", "source": [ "# ရှုထောင့်မော်ဒယ်တည်ဆောက်ခြင်း - ဒေတာကို ပြင်ဆင်ပြီး ရှုထောင့်ဖော်ပြခြင်း\n", "\n", "## **Linear Regression for Pumpkins - အတန်း ၂**\n", "#### မိတ်ဆက်\n", "\n", "Tidymodels နဲ့ Tidyverse ကို သုံးပြီး machine learning မော်ဒယ်တည်ဆောက်ခြင်းကို စတင်လုပ်ဆောင်ဖို့ လိုအပ်တဲ့ tools တွေကို သင်ပြင်ဆင်ပြီးသားဖြစ်တဲ့အခါ၊ သင့်ဒေတာကို အကောင်းဆုံးအသုံးချနိုင်ဖို့ အရေးကြီးတဲ့မေးခွန်းတွေကို မေးဖို့ အဆင်သင့်ဖြစ်နေပါပြီ။ ဒေတာနဲ့အလုပ်လုပ်ပြီး ML ဖြေရှင်းနည်းတွေကို အသုံးချတဲ့အခါ၊ သင့်ဒေတာရဲ့ potentials ကို အကောင်းဆုံးဖွင့်လှစ်နိုင်ဖို့ မေးခွန်းကို မှန်မှန်မေးနိုင်ဖို့ အရေးကြီးပါတယ်။\n", "\n", "ဒီအတန်းမှာ သင်လေ့လာရမယ့်အရာတွေကတော့ -\n", "\n", "- မော်ဒယ်တည်ဆောက်ဖို့ ဒေတာကို ပြင်ဆင်နည်း။\n", "\n", "- `ggplot2` ကို သုံးပြီး ဒေတာကို ရှုထောင့်ဖော်ပြနည်း။\n", "\n", "သင်လိုချင်တဲ့အဖြေကို ရရှိဖို့ မေးခွန်းက အရေးကြီးပါတယ်။ ML algorithm အမျိုးအစားကို သင်ရွေးချယ်ရမယ့်အခါ၊ အဖြေရဲ့အရည်အသွေးက သင့်ဒေတာရဲ့ သဘာဝပေါ်မူတည်ပါတယ်။\n", "\n", "ဒီအရာတွေကို လက်တွေ့လေ့ကျင့်မှုနဲ့အတူ လေ့လာကြည့်ရအောင်။\n", "\n", "

\n", " \n", "

ပန်းချီရေးဆွဲသူ @allison_horst
\n", "\n", "\n", "\n" ], "metadata": { "id": "Pg5aexcOPqAZ" } }, { "cell_type": "markdown", "source": [ "## 1. ဖရုံသီးဒေတာကို တင်သွင်းခြင်းနှင့် Tidyverse ကို အသုံးပြုခြင်း\n", "\n", "ဒီသင်ခန်းစာကို အပိုင်းပိုင်းခွဲပြီး လေ့လာရန် အောက်ပါ packages များလိုအပ်ပါမည်-\n", "\n", "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) သည် [R packages များစုစည်းမှု](https://www.tidyverse.org/packages) ဖြစ်ပြီး ဒေတာသိပ္ပံကို ပိုမိုမြန်ဆန်စေပြီး လွယ်ကူစေသည့်အပြင် ပျော်ရွှင်စေပါသည်။\n", "\n", "သင်သည် အောက်ပါအတိုင်း ထည့်သွင်းနိုင်ပါသည်-\n", "\n", "`install.packages(c(\"tidyverse\"))`\n", "\n", "အောက်ပါ script သည် သင်ဤ module ကို ပြီးမြောက်စွာ လုပ်ဆောင်ရန် လိုအပ်သော packages များရှိမရှိ စစ်ဆေးပြီး မရှိသေးပါက ထည့်သွင်းပေးပါမည်-\n" ], "metadata": { "id": "dc5WhyVdXAjR" } }, { "cell_type": "code", "execution_count": null, "source": [ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", "pacman::p_load(tidyverse)" ], "outputs": [], "metadata": { "id": "GqPYUZgfXOBt" } }, { "cell_type": "markdown", "source": [ "အခုတော့ ဒီသင်ခန်းစာအတွက် ပံ့ပိုးထားတဲ့ [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ကို ဖိုင်တွေကို ဖွင့်ပြီး data တွေကို load လုပ်ကြရအောင်!\n" ], "metadata": { "id": "kvjDTPDSXRr2" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Load the core Tidyverse packages\n", "library(tidyverse)\n", "\n", "# Import the pumpkins data\n", "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n", "\n", "\n", "# Get a glimpse and dimensions of the data\n", "glimpse(pumpkins)\n", "\n", "\n", "# Print the first 50 rows of the data set\n", "pumpkins %>% \n", " slice_head(n =50)" ], "outputs": [], "metadata": { "id": "VMri-t2zXqgD" } }, { "cell_type": "markdown", "source": [ "`glimpse()` ကို အမြန်ကြည့်လိုက်တာနဲ့ အချို့နေရာမှာ အလွတ်တွေရှိပြီး စာသား (`chr`) နဲ့ ကိန်းဂဏန်း (`dbl`) တွေ ရောနှောနေတယ်ဆိုတာ မြင်ရတယ်။ `Date` က character အမျိုးအစားဖြစ်ပြီး `Package` ဆိုတဲ့ ထူးဆန်းတဲ့ ကော်လံတစ်ခုလည်းရှိတယ်။ အဲဒီမှာတော့ `sacks`, `bins` နဲ့ အခြားတန်ဖိုးတွေ ရောနှောနေတယ်။ အချက်အလက်တွေက တကယ်ပဲ ရှုပ်ထွေးနေတယ် 😤။\n", "\n", "တကယ်တော့ ML မော်ဒယ်တစ်ခုကို တိုက်ရိုက်ဖန်တီးဖို့ အဆင်သင့်ဖြစ်နေတဲ့ dataset ကို ရရှိတာဟာ မကြာခဏဖြစ်တာမဟုတ်ပါဘူး။ ဒါပေမယ့် စိတ်မပူပါနဲ့၊ ဒီသင်ခန်းစာမှာ R libraries ပုံမှန်တွေကို အသုံးပြုပြီး raw dataset ကို ပြင်ဆင်ပုံကို သင်ယူရမှာဖြစ်ပါတယ် 🧑‍🔧။ အချက်အလက်တွေကို visualization လုပ်ပုံနည်းလမ်းမျိုးစုံကိုလည်း သင်ယူရမှာဖြစ်ပါတယ် 📈📊။\n", "
\n", "\n", "> အမှတ်ရစေချင်တာ: pipe operator (`%>%`) က object ကို function သို့မဟုတ် call expression ထဲကို ရှေ့ဆက်ပေးပြီး logical sequence အတိုင်း လုပ်ဆောင်ပေးပါတယ်။ pipe operator ကို သင့် code မှာ \"ပြီးတော့\" လို့ ပြောနည်းနဲ့ တူတယ်လို့ စဉ်းစားနိုင်ပါတယ်။\n" ], "metadata": { "id": "REWcIv9yX29v" } }, { "cell_type": "markdown", "source": [ "## 2. မရှိသည့် ဒေတာများကို စစ်ဆေးပါ\n", "\n", "ဒေတာသိပ္ပံပညာရှင်များအနေဖြင့် အများဆုံး ကြုံရသော ပြဿနာတစ်ခုမှာ မပြီးစီးသည့် ဒေတာများ သို့မဟုတ် မရှိသည့် ဒေတာများကို ကိုင်တွယ်ရခြင်းဖြစ်သည်။ R မှာ မရှိသည့် ဒေတာများ သို့မဟုတ် မသိသေးသော အချက်အလက်များကို `NA` (Not Available) ဆိုသော အထူးတန်ဖိုးဖြင့် ကိုယ်စားပြုထားသည်။\n", "\n", "ဒါဆိုရင် ဒေတာဖရိမ်မှာ မရှိသည့် ဒေတာများ ပါဝင်နေသည်ကို ဘယ်လို သိနိုင်မလဲ?\n", "
\n", "- တိုက်ရိုက်နည်းလမ်းတစ်ခုကတော့ `anyNA` ဆိုသော base R function ကို အသုံးပြုခြင်းဖြစ်ပြီး၊ ဒါဟာ `TRUE` သို့မဟုတ် `FALSE` ဆိုသော logical objects ကို ပြန်ပေးသည်။\n" ], "metadata": { "id": "Zxfb3AM5YbUe" } }, { "cell_type": "code", "execution_count": null, "source": [ "pumpkins %>% \n", " anyNA()" ], "outputs": [], "metadata": { "id": "G--DQutAYltj" } }, { "cell_type": "markdown", "source": [ "အိုကေ၊ ဒေတာတစ်ချို့ပျောက်နေသလိုပဲ! ဒါကစတင်ဖို့ကောင်းတဲ့နေရာတစ်ခုပါပဲ။\n", "\n", "- နောက်ထပ်နည်းလမ်းတစ်ခုကတော့ `is.na()` function ကိုသုံးတာဖြစ်ပြီး၊ ဒါကတစ်ခုချင်းစီသော column element တွေထဲမှာ ဘယ်ဟာတွေမရှိဘူးဆိုတာကို logical `TRUE` နဲ့ပြသပေးနိုင်ပါတယ်။\n" ], "metadata": { "id": "mU-7-SB6YokF" } }, { "cell_type": "code", "execution_count": null, "source": [ "pumpkins %>% \n", " is.na() %>% \n", " head(n = 7)" ], "outputs": [], "metadata": { "id": "W-DxDOR4YxSW" } }, { "cell_type": "markdown", "source": [ "အကြီးမားတဲ့ data frame တစ်ခုကို handle လုပ်ရတဲ့အခါမှာ၊ အတန်းတွေ၊ ကော်လံတွေကို တစ်ခုချင်းစီ individually ပြန်လည်သုံးသပ်ဖို့က အချိန်ကုန်ပြီး အလွန်မထိရောက်နိုင်ပါဘူး😴။\n", "\n", "- ပိုမိုလွယ်ကူပြီး အဓိကကျတဲ့နည်းလမ်းတစ်ခုကတော့ ကော်လံတစ်ခုချင်းစီအတွက် မရှိသေးတဲ့တန်ဖိုးတွေ (missing values) ရဲ့ စုစုပေါင်းကိုတွက်ချက်ဖို့ဖြစ်ပါတယ်:\n" ], "metadata": { "id": "xUWxipKYY0o7" } }, { "cell_type": "code", "execution_count": null, "source": [ "pumpkins %>% \n", " is.na() %>% \n", " colSums()" ], "outputs": [], "metadata": { "id": "ZRBWV6P9ZArL" } }, { "cell_type": "markdown", "source": [ "အရမ်းကောင်းတဲ့ package တွေ၊ function တွေကိုပေါင်းစပ်ထားတဲ့အပြင် R မှာ documentation ကလည်းအရမ်းကောင်းပါတယ်။ ဥပမာအားဖြင့် `help(colSums)` သို့မဟုတ် `?colSums` ကိုသုံးပြီး function အကြောင်းပိုမိုသိရှိနိုင်ပါတယ်။\n" ], "metadata": { "id": "9gv-crB6ZD1Y" } }, { "cell_type": "markdown", "source": [ "## 3. Dplyr: ဒေတာကို စီမံခန့်ခွဲရန် အဘိဓာန်\n", "\n", "

\n", " \n", "

ပန်းချီကား - @allison_horst
\n", "\n", "\n", "\n" ], "metadata": { "id": "o4jLY5-VZO2C" } }, { "cell_type": "markdown", "source": [ "[`dplyr`](https://dplyr.tidyverse.org/) သည် Tidyverse အတွင်းရှိ package တစ်ခုဖြစ်ပြီး ဒေတာကို စီမံခန့်ခွဲရန်အတွက် သတ်မှတ်ထားသော လုပ်ဆောင်ချက်များကို ပေးစွမ်းသော grammar တစ်ခုဖြစ်သည်။ ၎င်းသည် ဒေတာစီမံခန့်ခွဲမှုဆိုင်ရာ အခက်အခဲများကို ဖြေရှင်းရန် အထောက်အကူပြုသော လုပ်ဆောင်ချက်များကို တစ်စည်းတစ်လုံးအဖြစ် ပေးစွမ်းသည်။ ဒီအပိုင်းမှာ dplyr ရဲ့ လုပ်ဆောင်ချက်များကို လေ့လာကြမယ်! \n", "
\n" ], "metadata": { "id": "i5o33MQBZWWw" } }, { "cell_type": "markdown", "source": [ "#### dplyr::select()\n", "\n", "`select()` ဟာ `dplyr` package ထဲမှာရှိတဲ့ function တစ်ခုဖြစ်ပြီး သင့်အတွက်လိုအပ်တဲ့ column တွေကို ရွေးချယ်ထားရန် (သို့မဟုတ်) ဖယ်ရှားရန် ကူညီပေးပါတယ်။\n", "\n", "သင့် data frame ကို ပိုမိုလွယ်ကူစွာ အသုံးပြုနိုင်အောင် လိုအပ်တဲ့ column တွေကိုသာ ထားရှိပြီး မလိုအပ်တဲ့ column တွေကို ဖယ်ရှားရန် `select()` ကို အသုံးပြုနိုင်ပါတယ်။\n", "\n", "ဥပမာအားဖြင့် ဒီလေ့ကျင့်မှုမှာ ကျွန်တော်တို့ရဲ့ analysis အတွက် `Package`, `Low Price`, `High Price` နဲ့ `Date` column တွေကိုသာ အသုံးပြုမယ်။ အဲ့ဒီ column တွေကို ရွေးချယ်ကြည့်ရအောင်။\n" ], "metadata": { "id": "x3VGMAGBZiUr" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Select desired columns\n", "pumpkins <- pumpkins %>% \n", " select(Package, `Low Price`, `High Price`, Date)\n", "\n", "\n", "# Print data set\n", "pumpkins %>% \n", " slice_head(n = 5)" ], "outputs": [], "metadata": { "id": "F_FgxQnVZnM0" } }, { "cell_type": "markdown", "source": [ "#### dplyr::mutate()\n", "\n", "`mutate()` ဟာ `dplyr` package ထဲမှာရှိတဲ့ function တစ်ခုဖြစ်ပြီး၊ အသစ်သော column များကို ဖန်တီးရန် သို့မဟုတ် ရှိပြီးသား column များကို ပြင်ဆင်ရန် အသုံးပြုနိုင်ပါတယ်၊ အဲဒီအချိန်မှာ ရှိပြီးသား column များကိုလည်း ထိန်းသိမ်းထားနိုင်ပါတယ်။\n", "\n", "`mutate` ရဲ့ အခြေခံဖွဲ့စည်းပုံကတော့ -\n", "\n", "`data %>% mutate(new_column_name = what_it_contains)`\n", "\n", "အခု `mutate` ကို `Date` column ကို အသုံးပြုပြီး လေ့ကျင့်ကြည့်ရအောင်။ အောက်ပါအဆင့်များကို လုပ်ဆောင်ပါမယ် -\n", "\n", "1. ရက်စွဲများ (လက်ရှိမှာ character အမျိုးအစားဖြစ်နေတဲ့) ကို လ (month) ပုံစံအဖြစ် ပြောင်းလဲပါ (ဒါတွေက အမေရိကန်ရက်စွဲပုံစံဖြစ်ပြီး၊ ပုံစံက `MM/DD/YYYY` ဖြစ်ပါတယ်)။\n", "\n", "2. ရက်စွဲများထဲက လ (month) ကို အသစ်သော column တစ်ခုထဲမှာ ထုတ်ယူထည့်သွင်းပါ။\n", "\n", "R မှာ [lubridate](https://lubridate.tidyverse.org/) package က Date-time data တွေနဲ့ အလုပ်လုပ်ဖို့ ပိုမိုလွယ်ကူစေပါတယ်။ ဒါကြောင့် `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` တို့ကို အသုံးပြုပြီး အထက်ပါ ရည်မှန်းချက်များကို ပြည့်မှီအောင် လုပ်ဆောင်ကြည့်ရအောင်။ Date column ကို နောက်ထပ်လုပ်ဆောင်မှုများမှာ မလိုအပ်တော့တဲ့အတွက် ဖယ်ရှားပစ်နိုင်ပါတယ်။\n" ], "metadata": { "id": "2KKo0Ed9Z1VB" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Load lubridate\n", "library(lubridate)\n", "\n", "pumpkins <- pumpkins %>% \n", " # Convert the Date column to a date object\n", " mutate(Date = mdy(Date)) %>% \n", " # Extract month from Date\n", " mutate(Month = month(Date)) %>% \n", " # Drop Date column\n", " select(-Date)\n", "\n", "# View the first few rows\n", "pumpkins %>% \n", " slice_head(n = 7)" ], "outputs": [], "metadata": { "id": "5joszIVSZ6xe" } }, { "cell_type": "markdown", "source": [ "ဝူးဟူး! 🤩\n", "\n", "အခုတော့ `Price` ဆိုတဲ့ column အသစ်တစ်ခုဖန်တီးကြမယ်၊ ဒါဟာဖရုံသီးရဲ့ပျမ်းမျှဈေးနှုန်းကိုဖော်ပြပေးမှာဖြစ်ပါတယ်။ အခုတော့ `Low Price` နဲ့ `High Price` column တွေရဲ့ပျမ်းမျှကိုယူပြီး Price column အသစ်ကိုဖြည့်စွက်လိုက်ပါ။ \n" ], "metadata": { "id": "nIgLjNMCZ-6Y" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Create a new column Price\n", "pumpkins <- pumpkins %>% \n", " mutate(Price = (`Low Price` + `High Price`)/2)\n", "\n", "# View the first few rows of the data\n", "pumpkins %>% \n", " slice_head(n = 5)" ], "outputs": [], "metadata": { "id": "Zo0BsqqtaJw2" } }, { "cell_type": "markdown", "source": [ "ဟုတ်ကဲ့!💪\n", "\n", "\"ဒါပေမယ့် ခဏစောင့်ပါ!\" `View(pumpkins)` နဲ့ အချက်အလက်အစုံကို လျှောက်ကြည့်ပြီးရင် သင်ပြောမယ်၊ \"ဒီမှာ တစ်ခုခု ထူးထူးဆန်းဆန်းရှိတယ်နော်!\"🤔\n", "\n", "`Package` ကော်လံကို ကြည့်မယ်ဆိုရင်၊ ဖရုံသီးတွေကို အမျိုးမျိုးသော ပုံစံတွေနဲ့ ရောင်းချထားတာကို တွေ့ရမယ်။ တချို့ကို `1 1/9 bushel` အတိုင်းအတာနဲ့ ရောင်းထားပြီး၊ တချို့ကို `1/2 bushel` အတိုင်းအတာနဲ့ ရောင်းထားတယ်၊ တချို့ကို ဖရုံသီးတစ်လုံးစီအလိုက်၊ တချို့ကို ပေါင်အလိုက်၊ တချို့ကိုတော့ အကျယ်အဝန်း မတူညီတဲ့ သေတ္တာကြီးတွေထဲမှာ ရောင်းထားတယ်။\n", "\n", "ဒါကို အတည်ပြုကြည့်ရအောင်:\n" ], "metadata": { "id": "p77WZr-9aQAR" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Verify the distinct observations in Package column\n", "pumpkins %>% \n", " distinct(Package)" ], "outputs": [], "metadata": { "id": "XISGfh0IaUy6" } }, { "cell_type": "markdown", "source": [ "အံ့သြဖွယ်!👏\n", "\n", "ဖရုံသီးတွေကို အမြဲတမ်းတိကျစွာ အလေးချိန်တိုင်းတာဖို့ ခက်ခဲနေသလိုပဲ၊ အဲဒါကြောင့် `Package` ကော်လံထဲမှာ *bushel* စာကြောင်းပါဝင်တဲ့ ဖရုံသီးတွေကိုသာ ရွေးချယ်ပြီး၊ ဒါကို `new_pumpkins` လို့ခေါ်တဲ့ data frame အသစ်တစ်ခုထဲမှာ ထည့်ကြည့်ရအောင်။ \n", "
\n" ], "metadata": { "id": "7sMjiVujaZxY" } }, { "cell_type": "markdown", "source": [ "#### dplyr::filter() နှင့် stringr::str_detect()\n", "\n", "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): သင့်ရဲ့အခြေအနေများကိုဖြည့်ဆည်းတဲ့ **အတန်းများ** ကိုသာပါဝင်တဲ့ ဒေတာအစုကို ဖန်တီးပေးသည်။ ဤကိစ္စတွင် `Package` ကော်လံထဲမှာ *bushel* စာသားပါဝင်တဲ့ pumpkins များကို ရွေးချယ်ပေးသည်။\n", "\n", "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): စာသားတစ်ခုထဲမှာ ပုံစံတစ်ခုရှိမရှိကို ရှာဖွေသည်။\n", "\n", "[`stringr`](https://github.com/tidyverse/stringr) ပက်ကေ့ချ်သည် စာသားနှင့်ဆိုင်သော လုပ်ဆောင်မှုများအတွက် ရိုးရှင်းသော function များကို ပေးသည်။\n" ], "metadata": { "id": "L8Qfcs92ageF" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Retain only pumpkins with \"bushel\"\n", "new_pumpkins <- pumpkins %>% \n", " filter(str_detect(Package, \"bushel\"))\n", "\n", "# Get the dimensions of the new data\n", "dim(new_pumpkins)\n", "\n", "# View a few rows of the new data\n", "new_pumpkins %>% \n", " slice_head(n = 5)" ], "outputs": [], "metadata": { "id": "hy_SGYREampd" } }, { "cell_type": "markdown", "source": [ "သင်မြင်နိုင်သည့်အတိုင်း၊ ကျွန်ုပ်တို့သည် သစ်ဖရုံသီးများကို တစ်လှည်းချင်းစီအလိုက် ၄၁၅ စာရင်းခန့်အထိ ကျဉ်းမြောင်းစွာ ရှာဖွေပြီးဖြစ်ပါသည်။🤩 \n", "
\n" ], "metadata": { "id": "VrDwF031avlR" } }, { "cell_type": "markdown", "source": [ "#### dplyr::case_when()\n", "\n", "**ဒါပေမယ့်! တစ်ခုထပ်လုပ်ရမယ့်အရာရှိနေသေးတယ်**\n", "\n", "သင်သတိထားမိပါသလား၊ တစ်တန်းစီမှာ bushel အရေအတွက်က မတူညီတာကို။ သင် bushel တစ်ခုအလိုက် စျေးနှုန်းကို ပြသနိုင်ဖို့၊ 1 1/9 သို့မဟုတ် 1/2 bushel အလိုက်မဟုတ်ဘဲ စျေးနှုန်းကို သင့်တင်ဖို့လိုပါတယ်။ စံပြုဖို့ သင့်တင်တွက်ချက်မှုအချို့လုပ်ရမယ်။\n", "\n", "[`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) function ကို သုံးပြီး Price column ကို အခြေအနေတစ်ချို့အပေါ် မူတည်ပြီး *ပြောင်းလဲ* သွားမယ်။ `case_when` က `if_else()` statement အများအပြားကို vectorise လုပ်နိုင်စေပါတယ်။\n" ], "metadata": { "id": "mLpw2jH4a0tx" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Convert the price if the Package contains fractional bushel values\n", "new_pumpkins <- new_pumpkins %>% \n", " mutate(Price = case_when(\n", " str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n", " str_detect(Package, \"1/2\") ~ Price/(1/2),\n", " TRUE ~ Price))\n", "\n", "# View the first few rows of the data\n", "new_pumpkins %>% \n", " slice_head(n = 30)" ], "outputs": [], "metadata": { "id": "P68kLVQmbM6I" } }, { "cell_type": "markdown", "source": [ "ယခုတွင် ကျွန်ုပ်တို့သည် တစ်ယူနစ်စီ၏ စျေးနှုန်းကို ၎င်းတို့၏ bushel အတိုင်းအတာအပေါ် အခြေခံ၍ ခွဲခြမ်းစိတ်ဖြာနိုင်ပါသည်။ သို့သော်လည်း သံပုရာ bushel များကို လေ့လာခြင်းသည် `သင့်ဒေတာ၏ သဘာဝကို နားလည်ရန်` အလွန် `အရေးကြီး` သည်ကို ပြသပေးပါသည်။\n", "\n", "> ✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) အဆိုအရ bushel ၏ အလေးချိန်သည် ထုတ်ကုန်အမျိုးအစားပေါ် မူတည်သည်၊ အကြောင်းမူမိ volume အတိုင်းအတာဖြစ်သည်။ \"ဥပမာအားဖြင့် ခရမ်းချဉ်သီး bushel တစ်ခုသည် ၅၆ ပေါင်အလေးချိန်ရှိရမည်... အရွက်များနှင့် အပင်များသည် နေရာများယူပြီး အလေးချိန်နည်းပါသည်၊ ထို့ကြောင့် spinach bushel တစ်ခုသည် ၂၀ ပေါင်သာရှိသည်။\" ၎င်းသည် အတော်လေး ရှုပ်ထွေးသည်! Bushel-to-pound ပြောင်းလဲမှုကို မလုပ်တော့ဘဲ bushel အတိုင်း စျေးနှုန်းထားကြစို့။ သို့သော်လည်း သံပုရာ bushel များကို လေ့လာခြင်းသည် သင့်ဒေတာ၏ သဘာဝကို နားလည်ရန် အလွန်အရေးကြီးသည်ကို ပြသပေးပါသည်။\n", ">\n", "> ✅ သင်သတိထားမိပါသလား၊ တစ်ဝက် bushel ဖြင့် ရောင်းချသော သံပုရာများသည် အလွန်စျေးကြီးသည်။ အဘယ်ကြောင့်ဆိုသည်ကို သင်ရှာဖွေနိုင်ပါသလား။ အကြံပြုချက် - သေးငယ်သော သံပုရာများသည် ကြီးမားသော သံပုရာများထက် စျေးကြီးသည်၊ အဓိကအားဖြင့် bushel တစ်ခုတွင် သံပုရာသေးများ အများကြီးပါဝင်နိုင်သည့်အတွက်၊ ကြီးမားသော hollow pie သံပုရာတစ်ခုကြောင့် အသုံးမကျသော နေရာများယူထားသည်။\n" ], "metadata": { "id": "pS2GNPagbSdb" } }, { "cell_type": "markdown", "source": [ "ယခုနောက်ဆုံးအနေနဲ့၊ စိတ်လှုပ်ရှားစရာအတွက် 💁‍♀️၊ Month ကော်လံကို Package ကော်လံမတိုင်မီ `ပထမ` အနေအထားသို့ ရွှေ့လိုက်ကြစို့။\n", "\n", "ကော်လံအနေအထားများကို ပြောင်းလဲရန် `dplyr::relocate()` ကို အသုံးပြုနိုင်ပါတယ်။\n" ], "metadata": { "id": "qql1SowfbdnP" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Create a new data frame new_pumpkins\n", "new_pumpkins <- new_pumpkins %>% \n", " relocate(Month, .before = Package)\n", "\n", "new_pumpkins %>% \n", " slice_head(n = 7)" ], "outputs": [], "metadata": { "id": "JJ1x6kw8bixF" } }, { "cell_type": "markdown", "source": [ "အလုပ်ကောင်းပါတယ်!👌 အခုတော့ သင့်မှာ သန့်ရှင်းပြီး တစ်ပြင်လုံးကျေတဲ့ ဒေတာစနစ်ရှိပြီး၊ သင့်ရဲ့ အသစ်သော regression မော်ဒယ်ကို တည်ဆောက်နိုင်ပါပြီ!\n" ], "metadata": { "id": "y8TJ0Za_bn5Y" } }, { "cell_type": "markdown", "source": [ "## 4. ggplot2 ဖြင့် ဒေတာကို ရှင်းလင်းဖော်ပြခြင်း\n", "\n", "

\n", " \n", "

Dasani Madipalli ၏ အင်ဖိုဂရပ်
\n", "\n", "\n", "\n", "\n", "ဒီလိုဆိုရိုးစကားတစ်ခုရှိပါတယ် -\n", "\n", "> \"ရိုးရှင်းတဲ့ဂရပ်တစ်ခုက ဒေတာအနုညာတစ်ဦးရဲ့ စိတ်ကို အခြားကိရိယာတစ်ခုထက် ပိုမိုသိမြင်စေတတ်တယ်။\" --- John Tukey\n", "\n", "ဒေတာသိပ္ပံပညာရှင်တစ်ဦးရဲ့ အလုပ်တစ်ခုက သူတို့လုပ်ကိုင်နေတဲ့ ဒေတာရဲ့ အရည်အသွေးနဲ့ သဘာဝကို ဖော်ပြပေးရတာဖြစ်ပါတယ်။ ဒါကိုလုပ်ဖို့အတွက် သူတို့က စိတ်ဝင်စားဖွယ် ဂရပ်များ၊ ပုံများ၊ နဲ့ ဇယားများကို ဖန်တီးတတ်ကြပါတယ်။ ဒါတွေက ဒေတာရဲ့ အခြားမမြင်နိုင်တဲ့ ဆက်စပ်မှုများနဲ့ ချို့တဲ့ချက်များကို မြင်သာစေတတ်ပါတယ်။\n", "\n", "အထူးသဖြင့် ဂရပ်ဖော်ပြမှုတွေက ဒေတာအတွက် သင့်တော်တဲ့ စက်လေ့လာနည်းလမ်းကို ရွေးချယ်ရာမှာလည်း အထောက်အကူဖြစ်တတ်ပါတယ်။ ဥပမာ - စက်ကွင်းပုံစံလိုက်နေတဲ့ scatterplot တစ်ခုက ဒေတာဟာ linear regression အတွက် သင့်တော်တယ်ဆိုတာ ပြသနိုင်ပါတယ်။\n", "\n", "R မှာ ဂရပ်ဖန်တီးဖို့ စနစ်အမျိုးမျိုးရှိပေမယ့် [`ggplot2`](https://ggplot2.tidyverse.org/index.html) က အလှပဆုံးနဲ့ အကောင်းဆုံး အသုံးချနိုင်တဲ့ စနစ်တစ်ခုဖြစ်ပါတယ်။ `ggplot2` က သီးခြားအစိတ်အပိုင်းတွေကို **ပေါင်းစပ်ဖန်တီးခြင်း** ဖြင့် ဂရပ်ဖန်တီးခွင့်ပြုပါတယ်။\n", "\n", "အခုတော့ Price နဲ့ Month ကော်လံတွေကို အသုံးပြုပြီး ရိုးရှင်းတဲ့ scatter plot တစ်ခုကို စတင်ဖန်တီးကြမယ်။\n", "\n", "ဒီအခါမှာတော့ [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html) ကို အသုံးပြုပြီး ဒေတာစနစ်နဲ့ အလှဆင်ပုံ (aesthetic mapping) ကို [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html) နဲ့ ပေးပြီးနောက်မှာ scatter plot အတွက် [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html) လိုတဲ့ layer တွေကို ထည့်ပေးရမှာ ဖြစ်ပါတယ်။\n" ], "metadata": { "id": "mYSH6-EtbvNa" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Set a theme for the plots\n", "theme_set(theme_light())\n", "\n", "# Create a scatter plot\n", "p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n", "p + geom_point()" ], "outputs": [], "metadata": { "id": "g2YjnGeOcLo4" } }, { "cell_type": "markdown", "source": [ "ဒီဟာ အသုံးဝင်တဲ့ ပုံကြမ်းလား 🤷? ဘာတွေက အံ့ဩစရာလို့ ထင်ရလဲ?\n", "\n", "ဒါဟာ အထူးသဖြင့် အသုံးဝင်တာမဟုတ်ပါဘူး၊ အကြောင်းကတော့ သတ်မှတ်ထားတဲ့ လတစ်လအတွင်းမှာ သင့်ဒေတာကို အချက်အလက်အနေနဲ့ ဖြန့်ကျက်ပြသပေးရုံသာ ဖြစ်ပါတယ်။\n", "
\n" ], "metadata": { "id": "Ml7SDCLQcPvE" } }, { "cell_type": "markdown", "source": [ "### **ဘယ်လိုအသုံးဝင်အောင်လုပ်မလဲ?**\n", "\n", "အချက်အလက်တွေကို အသုံးဝင်တဲ့အချက်အလက်အဖြစ် ပြသနိုင်ဖို့အတွက် အချက်အလက်တွေကို တစ်နည်းနည်းနဲ့ အုပ်စုဖွဲ့ဖို့လိုပါတယ်။ ဥပမာအားဖြင့် ကျွန်တော်တို့ရဲ့ အချက်အလက်မှာ တစ်လစီအတွက် ဖရုံသီးရဲ့ ပျမ်းမျှဈေးနှုန်းကို ရှာဖွေမယ်ဆိုရင် အချက်အလက်ရဲ့ အခြေခံပုံစံတွေကို ပိုမိုနားလည်နိုင်စေမှာဖြစ်ပါတယ်။ ဒီအရာက **dplyr** ရဲ့ အခြေခံအချက်တစ်ခုဆီကို ဦးတည်စေပါတယ်။\n", "\n", "#### `dplyr::group_by() %>% summarize()`\n", "\n", "R မှာ အုပ်စုဖွဲ့ပြီး စုစုပေါင်းတွက်ချက်မှုတွေကို လွယ်ကူစွာတွက်ချက်နိုင်ပါတယ်။\n", "\n", "`dplyr::group_by() %>% summarize()`\n", "\n", "- `dplyr::group_by()` က အချက်အလက်ရဲ့ အနုပညာအထောက်အထားကို အပြည့်အစုံ dataset ကနေ တစ်ခုချင်းစီအုပ်စု (ဥပမာ - တစ်လစီ) အဖြစ် ပြောင်းလဲပေးပါတယ်။\n", "\n", "- `dplyr::summarize()` က သင့်ရဲ့ အုပ်စုဖွဲ့မူအပြောင်းအလဲအတွက် တစ်ခုချင်းစီအတွက် အချက်အလက်တစ်ခုနှင့် သင်ဖော်ပြလိုတဲ့ စုစုပေါင်းတွက်ချက်မှုအချက်အလက်တစ်ခုကို အသစ်တစ်ခု data frame အဖြစ် ဖန်တီးပေးပါတယ်။\n", "\n", "ဥပမာအားဖြင့် `dplyr::group_by() %>% summarize()` ကို အသုံးပြုပြီး **Month** ကော်လံအပေါ် အခြေခံပြီး ဖရုံသီးတွေကို အုပ်စုဖွဲ့ပြီး **mean price** ကို တစ်လစီအတွက် ရှာဖွေနိုင်ပါတယ်။\n" ], "metadata": { "id": "jMakvJZIcVkh" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Find the average price of pumpkins per month\r\n", "new_pumpkins %>%\r\n", " group_by(Month) %>% \r\n", " summarise(mean_price = mean(Price))" ], "outputs": [], "metadata": { "id": "6kVSUa2Bcilf" } }, { "cell_type": "markdown", "source": [ "တိုတောင်းပြီး ရှင်းလင်းပါ!✨\n", "\n", "လများလိုမျိုး အမျိုးအစားအလိုက် အချက်အလက်များကို ဘားပုံစံဖြင့် ဖော်ပြခြင်းက ပိုမိုသင့်တော်ပါသည် 📊။ ဘားချတ်များဖော်ဆောင်ရန် `geom_bar()` နှင့် `geom_col()` ဟာ အရေးပါသော အလွှာများဖြစ်ပါတယ်။ `?geom_bar` ကို ကြည့်ပြီး အသေးစိတ်ကို သိရှိနိုင်ပါတယ်။\n", "\n", "အခုတစ်ခါ လုပ်ကြည့်ရအောင်!\n" ], "metadata": { "id": "Kds48GUBcj3W" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Find the average price of pumpkins per month then plot a bar chart\r\n", "new_pumpkins %>%\r\n", " group_by(Month) %>% \r\n", " summarise(mean_price = mean(Price)) %>% \r\n", " ggplot(aes(x = Month, y = mean_price)) +\r\n", " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n", " ylab(\"Pumpkin Price\")" ], "outputs": [], "metadata": { "id": "VNbU1S3BcrxO" } }, { "cell_type": "markdown", "source": [ "🤩🤩 ဒါက ပိုပြီး အသုံးဝင်တဲ့ ဒေတာမြင်ကွင်းဖော်ပြမှုပါ! ဒီအချက်အလက်က ဖော်ပြနေသလို သကြားဖရုံရဲ့ အမြင့်ဆုံးစျေးနှုန်းက စက်တင်ဘာနဲ့ အောက်တိုဘာလတွေမှာ ဖြစ်တတ်ပါတယ်။ ဒါဟာ သင့်မျှော်မှန်းချက်နဲ့ ကိုက်ညီပါသလား? ဘာကြောင့် ကိုက်ညီသလဲ၊ ဘာကြောင့် မကိုက်ညီသလဲ?\n", "\n", "ဒုတိယသင်ခန်းစာကို ပြီးမြောက်အောင် လုပ်ဆောင်နိုင်ခဲ့တဲ့အတွက် ဂုဏ်ယူပါတယ် 👏! သင့်ဒေတာကို မော်ဒယ်တည်ဆောက်ဖို့ ပြင်ဆင်ပြီး၊ မြင်ကွင်းဖော်ပြမှုတွေကို အသုံးပြုပြီး ထပ်မံသော အချက်အလက်တွေကို ရှာဖွေတွေ့ရှိနိုင်ခဲ့ပါတယ်!\n" ], "metadata": { "id": "zDm0VOzzcuzR" } }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**ဝက်ဘ်ဆိုက်မှတ်ချက်**: \nဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှန်ကန်မှုအတွက် ကြိုးစားနေပါသော်လည်း၊ အလိုအလျောက်ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မတိကျမှုများ ပါဝင်နိုင်သည်ကို ကျေးဇူးပြု၍ သတိပြုပါ။ မူရင်းစာရွက်စာတမ်းကို ၎င်း၏ မူလဘာသာစကားဖြင့် အာဏာတည်သောရင်းမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပြန်ဆိုမှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော နားလည်မှုမှားများ သို့မဟုတ် အဓိပ္ပါယ်မှားများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။\n" ] } ] }