{ "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-12-19T16:34:58+00:00", "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", "language_code": "ml" } }, "cells": [ { "cell_type": "markdown", "source": [ "# ഒരു റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കുക: ഡാറ്റ തയ്യാറാക്കുകയും ദൃശ്യവത്കരിക്കുകയും ചെയ്യുക\n", "\n", "## **പമ്പ്കിൻസിനുള്ള ലീനിയർ റെഗ്രഷൻ - പാഠം 2**\n", "#### പരിചയം\n", "\n", "Tidymodels ഉം Tidyverse ഉം ഉപയോഗിച്ച് മെഷീൻ ലേണിംഗ് മോഡൽ നിർമ്മാണം ആരംഭിക്കാൻ ആവശ്യമായ ഉപകരണങ്ങൾ നിങ്ങൾക്കുണ്ടായപ്പോൾ, നിങ്ങളുടെ ഡാറ്റയെക്കുറിച്ച് ചോദ്യങ്ങൾ ചോദിക്കാൻ നിങ്ങൾ തയ്യാറാണ്. ഡാറ്റയുമായി പ്രവർത്തിക്കുമ്പോഴും ML പരിഹാരങ്ങൾ പ്രയോഗിക്കുമ്പോഴും, നിങ്ങളുടെ ഡാറ്റാസെറ്റിന്റെ സാധ്യതകൾ ശരിയായി തുറക്കാൻ ശരിയായ ചോദ്യങ്ങൾ ചോദിക്കുന്നത് വളരെ പ്രധാനമാണ്.\n", "\n", "ഈ പാഠത്തിൽ, നിങ്ങൾ പഠിക്കാനിരിക്കുന്നതെന്തെന്നാൽ:\n", "\n", "- മോഡൽ നിർമ്മാണത്തിനായി നിങ്ങളുടെ ഡാറ്റ എങ്ങനെ തയ്യാറാക്കാം.\n", "\n", "- ഡാറ്റ ദൃശ്യവത്കരണത്തിന് `ggplot2` എങ്ങനെ ഉപയോഗിക്കാം.\n", "\n", "നിങ്ങൾക്ക് ഉത്തരം വേണമെന്ന ചോദ്യമാണ് നിങ്ങൾ ഉപയോഗിക്കേണ്ട ML ആൽഗോരിതങ്ങൾ നിർണ്ണയിക്കുന്നത്. നിങ്ങൾക്ക് ലഭിക്കുന്ന ഉത്തരം എത്രത്തോളം ഗുണമേന്മയുള്ളതായിരിക്കും എന്നത് നിങ്ങളുടെ ഡാറ്റയുടെ സ്വഭാവത്തെ ആശ്രയിച്ചിരിക്കും.\n", "\n", "പ്രായോഗികമായ ഒരു അഭ്യാസത്തിലൂടെ ഇത് നോക്കാം.\n", "\n", "\n", "
\n",
"
\n",
"
\n",
"\n",
"> A refresher: The pipe operator (`%>%`) performs operations in logical sequence by passing an object forward into a function or call expression. You can think of the pipe operator as saying \"and then\" in your code.\n"
],
"metadata": {
"id": "REWcIv9yX29v"
}
},