{ "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-08-29T19:07:35+00:00", "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", "language_code": "pa" } }, "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",
"> ਇੱਕ ਯਾਦ ਦਹਾਨੀ: ਪਾਈਪ ਓਪਰੇਟਰ (`%>%`) ਲਾਜ਼ਮੀ ਕ੍ਰਮ ਵਿੱਚ ਕਾਰਵਾਈਆਂ ਕਰਦਾ ਹੈ, ਇੱਕ ਵਸਤੂ ਨੂੰ ਅੱਗੇ ਫੰਕਸ਼ਨ ਜਾਂ ਕਾਲ ਐਕਸਪ੍ਰੈਸ਼ਨ ਵਿੱਚ ਭੇਜਦਾ ਹੈ। ਤੁਸੀਂ ਪਾਈਪ ਓਪਰੇਟਰ ਨੂੰ ਆਪਣੇ ਕੋਡ ਵਿੱਚ \"ਅਤੇ ਫਿਰ\" ਕਹਿਣ ਵਜੋਂ ਸੋਚ ਸਕਦੇ ਹੋ।\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"
],
"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) ਦੀ ਵਰਤੋਂ ਕਰਾਂਗੇ *ਮਿਊਟੇਟ* ਕਰਨ ਲਈ Price ਕਾਲਮ ਨੂੰ ਕੁਝ ਸ਼ਰਤਾਂ ਦੇ ਅਧਾਰ 'ਤੇ। `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"
],
"metadata": {
"id": "pS2GNPagbSdb"
}
},
{
"cell_type": "markdown",
"source": [
"ਹੁਣ ਆਖਰੀ ਵਾਰ, ਸਿਰਫ਼ ਰੋਮਾਂਚ ਲਈ 💁♀️, ਆਓ ਮਹੀਨੇ ਵਾਲੇ ਕਾਲਮ ਨੂੰ ਪਹਿਲੇ ਸਥਾਨ 'ਤੇ ਲਿਆਈਏ, ਯਾਨੀ `ਪੈਕੇਜ` ਕਾਲਮ ਤੋਂ ਪਹਿਲਾਂ।\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"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. ggplot2 ਨਾਲ ਡਾਟਾ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ\n",
"\n",
"
\n",
" \n",
"