{ "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-29T15:01:12+00:00", "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", "language_code": "ur" } }, "cells": [ { "cell_type": "markdown", "source": [ "# ریگریشن ماڈل بنائیں: ڈیٹا تیار کریں اور بصری بنائیں\n", "\n", "## **کدو کے لیے لکیری ریگریشن - سبق 2**\n", "#### تعارف\n", "\n", "اب جب کہ آپ کے پاس وہ ٹولز موجود ہیں جو آپ کو مشین لرننگ ماڈل بنانے کے لیے Tidymodels اور Tidyverse کے ساتھ کام کرنے کی ضرورت ہے، آپ اپنے ڈیٹا سے سوالات پوچھنے کے لیے تیار ہیں۔ جب آپ ڈیٹا کے ساتھ کام کرتے ہیں اور مشین لرننگ کے حل لاگو کرتے ہیں، تو یہ بہت ضروری ہے کہ آپ صحیح سوال پوچھنا سیکھیں تاکہ اپنے ڈیٹا سیٹ کی صلاحیتوں کو صحیح طریقے سے کھولا جا سکے۔\n", "\n", "اس سبق میں، آپ سیکھیں گے:\n", "\n", "- ماڈل بنانے کے لیے اپنے ڈیٹا کو کیسے تیار کریں۔\n", "\n", "- ڈیٹا کی بصری نمائندگی کے لیے `ggplot2` کا استعمال کیسے کریں۔\n", "\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. ڈیپلائر: ڈیٹا کو منظم کرنے کا ایک اصول\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",
"
\n"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. ڈیٹا کی بصری نمائندگی ggplot2 کے ساتھ\n",
"\n",
"
\n",
" \n",
"