
{
"cell_type": "markdown",
"source": [
"## 2. നഷ്ടമായ ഡാറ്റ പരിശോധിക്കുക\n",
"\n",
"ഡാറ്റാ സയന്റിസ്റ്റുകൾ നേരിടേണ്ട ഏറ്റവും സാധാരണ പ്രശ്നങ്ങളിൽ ഒന്നാണ് അപൂർണ്ണമായ അല്ലെങ്കിൽ നഷ്ടമായ ഡാറ്റ. R നഷ്ടമായ അല്ലെങ്കിൽ അറിയപ്പെടാത്ത മൂല്യങ്ങളെ പ്രത്യേക സെന്റിനൽ മൂല്യമായ `NA` (Not Available) ഉപയോഗിച്ച് പ്രതിനിധീകരിക്കുന്നു.\n",
"\n",
"അപ്പോൾ ഡാറ്റാ ഫ്രെയിമിൽ നഷ്ടമായ മൂല്യങ്ങൾ ഉണ്ടെന്ന് എങ്ങനെ അറിയാം?\n",
"
\n",
"- ഒരു നേരിട്ടുള്ള മാർഗം ബേസ് R ഫംഗ്ഷൻ `anyNA` ഉപയോഗിക്കുകയാണ്, ഇത് ലജിക്കൽ ഒബ്ജക്റ്റുകൾ ആയ `TRUE` അല്ലെങ്കിൽ `FALSE` തിരികെ നൽകുന്നു.\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()` ഫംഗ്ഷൻ ഉപയോഗിക്കുകയാണ്, ഇത് ഏതൊക്കെ വ്യക്തിഗത കോളം ഘടകങ്ങൾ നഷ്ടപ്പെട്ടിട്ടുണ്ടെന്ന് ലജിക്കൽ `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": [
"ശരി, ജോലി പൂർത്തിയായി, പക്ഷേ ഇതുപോലുള്ള വലിയ ഡാറ്റാ ഫ്രെയിമിനൊപ്പം, ഓരോ വരിയും കോളവും വ്യക്തിഗതമായി പരിശോധിക്കുന്നത് കാര്യക്ഷമമല്ലയും പ്രായോഗികമായി അസാധ്യവുമാകും😴.\n",
"\n",
"- കൂടുതൽ ബോധഗമ്യമായ ഒരു മാർഗം ഓരോ കോളത്തിന്റെയും നഷ്ടപ്പെട്ട മൂല്യങ്ങളുടെ മൊത്തം കണക്കാക്കുക എന്നതാണ്:\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": [
"കൂടുതൽ മെച്ചപ്പെട്ടത്! കുറച്ച് ഡാറ്റ നഷ്ടമായിട്ടുണ്ട്, പക്ഷേ ഇപ്പോഴത്തെ ജോലി ചെയ്യുന്നതിന് അതിന് വലിയ പ്രാധാന്യമുണ്ടാകില്ല. കൂടുതൽ വിശകലനം എന്ത് കണ്ടെത്തും എന്ന് നോക്കാം.\n",
"\n",
"> അതുല്യമായ പാക്കേജുകളും ഫംഗ്ഷനുകളും കൂടാതെ, R-ന് വളരെ നല്ല ഡോക്യുമെന്റേഷൻ ഉണ്ട്. ഉദാഹരണത്തിന്, ഫംഗ്ഷൻ കുറിച്ച് കൂടുതൽ അറിയാൻ `help(colSums)` അല്ലെങ്കിൽ `?colSums` ഉപയോഗിക്കുക.\n"
],
"metadata": {
"id": "9gv-crB6ZD1Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. Dplyr: ഡാറ്റ മാനിപ്പുലേഷന്റെ ഒരു വ്യാകരണം\n",
"\n",
"\n",
"
\n",
"
\n",
"
\n"
],
"metadata": {
"id": "i5o33MQBZWWw"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::select()\n",
"\n",
"`select()` എന്നത് `dplyr` പാക്കേജിലുള്ള ഒരു ഫംഗ്ഷനാണ്, ഇത് നിങ്ങൾക്ക് സൂക്ഷിക്കാനോ ഒഴിവാക്കാനോ കോളങ്ങൾ തിരഞ്ഞെടുക്കാൻ സഹായിക്കുന്നു.\n",
"\n",
"നിങ്ങളുടെ ഡാറ്റാ ഫ്രെയിം ഉപയോഗിക്കാൻ എളുപ്പമാക്കാൻ, അതിലെ ചില കോളങ്ങൾ ഒഴിവാക്കുക, `select()` ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ആവശ്യമായ കോളങ്ങൾ മാത്രം സൂക്ഷിക്കുക.\n",
"\n",
"ഉദാഹരണത്തിന്, ഈ അഭ്യാസത്തിൽ, നമ്മുടെ വിശകലനം `Package`, `Low Price`, `High Price` மற்றும் `Date` എന്ന കോളങ്ങൾ ഉൾപ്പെടും. ഈ കോളങ്ങൾ തിരഞ്ഞെടുക്കാം.\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` പാക്കേജിലുള്ള ഒരു ഫംഗ്ഷനാണ്, ഇത് നിലവിലുള്ള കോളങ്ങൾ നിലനിർത്തിക്കൊണ്ട് പുതിയ കോളങ്ങൾ സൃഷ്ടിക്കുകയോ മാറ്റം വരുത്തുകയോ ചെയ്യാൻ സഹായിക്കുന്നു.\n",
"\n",
"mutate ന്റെ പൊതുവായ ഘടന:\n",
"\n",
"`data %>% mutate(new_column_name = what_it_contains)`\n",
"\n",
"`Date` കോളം ഉപയോഗിച്ച് `mutate` പരീക്ഷിക്കാം, താഴെ പറയുന്ന പ്രവർത്തനങ്ങൾ ചെയ്യുക:\n",
"\n",
"1. തീയതികൾ (ഇപ്പോൾ character തരം) മാസ ഫോർമാറ്റിലേക്ക് മാറ്റുക (ഇവ US തീയതികളാണ്, അതിനാൽ ഫോർമാറ്റ് `MM/DD/YYYY` ആണ്).\n",
"\n",
"2. തീയതികളിൽ നിന്ന് മാസം പുതിയ കോളത്തിലേക്ക് എടുക്കുക.\n",
"\n",
"R ൽ, [lubridate](https://lubridate.tidyverse.org/) പാക്കേജ് Date-time ഡാറ്റ കൈകാര്യം ചെയ്യാൻ എളുപ്പമാക്കുന്നു. അതിനാൽ, `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` ഉപയോഗിച്ച് മുകളിൽ പറഞ്ഞ ലക്ഷ്യങ്ങൾ എങ്ങനെ നേടാമെന്ന് നോക്കാം. പിന്നീട് പ്രവർത്തനങ്ങളിൽ Date കോളം ആവശ്യമില്ലാത്തതിനാൽ അത് ഒഴിവാക്കാം.\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` കോളം സൃഷ്ടിക്കാം. ഇപ്പോൾ, പുതിയ Price കോളം പൂരിപ്പിക്കാൻ `Low Price` ഉം `High Price` ഉം കോളങ്ങളിലെ ശരാശരി എടുക്കാം.\n",
"
\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 ബുഷെൽ` അളവിൽ, ചിലത് `1/2 ബുഷെൽ` അളവിൽ, ചിലത് ഓരോ പംപ്കിനും, ചിലത് ഓരോ പൗണ്ടിനും, ചിലത് വ്യത്യസ്ത വീതികളുള്ള വലിയ ബോക്സുകളിൽ വിൽക്കപ്പെടുന്നു.\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` ആയി വെക്കുകയും ചെയ്യാം.\n",
"
\n"
],
"metadata": {
"id": "7sMjiVujaZxY"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::filter() and stringr::str_detect()\n",
"\n",
"[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): നിങ്ങളുടെ നിബന്ധനകൾ പാലിക്കുന്ന **പങ്കുകൾ** മാത്രം ഉൾക്കൊള്ളുന്ന ഡാറ്റയുടെ ഒരു ഉപസമൂഹം സൃഷ്ടിക്കുന്നു, ഈ കേസിൽ, `Package` കോളത്തിൽ *bushel* എന്ന സ്ട്രിംഗ് ഉള്ള പംപ്കിനുകൾ.\n",
"\n",
"[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): ഒരു സ്ട്രിംഗിൽ ഒരു പാറ്റേൺ ഉള്ളതോ ഇല്ലാതെയോ കണ്ടെത്തുന്നു.\n",
"\n",
"[`stringr`](https://github.com/tidyverse/stringr) പാക്കേജ് സാധാരണ സ്ട്രിംഗ് പ്രവർത്തനങ്ങൾക്ക് ലളിതമായ ഫംഗ്ഷനുകൾ നൽകുന്നു.\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": [
"നാം ബഷെൽ പ്രകാരം പംപ്കിനുകൾ അടങ്ങിയ ഏകദേശം 415 വരി ഡാറ്റയിലേക്ക് ചുരുക്കിയതായി നിങ്ങൾക്ക് കാണാം.🤩\n",
"
\n"
],
"metadata": {
"id": "VrDwF031avlR"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::case_when()\n",
"\n",
"**കാത്തിരിക്കുക! ചെയ്യേണ്ട മറ്റൊരു കാര്യം ഉണ്ട്**\n",
"\n",
"ബഷേൽ തുക ഓരോ വരിയിലും വ്യത്യസ്തമാണെന്ന് നിങ്ങൾ ശ്രദ്ധിച്ചോ? 1 1/9 അല്ലെങ്കിൽ 1/2 ബഷേൽക്ക് പകരം ബഷേൽക്ക് തുക കാണിക്കാൻ വില സാധാരണമാക്കേണ്ടതുണ്ട്. ഇത് സാധാരണമാക്കാൻ കുറച്ച് ഗണിതം ചെയ്യേണ്ട സമയം.\n",
"\n",
"നാം ചില നിബന്ധനകളുടെ അടിസ്ഥാനത്തിൽ വില കോളം *മ്യൂട്ടേറ്റ്* ചെയ്യാൻ [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) ഫംഗ്ഷൻ ഉപയോഗിക്കും. `case_when` നിങ്ങൾക്ക് പല `if_else()` പ്രസ്താവനകളും വെക്ടറൈസ് ചെയ്യാൻ അനുവദിക്കുന്നു.\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": [
"ഇപ്പോൾ, അവയുടെ ബഷെൽ അളവിന്റെ അടിസ്ഥാനത്തിൽ യൂണിറ്റ് വില വിശകലനം ചെയ്യാം. പക്ഷേ, പംപ്കിൻ ബഷെലുകളുടെ ഈ പഠനം, നിങ്ങളുടെ ഡാറ്റയുടെ സ്വഭാവം `അറിയുന്നത്` എത്രത്തോളം `പ്രധാനമാണ്` എന്ന് കാണിക്കുന്നു!\n",
"\n",
"> ✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) പ്രകാരം, ഒരു ബഷെലിന്റെ ഭാരം ഉൽപ്പന്നത്തിന്റെ തരം അനുസരിച്ച് വ്യത്യാസപ്പെടുന്നു, കാരണം ഇത് ഒരു വോളിയം അളവാണ്. \"ഉദാഹരണത്തിന്, ഒരു ബഷെൽ തക്കാളി 56 പൗണ്ട് ഭാരമുള്ളതായിരിക്കണം... ഇലകളും പച്ചക്കറികളും കുറവ് ഭാരത്തോടെ കൂടുതൽ സ്ഥലം പിടിക്കുന്നു, അതുകൊണ്ട് ഒരു ബഷെൽ സ്പിനാച്ച് വെറും 20 പൗണ്ട് മാത്രമാണ്.\" എല്ലാം വളരെ സങ്കീർണ്ണമാണ്! ബഷെൽ-ടു-പൗണ്ട് പരിവർത്തനം ചെയ്യാൻ ശ്രമിക്കാതെ, ബഷെൽ അടിസ്ഥാനമാക്കി വില നിശ്ചയിക്കാം. പംപ്കിൻ ബഷെലുകളുടെ ഈ പഠനം, നിങ്ങളുടെ ഡാറ്റയുടെ സ്വഭാവം അറിയുന്നത് എത്രത്തോളം പ്രധാനമാണെന്ന് കാണിക്കുന്നു!\n",
">\n",
"> ✅ പംപ്കിനുകൾ അർദ്ധ-ബഷെൽ അടിസ്ഥാനത്തിൽ വിൽക്കുമ്പോൾ വളരെ വിലകൂടുതലാണെന്ന് നിങ്ങൾ ശ്രദ്ധിച്ചോ? എന്തുകൊണ്ടെന്ന് കണ്ടെത്താമോ? സൂചന: ചെറിയ പംപ്കിനുകൾ വലിയവയെക്കാൾ വളരെ വിലകൂടുതലാണ്, കാരണം ഒരു വലിയ പൊള്ളലുള്ള പൈ പംപ്കിൻ എടുത്തിടുന്ന ഉപയോഗിക്കാത്ത സ്ഥലത്തെ തുടർന്ന് ഒരു ബഷെലിൽ അവയുടെ എണ്ണം വളരെ കൂടുതലായിരിക്കും.\n",
"
\n"
],
"metadata": {
"id": "pS2GNPagbSdb"
}
},