You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ur/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb

724 lines
35 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {
"colab": {
"name": "lesson_10-R.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "2621e24705e8100893c9bf84e0fc8aef",
"translation_date": "2025-08-29T15:33:37+00:00",
"source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
"language_code": "ur"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"ایک درجہ بندی ماڈل بنائیں: مزیدار ایشیائی اور بھارتی کھانے\n"
],
"metadata": {
"id": "ItETB4tSFprR"
}
},
{
"cell_type": "markdown",
"source": [
"## تعارف: ڈیٹا کو صاف کریں، تیار کریں، اور بصری بنائیں\n",
"\n",
"ان چار اسباق میں، آپ مشین لرننگ کے ایک بنیادی پہلو - *کلاسیفکیشن* - کو دریافت کریں گے۔ ہم مختلف کلاسیفکیشن الگورتھمز کا استعمال کریں گے ایک ڈیٹاسیٹ کے ساتھ جو ایشیا اور بھارت کے شاندار کھانوں کے بارے میں ہے۔ امید ہے کہ آپ بھوکے ہیں!\n",
"\n",
"<p >\n",
" <img src=\"../../images/pinch.png\"\n",
" width=\"600\"/>\n",
" <figcaption>ان اسباق میں پان-ایشیائی کھانوں کا جشن منائیں! تصویر: جین لوپر</figcaption>\n",
"\n",
"کلاسیفکیشن [سپر وائزڈ لرننگ](https://wikipedia.org/wiki/Supervised_learning) کی ایک قسم ہے جو ریگریشن تکنیکوں سے کافی مشابہت رکھتی ہے۔ کلاسیفکیشن میں، آپ ایک ماڈل کو تربیت دیتے ہیں تاکہ یہ پیش گوئی کرے کہ کوئی آئٹم کس `زمرے` میں آتا ہے۔ اگر مشین لرننگ کا مقصد ڈیٹاسیٹس کا استعمال کرتے ہوئے چیزوں کے نام یا قدریں پیش گوئی کرنا ہے، تو کلاسیفکیشن عام طور پر دو گروپوں میں تقسیم ہوتی ہے: *بائنری کلاسیفکیشن* اور *ملٹی کلاس کلاسیفکیشن*۔\n",
"\n",
"یاد رکھیں:\n",
"\n",
"- **لینیئر ریگریشن** نے آپ کو متغیرات کے درمیان تعلقات کی پیش گوئی کرنے اور یہ اندازہ لگانے میں مدد دی کہ ایک نیا ڈیٹا پوائنٹ اس لائن کے ساتھ کہاں گرے گا۔ مثال کے طور پر، آپ یہ پیش گوئی کر سکتے تھے کہ *ستمبر کے مقابلے میں دسمبر میں کدو کی قیمت کیا ہوگی*۔\n",
"\n",
"- **لاجسٹک ریگریشن** نے آپ کو \"بائنری زمرے\" دریافت کرنے میں مدد دی: اس قیمت پر، *کیا یہ کدو نارنجی ہے یا نہیں؟*\n",
"\n",
"کلاسیفکیشن مختلف الگورتھمز کا استعمال کرتی ہے تاکہ یہ معلوم کیا جا سکے کہ کسی ڈیٹا پوائنٹ کا لیبل یا کلاس کیا ہے۔ آئیے اس کھانے کے ڈیٹا کے ساتھ کام کرتے ہیں تاکہ یہ دیکھ سکیں کہ اجزاء کے ایک گروپ کو دیکھ کر ہم اس کے کھانے کی اصل کا تعین کر سکتے ہیں۔\n",
"\n",
"### [**لیکچر سے پہلے کا کوئز**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
"\n",
"### **تعارف**\n",
"\n",
"کلاسیفکیشن مشین لرننگ کے محقق اور ڈیٹا سائنسدان کی بنیادی سرگرمیوں میں سے ایک ہے۔ چاہے یہ کسی بائنری ویلیو کی بنیادی کلاسیفکیشن ہو (\"کیا یہ ای میل اسپیم ہے یا نہیں؟\")، یا کمپیوٹر وژن کا استعمال کرتے ہوئے پیچیدہ امیج کلاسیفکیشن اور سیگمنٹیشن، ڈیٹا کو کلاسز میں ترتیب دینا اور اس سے سوالات پوچھنا ہمیشہ مفید ہوتا ہے۔\n",
"\n",
"اگر اس عمل کو سائنسی انداز میں بیان کریں، تو آپ کا کلاسیفکیشن طریقہ ایک پیش گوئی ماڈل بناتا ہے جو آپ کو ان پٹ متغیرات اور آؤٹ پٹ متغیرات کے درمیان تعلق کو نقشہ بنانے کے قابل بناتا ہے۔\n",
"\n",
"<p >\n",
" <img src=\"../../images/binary-multiclass.png\"\n",
" width=\"600\"/>\n",
" <figcaption>کلاسیفکیشن الگورتھمز کے لیے بائنری بمقابلہ ملٹی کلاس مسائل۔ انفوگرافک: جین لوپر</figcaption>\n",
"\n",
"ڈیٹا کو صاف کرنے، بصری بنانے، اور مشین لرننگ کے کاموں کے لیے تیار کرنے کے عمل کو شروع کرنے سے پہلے، آئیے یہ سیکھیں کہ مشین لرننگ کو ڈیٹا کی کلاسیفکیشن کے لیے مختلف طریقوں سے کیسے استعمال کیا جا سکتا ہے۔\n",
"\n",
"[شماریات](https://wikipedia.org/wiki/Statistical_classification) سے ماخوذ، کلاسیکی مشین لرننگ کا استعمال کرتے ہوئے کلاسیفکیشن خصوصیات جیسے `smoker`، `weight`، اور `age` کا استعمال کرتی ہے تاکہ *کسی بیماری کے ہونے کے امکان* کا تعین کیا جا سکے۔ جیسا کہ ریگریشن مشقوں کی طرح، جو آپ نے پہلے کی تھیں، یہ ایک سپر وائزڈ لرننگ تکنیک ہے، جہاں آپ کے ڈیٹا کو لیبل کیا جاتا ہے، اور مشین لرننگ الگورتھمز ان لیبلز کا استعمال کرتے ہوئے ڈیٹاسیٹ کی کلاسز (یا 'خصوصیات') کی پیش گوئی کرتے ہیں اور انہیں کسی گروپ یا نتیجے میں تفویض کرتے ہیں۔\n",
"\n",
"✅ ایک لمحہ نکال کر کھانوں کے بارے میں ایک ڈیٹاسیٹ کا تصور کریں۔ ایک ملٹی کلاس ماڈل کیا جواب دے سکتا ہے؟ ایک بائنری ماڈل کیا جواب دے سکتا ہے؟ اگر آپ یہ تعین کرنا چاہتے ہیں کہ آیا کسی خاص کھانے میں میتھی استعمال ہونے کا امکان ہے؟ یا اگر آپ یہ دیکھنا چاہتے ہیں کہ، اگر آپ کو ستارے کی سونف، آرٹچوک، گوبھی، اور ہارسریڈش سے بھرا ہوا ایک گروسری بیگ دیا جائے، تو کیا آپ ایک عام بھارتی ڈش بنا سکتے ہیں؟\n",
"\n",
"### **ہیلو 'کلاسیفائر'**\n",
"\n",
"ہم اس کھانے کے ڈیٹاسیٹ سے جو سوال پوچھنا چاہتے ہیں وہ دراصل ایک **ملٹی کلاس سوال** ہے، کیونکہ ہمارے پاس کام کرنے کے لیے کئی ممکنہ قومی کھانے ہیں۔ اجزاء کے ایک بیچ کو دیکھتے ہوئے، ان میں سے کون سی کلاسز کے ساتھ ڈیٹا فٹ ہوگا؟\n",
"\n",
"Tidymodels مختلف الگورتھمز پیش کرتا ہے جو ڈیٹا کو کلاسیفائی کرنے کے لیے استعمال کیے جا سکتے ہیں، اس پر منحصر ہے کہ آپ کس قسم کا مسئلہ حل کرنا چاہتے ہیں۔ اگلے دو اسباق میں، آپ ان الگورتھمز میں سے کئی کے بارے میں سیکھیں گے۔\n",
"\n",
"#### **پیشگی ضرورت**\n",
"\n",
"اس سبق کے لیے، ہمیں ڈیٹا کو صاف کرنے، تیار کرنے، اور بصری بنانے کے لیے درج ذیل پیکجز کی ضرورت ہوگی:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ایک [R پیکجز کا مجموعہ](https://www.tidyverse.org/packages) ہے جو ڈیٹا سائنس کو تیز، آسان اور مزیدار بناتا ہے!\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) فریم ورک ایک [پیکجز کا مجموعہ](https://www.tidymodels.org/packages/) ہے جو ماڈلنگ اور مشین لرننگ کے لیے ہے۔\n",
"\n",
"- `DataExplorer`: [DataExplorer پیکج](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) EDA کے عمل اور رپورٹ کی تیاری کو آسان اور خودکار بنانے کے لیے بنایا گیا ہے۔\n",
"\n",
"- `themis`: [themis پیکج](https://themis.tidymodels.org/) غیر متوازن ڈیٹا سے نمٹنے کے لیے اضافی ترکیبیں فراہم کرتا ہے۔\n",
"\n",
"آپ انہیں اس طرح انسٹال کر سکتے ہیں:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
"\n",
"متبادل کے طور پر، نیچے دیا گیا اسکرپٹ چیک کرتا ہے کہ آیا آپ کے پاس اس ماڈیول کو مکمل کرنے کے لیے درکار پیکجز موجود ہیں اور اگر وہ غائب ہیں تو انہیں آپ کے لیے انسٹال کرتا ہے۔\n"
],
"metadata": {
"id": "ri5bQxZ-Fz_0"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
"\r\n",
"pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
],
"outputs": [],
"metadata": {
"id": "KIPxa4elGAPI"
}
},
{
"cell_type": "markdown",
"source": [
"ہم بعد میں ان شاندار پیکجز کو لوڈ کریں گے اور انہیں اپنے موجودہ R سیشن میں دستیاب کریں گے۔ (یہ صرف وضاحت کے لیے ہے، `pacman::p_load()` نے یہ پہلے ہی آپ کے لیے کر دیا ہے)\n"
],
"metadata": {
"id": "YkKAxOJvGD4C"
}
},
{
"cell_type": "markdown",
"source": [
"## مشق - اپنے ڈیٹا کو صاف کریں اور متوازن کریں\n",
"\n",
"پروجیکٹ شروع کرنے سے پہلے پہلا کام یہ ہے کہ اپنے ڈیٹا کو صاف کریں اور **متوازن** کریں تاکہ بہتر نتائج حاصل کیے جا سکیں۔\n",
"\n",
"آئیے ڈیٹا سے ملتے ہیں! 🕵️\n"
],
"metadata": {
"id": "PFkQDlk0GN5O"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Import data\r\n",
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
"\r\n",
"# View the first 5 rows\r\n",
"df %>% \r\n",
" slice_head(n = 5)\r\n"
],
"outputs": [],
"metadata": {
"id": "Qccw7okxGT0S"
}
},
{
"cell_type": "markdown",
"source": [
"دلچسپ! دیکھنے سے لگتا ہے کہ پہلا کالم ایک قسم کا `id` کالم ہے۔ آئیے ڈیٹا کے بارے میں تھوڑی مزید معلومات حاصل کریں۔\n"
],
"metadata": {
"id": "XrWnlgSrGVmR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Basic information about the data\r\n",
"df %>%\r\n",
" introduce()\r\n",
"\r\n",
"# Visualize basic information above\r\n",
"df %>% \r\n",
" plot_intro(ggtheme = theme_light())"
],
"outputs": [],
"metadata": {
"id": "4UcGmxRxGieA"
}
},
{
"cell_type": "markdown",
"source": [
"ہم فوری طور پر دیکھ سکتے ہیں کہ ہمارے پاس `2448` قطاریں اور `385` کالم ہیں اور `0` گمشدہ اقدار ہیں۔ ہمارے پاس 1 غیر مسلسل کالم بھی ہے، *cuisine*۔\n",
"\n",
"## مشق - کھانوں کے بارے میں سیکھنا\n",
"\n",
"اب کام زیادہ دلچسپ ہونے لگتا ہے۔ آئیے کھانوں کے لحاظ سے ڈیٹا کی تقسیم کو دریافت کریں۔\n"
],
"metadata": {
"id": "AaPubl__GmH5"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Count observations per cuisine\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(n)\r\n",
"\r\n",
"# Plot the distribution\r\n",
"theme_set(theme_light())\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
" geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
" ylab(\"cuisine\")"
],
"outputs": [],
"metadata": {
"id": "FRsBVy5eGrrv"
}
},
{
"cell_type": "markdown",
"source": [
"کھانوں کی تعداد محدود ہے، لیکن ڈیٹا کی تقسیم غیر متوازن ہے۔ آپ اسے درست کر سکتے ہیں! اس سے پہلے، تھوڑا اور جائزہ لیں۔\n",
"\n",
"اب، ہر کھانے کو اس کے علیحدہ ٹیبل (tibble) میں تقسیم کریں اور معلوم کریں کہ ہر کھانے کے لیے کتنا ڈیٹا دستیاب ہے (قطاریں، کالم)۔\n",
"\n",
"> ایک [tibble](https://tibble.tidyverse.org/) جدید ڈیٹا فریم ہے۔\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_filter.jpg\"\n",
" width=\"600\"/>\n",
" <figcaption>آرٹ ورک: @allison_horst</figcaption>\n"
],
"metadata": {
"id": "vVvyDb1kG2in"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Create individual tibble for the cuisines\r\n",
"thai_df <- df %>% \r\n",
" filter(cuisine == \"thai\")\r\n",
"japanese_df <- df %>% \r\n",
" filter(cuisine == \"japanese\")\r\n",
"chinese_df <- df %>% \r\n",
" filter(cuisine == \"chinese\")\r\n",
"indian_df <- df %>% \r\n",
" filter(cuisine == \"indian\")\r\n",
"korean_df <- df %>% \r\n",
" filter(cuisine == \"korean\")\r\n",
"\r\n",
"\r\n",
"# Find out how much data is available per cuisine\r\n",
"cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
" \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
" \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
" \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
" \"korean_df:\", dim(korean_df))"
],
"outputs": [],
"metadata": {
"id": "0TvXUxD3G8Bk"
}
},
{
"cell_type": "markdown",
"source": [
"## **ورزش - dplyr کا استعمال کرتے ہوئے کھانوں کے لحاظ سے اہم اجزاء دریافت کرنا**\n",
"\n",
"اب آپ ڈیٹا میں مزید گہرائی میں جا سکتے ہیں اور جان سکتے ہیں کہ ہر کھانے کے لیے عام اجزاء کیا ہیں۔ آپ کو بار بار آنے والے ڈیٹا کو صاف کرنا چاہیے جو کھانوں کے درمیان الجھن پیدا کرتا ہے، تو آئیے اس مسئلے کے بارے میں سیکھتے ہیں۔\n",
"\n",
"R میں ایک فنکشن `create_ingredient()` بنائیں جو ایک اجزاء کا ڈیٹا فریم واپس کرے۔ یہ فنکشن ایک غیر مددگار کالم کو ہٹانے اور اجزاء کو ان کی گنتی کے مطابق ترتیب دینے سے شروع ہوگا۔\n",
"\n",
"R میں فنکشن کی بنیادی ساخت یہ ہے:\n",
"\n",
"`myFunction <- function(arglist){`\n",
"\n",
"**`...`**\n",
"\n",
"**`return`**`(value)`\n",
"\n",
"`}`\n",
"\n",
"R فنکشنز کا ایک مختصر تعارف [یہاں](https://skirmer.github.io/presentations/functions_with_r.html#1) پایا جا سکتا ہے۔\n",
"\n",
"چلیں شروع کرتے ہیں! ہم ان [dplyr افعال](https://dplyr.tidyverse.org/) کا استعمال کریں گے جنہیں ہم نے اپنے پچھلے اسباق میں سیکھا ہے۔ ایک یاد دہانی کے طور پر:\n",
"\n",
"- `dplyr::select()`: آپ کو یہ منتخب کرنے میں مدد دیتا ہے کہ کون سے **کالم** رکھنا یا نکالنا ہیں۔\n",
"\n",
"- `dplyr::pivot_longer()`: آپ کو ڈیٹا کو \"لمبا\" کرنے میں مدد دیتا ہے، جس سے قطاروں کی تعداد بڑھتی ہے اور کالموں کی تعداد کم ہوتی ہے۔\n",
"\n",
"- `dplyr::group_by()` اور `dplyr::summarise()`: آپ کو مختلف گروپس کے لیے خلاصہ شماریات تلاش کرنے اور انہیں ایک خوبصورت جدول میں رکھنے میں مدد دیتا ہے۔\n",
"\n",
"- `dplyr::filter()`: ڈیٹا کا ایک ذیلی سیٹ بناتا ہے جو صرف وہی قطاریں شامل کرتا ہے جو آپ کی شرائط کو پورا کرتی ہیں۔\n",
"\n",
"- `dplyr::mutate()`: آپ کو کالم بنانے یا ان میں ترمیم کرنے میں مدد دیتا ہے۔\n",
"\n",
"یہ [*آرٹ* سے بھرپور learnr ٹیوٹوریل](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) دیکھیں جو ایلیسن ہورسٹ نے بنایا ہے، جو dplyr *(جو Tidyverse کا حصہ ہے)* میں کچھ مفید ڈیٹا پروسیسنگ افعال کا تعارف کراتا ہے۔\n"
],
"metadata": {
"id": "K3RF5bSCHC76"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Creates a functions that returns the top ingredients by class\r\n",
"\r\n",
"create_ingredient <- function(df){\r\n",
" \r\n",
" # Drop the id column which is the first colum\r\n",
" ingredient_df = df %>% select(-1) %>% \r\n",
" # Transpose data to a long format\r\n",
" pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
" # Find the top most ingredients for a particular cuisine\r\n",
" group_by(ingredients) %>% \r\n",
" summarise(n_instances = sum(count)) %>% \r\n",
" filter(n_instances != 0) %>% \r\n",
" # Arrange by descending order\r\n",
" arrange(desc(n_instances)) %>% \r\n",
" mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
" \r\n",
" \r\n",
" return(ingredient_df)\r\n",
"} # End of function"
],
"outputs": [],
"metadata": {
"id": "uB_0JR82HTPa"
}
},
{
"cell_type": "markdown",
"source": [
"اب ہم اس فنکشن کو استعمال کر کے مختلف کھانوں میں سب سے زیادہ مقبول دس اجزاء کا اندازہ لگا سکتے ہیں۔ آئیے اسے `thai_df` کے ساتھ آزما کر دیکھتے ہیں۔\n"
],
"metadata": {
"id": "h9794WF8HWmc"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Call create_ingredient and display popular ingredients\r\n",
"thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
"\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "agQ-1HrcHaEA"
}
},
{
"cell_type": "markdown",
"source": [
"پچھلے حصے میں، ہم نے `geom_col()` استعمال کیا، آئیے دیکھتے ہیں کہ آپ `geom_bar` کو بھی بار چارٹس بنانے کے لیے کیسے استعمال کر سکتے ہیں۔ مزید مطالعہ کے لیے `?geom_bar` استعمال کریں۔\n"
],
"metadata": {
"id": "kHu9ffGjHdcX"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make a bar chart for popular thai cuisines\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10) %>% \r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "fb3Bx_3DHj6e"
}
},
{
"cell_type": "markdown",
"source": [
"آئیے جاپانی ڈیٹا کے لیے بھی یہی کریں۔\n"
],
"metadata": {
"id": "RHP_xgdkHnvM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
"create_ingredient(df = japanese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")\r\n"
],
"outputs": [],
"metadata": {
"id": "019v8F0XHrRU"
}
},
{
"cell_type": "markdown",
"source": [
"چینی کھانوں کے بارے میں کیا خیال ہے؟\n"
],
"metadata": {
"id": "iIGM7vO8Hu3v"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
"create_ingredient(df = chinese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lHd9_gd2HyzU"
}
},
{
"cell_type": "markdown",
"source": [
"آئیے بھارتی کھانوں پر نظر ڈالیں 🌶️۔\n"
],
"metadata": {
"id": "ir8qyQbNH1c7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Indian cuisines and make bar chart\r\n",
"create_ingredient(df = indian_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "ApukQtKjH5FO"
}
},
{
"cell_type": "markdown",
"source": [
"آخر کار، کوریائی اجزاء کا خاکہ بنائیں۔\n"
],
"metadata": {
"id": "qv30cwY1H-FM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Korean cuisines and make bar chart\r\n",
"create_ingredient(df = korean_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lumgk9cHIBie"
}
},
{
"cell_type": "markdown",
"source": [
"ڈیٹا ویژولائزیشنز سے، ہم اب ان عام اجزاء کو ہٹا سکتے ہیں جو مختلف کھانوں کے درمیان الجھن پیدا کرتے ہیں، `dplyr::select()` کا استعمال کرتے ہوئے۔\n",
"\n",
"چاول، لہسن اور ادرک سب کو پسند ہیں!\n"
],
"metadata": {
"id": "iO4veMXuIEta"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Drop id column, rice, garlic and ginger from our original data set\r\n",
"df_select <- df %>% \r\n",
" select(-c(1, rice, garlic, ginger))\r\n",
"\r\n",
"# Display new data set\r\n",
"df_select %>% \r\n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "iHJPiG6rIUcK"
}
},
{
"cell_type": "markdown",
"source": [
"## ترکیبوں کا استعمال کرتے ہوئے ڈیٹا کی تیاری 👩‍🍳👨‍🍳 - غیر متوازن ڈیٹا سے نمٹنا ⚖️\n",
"\n",
"<p >\n",
" <img src=\"../../images/recipes.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Artwork by @allison_horst</figcaption>\n",
"\n",
"چونکہ یہ سبق کھانوں کے بارے میں ہے، ہمیں `recipes` کو سیاق و سباق میں رکھنا ہوگا۔\n",
"\n",
"Tidymodels ایک اور شاندار پیکیج فراہم کرتا ہے: `recipes` - ڈیٹا کی تیاری کے لیے ایک پیکیج۔\n"
],
"metadata": {
"id": "kkFd-JxdIaL6"
}
},
{
"cell_type": "markdown",
"source": [
"آئیے دوبارہ اپنے کھانوں کی تقسیم پر نظر ڈالیں۔\n"
],
"metadata": {
"id": "6l2ubtTPJAhY"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"old_label_count <- df_select %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"old_label_count"
],
"outputs": [],
"metadata": {
"id": "1e-E9cb7JDVi"
}
},
{
"cell_type": "markdown",
"source": [
"جیسا کہ آپ دیکھ سکتے ہیں، کھانوں کی تعداد میں کافی غیر مساوی تقسیم ہے۔ کوریائی کھانے تقریباً تھائی کھانوں سے تین گنا زیادہ ہیں۔ غیر متوازن ڈیٹا اکثر ماڈل کی کارکردگی پر منفی اثر ڈالتا ہے۔ ایک بائنری کلاسفیکیشن کے بارے میں سوچیں۔ اگر آپ کے زیادہ تر ڈیٹا کا تعلق ایک کلاس سے ہے، تو مشین لرننگ ماڈل زیادہ تر اسی کلاس کی پیش گوئی کرے گا، صرف اس لیے کہ اس کے پاس اس کلاس کے لیے زیادہ ڈیٹا موجود ہے۔ ڈیٹا کو متوازن کرنا کسی بھی غیر متوازن ڈیٹا کو درست کرتا ہے اور اس عدم توازن کو ختم کرنے میں مدد دیتا ہے۔ بہت سے ماڈلز بہترین کارکردگی دکھاتے ہیں جب مشاہدات کی تعداد برابر ہو، اور اسی وجہ سے غیر متوازن ڈیٹا کے ساتھ جدوجہد کرتے ہیں۔\n",
"\n",
"غیر متوازن ڈیٹا سیٹس سے نمٹنے کے دو اہم طریقے ہیں:\n",
"\n",
"- اقلیت کلاس میں مشاہدات شامل کرنا: `اوور سیمپلنگ` جیسے کہ SMOTE الگورتھم کا استعمال\n",
"\n",
"- اکثریت کلاس سے مشاہدات کو ہٹانا: `انڈر سیمپلنگ`\n",
"\n",
"اب ہم ایک `recipe` کا استعمال کرتے ہوئے غیر متوازن ڈیٹا سیٹس سے نمٹنے کا مظاہرہ کریں گے۔ ایک recipe کو ایک خاکہ سمجھا جا سکتا ہے جو بیان کرتا ہے کہ ڈیٹا سیٹ کو ڈیٹا تجزیہ کے لیے تیار کرنے کے لیے کون سے اقدامات کیے جانے چاہئیں۔\n"
],
"metadata": {
"id": "soAw6826JKx9"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load themis package for dealing with imbalanced data\r\n",
"library(themis)\r\n",
"\r\n",
"# Create a recipe for preprocessing data\r\n",
"cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
" step_smote(cuisine)\r\n",
"\r\n",
"cuisines_recipe"
],
"outputs": [],
"metadata": {
"id": "HS41brUIJVJy"
}
},
{
"cell_type": "markdown",
"source": [
"آئیے اپنے پری پروسیسنگ کے مراحل کو سمجھتے ہیں۔\n",
"\n",
"- `recipe()` کو ایک فارمولے کے ساتھ کال کرنے سے، `df_select` ڈیٹا کو حوالہ کے طور پر استعمال کرتے ہوئے متغیرات کے *کردار* بتائے جاتے ہیں۔ مثال کے طور پر، `cuisine` کالم کو `outcome` کردار دیا گیا ہے جبکہ باقی کالمز کو `predictor` کردار دیا گیا ہے۔\n",
"\n",
"- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) ایک *وضاحت* بناتا ہے جو ترکیب کے اس مرحلے میں اقلیت کلاس کے نئے مثالیں مصنوعی طور پر پیدا کرتا ہے، ان کیسز کے قریبی پڑوسیوں کا استعمال کرتے ہوئے۔\n",
"\n",
"اب، اگر ہم پری پروسیسڈ ڈیٹا دیکھنا چاہتے ہیں، تو ہمیں [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) اور [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) اپنی ترکیب پر لگانا ہوگا۔\n",
"\n",
"`prep()`: تربیتی سیٹ سے مطلوبہ پیرامیٹرز کا اندازہ لگاتا ہے جو بعد میں دوسرے ڈیٹا سیٹس پر لاگو کیے جا سکتے ہیں۔\n",
"\n",
"`bake()`: ایک تیار شدہ ترکیب لیتا ہے اور کسی بھی ڈیٹا سیٹ پر آپریشنز لاگو کرتا ہے۔\n"
],
"metadata": {
"id": "Yb-7t7XcJaC8"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Prep and bake the recipe\r\n",
"preprocessed_df <- cuisines_recipe %>% \r\n",
" prep() %>% \r\n",
" bake(new_data = NULL) %>% \r\n",
" relocate(cuisine)\r\n",
"\r\n",
"# Display data\r\n",
"preprocessed_df %>% \r\n",
" slice_head(n = 5)\r\n",
"\r\n",
"# Quick summary stats\r\n",
"preprocessed_df %>% \r\n",
" introduce()"
],
"outputs": [],
"metadata": {
"id": "9QhSgdpxJl44"
}
},
{
"cell_type": "markdown",
"source": [
"آئیے اب ہمارے کھانوں کی تقسیم کو چیک کریں اور انہیں غیر متوازن ڈیٹا کے ساتھ موازنہ کریں۔\n"
],
"metadata": {
"id": "dmidELh_LdV7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"new_label_count <- preprocessed_df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"list(new_label_count = new_label_count,\r\n",
" old_label_count = old_label_count)"
],
"outputs": [],
"metadata": {
"id": "aSh23klBLwDz"
}
},
{
"cell_type": "markdown",
"source": [
"یوم! ڈیٹا صاف ستھرا، متوازن، اور بہت مزیدار ہے 😋!\n",
"\n",
"> عام طور پر، ایک نسخہ ماڈلنگ کے لیے بطور پری پروسیسر استعمال ہوتا ہے جہاں یہ وضاحت کرتا ہے کہ ڈیٹا سیٹ پر کون سے اقدامات لاگو کیے جائیں تاکہ اسے ماڈلنگ کے لیے تیار کیا جا سکے۔ اس صورت میں، عام طور پر `workflow()` استعمال کیا جاتا ہے (جیسا کہ ہم نے اپنے پچھلے اسباق میں دیکھا ہے) بجائے اس کے کہ نسخہ کو دستی طور پر تخمینہ لگایا جائے۔\n",
">\n",
"> اسی طرح، جب آپ tidymodels استعمال کرتے ہیں تو آپ کو عام طور پر **`prep()`** اور **`bake()`** نسخے کی ضرورت نہیں ہوتی، لیکن یہ آپ کے ٹول کٹ میں مددگار فنکشنز ہیں تاکہ تصدیق کی جا سکے کہ نسخے وہی کر رہے ہیں جو آپ توقع کرتے ہیں، جیسا کہ ہمارے معاملے میں۔\n",
">\n",
"> جب آپ **`bake()`** کرتے ہیں کسی تیار شدہ نسخے کو **`new_data = NULL`** کے ساتھ، تو آپ کو وہی ڈیٹا واپس ملتا ہے جو آپ نے نسخہ کی تعریف کرتے وقت فراہم کیا تھا، لیکن وہ پہلے سے پروسیسنگ کے مراحل سے گزر چکا ہوتا ہے۔\n",
"\n",
"آئیے اب اس ڈیٹا کی ایک کاپی محفوظ کرتے ہیں تاکہ اسے مستقبل کے اسباق میں استعمال کیا جا سکے:\n"
],
"metadata": {
"id": "HEu80HZ8L7ae"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Save preprocessed data\r\n",
"write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
],
"outputs": [],
"metadata": {
"id": "cBmCbIgrMOI6"
}
},
{
"cell_type": "markdown",
"source": [
"یہ تازہ CSV اب روٹ ڈیٹا فولڈر میں دستیاب ہے۔\n",
"\n",
"**🚀چیلنج**\n",
"\n",
"اس نصاب میں کئی دلچسپ ڈیٹا سیٹس شامل ہیں۔ `data` فولڈرز کو کھنگالیں اور دیکھیں کہ آیا ان میں کوئی ایسا ڈیٹا سیٹ موجود ہے جو بائنری یا ملٹی کلاس کلاسیفیکیشن کے لیے موزوں ہو؟ آپ اس ڈیٹا سیٹ سے کون سے سوالات پوچھیں گے؟\n",
"\n",
"## [**لیکچر کے بعد کا کوئز**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
"\n",
"## **جائزہ اور خود مطالعہ**\n",
"\n",
"- [پیکیج themis](https://github.com/tidymodels/themis) کو دیکھیں۔ غیر متوازن ڈیٹا سے نمٹنے کے لیے ہم کون سی دیگر تکنیک استعمال کر سکتے ہیں؟\n",
"\n",
"- Tidy models [حوالہ ویب سائٹ](https://www.tidymodels.org/start/)۔\n",
"\n",
"- ایچ وکہم اور جی گرولیمند، [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/)۔\n",
"\n",
"#### شکریہ:\n",
"\n",
"[`ایلیسن ہورسٹ`](https://twitter.com/allison_horst/) کا، جنہوں نے حیرت انگیز تصاویر تخلیق کیں جو R کو زیادہ خوش آئند اور دلچسپ بناتی ہیں۔ مزید تصاویر ان کی [گیلری](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) میں دیکھیں۔\n",
"\n",
"[Cassie Breviu](https://www.twitter.com/cassieview) اور [Jen Looper](https://www.twitter.com/jenlooper) کا، جنہوں نے اس ماڈیول کا اصل Python ورژن تخلیق کیا ♥️\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"600\"/>\n",
" <figcaption>تصویر: @allison_horst</figcaption>\n"
],
"metadata": {
"id": "WQs5621pMGwf"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ڈس کلیمر**: \nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے پوری کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستگی ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔\n"
]
}
]
}