
{
"cell_type": "markdown",
"source": [
"ഇപ്പോൾ അവസാനം, സാഹസികതയ്ക്കായി 💁♀️, നമുക്ക് മാസത്തെ കോളം ആദ്യ സ്ഥാനത്തേക്ക് മാറ്റാം, അതായത് `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": [
"നല്ല ജോലി!👌 നിങ്ങൾക്ക് ഇപ്പോൾ ഒരു ശുചിത്വം പുലർത്തിയ, ക്രമീകരിച്ച ഡാറ്റാസെറ്റ് ലഭിച്ചു, അതിൽ നിങ്ങൾക്ക് നിങ്ങളുടെ പുതിയ റെഗ്രഷൻ മോഡൽ നിർമ്മിക്കാം!\n",
"
\n"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. ggplot2 ഉപയോഗിച്ച് ഡാറ്റാ ദൃശ്യീകരണം\n",
"\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()` പൂർണ്ണ ഡാറ്റാസെറ്റിൽ നിന്നുള്ള വിശകലന യൂണിറ്റ് ഓരോ ഗ്രൂപ്പുകളിലേക്കു മാറ്റുന്നു, ഉദാഹരണത്തിന് ഓരോ മാസം.\n",
"\n",
"- `dplyr::summarize()` നിങ്ങൾ നിർദ്ദേശിച്ച സംഗ്രഹ സാങ്കേതികവിദ്യകൾക്കായി ഓരോ ഗ്രൂപ്പിംഗ് വേരിയബിളിനും ഒരു കോളവും ഓരോ സംഗ്രഹ സാങ്കേതികവിദ്യയ്ക്കും ഒരു കോളവും ഉള്ള പുതിയ ഡാറ്റാ ഫ്രെയിം സൃഷ്ടിക്കുന്നു.\n",
"\n",
"ഉദാഹരണത്തിന്, `dplyr::group_by() %>% summarize()` ഉപയോഗിച്ച് പംപ്കിൻസിനെ **മാസം** കോളം അടിസ്ഥാനമാക്കി ഗ്രൂപ്പാക്കി, ഓരോ മാസത്തിനും **ശരാശരി വില** കണ്ടെത്താം.\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\n"
]
}
]
}