{ "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-09-06T14:58:56+00:00", "source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb", "language_code": "sw" } }, "cells": [ { "cell_type": "markdown", "source": [], "metadata": { "id": "ItETB4tSFprR" } }, { "cell_type": "markdown", "source": [ "## Utangulizi wa uainishaji: Kusafisha, kuandaa, na kuonyesha data yako\n", "\n", "Katika masomo haya manne, utachunguza kipengele muhimu cha ujifunzaji wa mashine wa kawaida - *uainishaji*. Tutapitia matumizi ya algoriti mbalimbali za uainishaji kwa kutumia seti ya data kuhusu vyakula vya ajabu vya Asia na India. Tumaini una njaa!\n", "\n", "

\n", " \n", "

Sherehekea vyakula vya pan-Asia katika masomo haya! Picha na Jen Looper
\n", "\n", "\n", "\n", "\n", "Uainishaji ni aina ya [ujifunzaji unaosimamiwa](https://wikipedia.org/wiki/Supervised_learning) ambao una mfanano mkubwa na mbinu za regression. Katika uainishaji, unafundisha modeli kutabiri ni `kategoria` gani kipengele fulani kinachohusiana nacho. Ikiwa ujifunzaji wa mashine unahusu kutabiri thamani au majina ya vitu kwa kutumia seti za data, basi uainishaji kwa ujumla unagawanyika katika makundi mawili: *uainishaji wa binary* na *uainishaji wa multiclass*.\n", "\n", "Kumbuka:\n", "\n", "- **Linear regression** ilikusaidia kutabiri uhusiano kati ya vigezo na kufanya utabiri sahihi kuhusu mahali ambapo kipengele kipya kingeangukia kwa uhusiano na mstari huo. Kwa mfano, ungeweza kutabiri thamani ya nambari kama vile *bei ya malenge itakuwa kiasi gani mwezi wa Septemba dhidi ya Desemba*.\n", "\n", "- **Logistic regression** ilikusaidia kugundua \"kategoria za binary\": kwa kiwango hiki cha bei, *je, malenge hili ni la rangi ya machungwa au si la machungwa*?\n", "\n", "Uainishaji hutumia algoriti mbalimbali kuamua njia nyingine za kutambua lebo au darasa la kipengele cha data. Hebu tufanye kazi na data hii ya vyakula ili kuona kama, kwa kuangalia kikundi cha viungo, tunaweza kuamua asili ya vyakula hivyo.\n", "\n", "### [**Jaribio la awali la somo**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n", "\n", "### **Utangulizi**\n", "\n", "Uainishaji ni moja ya shughuli za msingi za mtafiti wa ujifunzaji wa mashine na mwanasayansi wa data. Kutoka uainishaji wa msingi wa thamani ya binary (\"je, barua pepe hii ni spam au si spam?\"), hadi uainishaji wa picha ngumu na kugawanya kwa kutumia maono ya kompyuta, daima ni muhimu kuwa na uwezo wa kupanga data katika madarasa na kuuliza maswali kuhusu data hiyo.\n", "\n", "Kwa kusema mchakato kwa njia ya kisayansi zaidi, mbinu yako ya uainishaji inaunda modeli ya utabiri inayokuwezesha kuonyesha uhusiano kati ya vigezo vya ingizo na vigezo vya matokeo.\n", "\n", "

\n", " \n", "

Masuala ya binary dhidi ya multiclass kwa algoriti za uainishaji kushughulikia. Infographic na Jen Looper
\n", "\n", "\n", "\n", "Kabla ya kuanza mchakato wa kusafisha data yetu, kuionyesha, na kuandaa kwa kazi zetu za ML, hebu tujifunze kidogo kuhusu njia mbalimbali ambazo ujifunzaji wa mashine unaweza kutumika kuainisha data.\n", "\n", "Iliyotokana na [takwimu](https://wikipedia.org/wiki/Statistical_classification), uainishaji kwa kutumia ujifunzaji wa mashine wa kawaida hutumia vipengele, kama vile `smoker`, `weight`, na `age` kuamua *uwezekano wa kupata ugonjwa X*. Kama mbinu ya ujifunzaji unaosimamiwa inayofanana na mazoezi ya regression uliyofanya awali, data yako ina lebo na algoriti za ML hutumia lebo hizo kuainisha na kutabiri madarasa (au 'vipengele') vya seti ya data na kuyapanga katika kikundi au matokeo.\n", "\n", "โœ… Chukua muda kufikiria seti ya data kuhusu vyakula. Je, modeli ya multiclass ingeweza kujibu nini? Je, modeli ya binary ingeweza kujibu nini? Je, ungependa kuamua kama chakula fulani kina uwezekano wa kutumia fenugreek? Je, ungependa kuona kama, ukipewa zawadi ya mfuko wa mboga uliojaa star anise, artichokes, cauliflower, na horseradish, ungeweza kuunda chakula cha kawaida cha Kihindi?\n", "\n", "### **Habari 'classifier'**\n", "\n", "Swali tunalotaka kuuliza kuhusu seti hii ya data ya vyakula ni swali la **multiclass**, kwa kuwa tuna vyakula vya kitaifa kadhaa vya kufanya kazi navyo. Ukipewa kundi la viungo, ni darasa gani kati ya haya mengi data itafaa?\n", "\n", "Tidymodels inatoa algoriti mbalimbali za kutumia kuainisha data, kulingana na aina ya tatizo unalotaka kutatua. Katika masomo mawili yajayo, utajifunza kuhusu baadhi ya algoriti hizi.\n", "\n", "#### **Mahitaji ya awali**\n", "\n", "Kwa somo hili, tutahitaji vifurushi vifuatavyo kusafisha, kuandaa na kuonyesha data yetu:\n", "\n", "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ni [mkusanyiko wa vifurushi vya R](https://www.tidyverse.org/packages) iliyoundwa kufanya sayansi ya data kuwa ya haraka, rahisi na ya kufurahisha!\n", "\n", "- `tidymodels`: Mfumo wa [tidymodels](https://www.tidymodels.org/) ni [mkusanyiko wa vifurushi](https://www.tidymodels.org/packages/) kwa ajili ya uundaji wa modeli na ujifunzaji wa mashine.\n", "\n", "- `DataExplorer`: Kifurushi cha [DataExplorer](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) kinalenga kurahisisha na kuendesha mchakato wa EDA na uzalishaji wa ripoti.\n", "\n", "- `themis`: Kifurushi cha [themis](https://themis.tidymodels.org/) kinatoa Hatua za Ziada za Mapishi kwa Kushughulikia Data Isiyosawazishwa.\n", "\n", "Unaweza kuvifunga kwa:\n", "\n", "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n", "\n", "Vinginevyo, script iliyo hapa chini inakagua kama una vifurushi vinavyohitajika kukamilisha moduli hii na kuvifunga kwako endapo vinakosekana.\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": [ "Tutapakia baadaye vifurushi hivi vya ajabu na kuvifanya viweze kupatikana katika kikao chetu cha sasa cha R. (Hii ni kwa madhumuni ya maelezo tu, `pacman::p_load()` tayari ilifanya hivyo kwako)\n" ], "metadata": { "id": "YkKAxOJvGD4C" } }, { "cell_type": "markdown", "source": [ "## Zoezi - safisha na linganisha data yako\n", "\n", "Kazi ya kwanza kabla ya kuanza mradi huu ni kusafisha na **kulinganisha** data yako ili kupata matokeo bora.\n", "\n", "Hebu tukutane na data!๐Ÿ•ต๏ธ\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": [ "Inavutia! Kwa kuangalia, safu ya kwanza ni aina ya safu ya `id`. Hebu tupate maelezo zaidi kuhusu data.\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": [ "Kutoka kwa matokeo, tunaweza kuona mara moja kwamba tuna `2448` safu na `385` nguzo na `0` thamani zilizokosekana. Pia tuna safu moja ya kidhahania, *cuisine*.\n", "\n", "## Zoezi - kujifunza kuhusu vyakula\n", "\n", "Sasa kazi inaanza kuwa ya kuvutia zaidi. Hebu tugundue usambazaji wa data, kwa kila aina ya chakula.\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": [ "Kuna idadi ndogo ya vyakula, lakini usambazaji wa data hauko sawa. Unaweza kurekebisha hilo! Kabla ya kufanya hivyo, chunguza kidogo zaidi.\n", "\n", "Sasa, wacha tugawanye kila aina ya chakula kwenye tibble yake binafsi na tujue ni kiasi gani cha data kinapatikana (safu, nguzo) kwa kila aina ya chakula.\n", "\n", "> [Tibble](https://tibble.tidyverse.org/) ni fremu ya data ya kisasa.\n", "\n", "

\n", " \n", "

Sanaa na @allison_horst
\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": [ "## **Zoezi - Kugundua viungo bora kwa kila aina ya vyakula kwa kutumia dplyr**\n", "\n", "Sasa unaweza kuchunguza zaidi data na kujifunza viungo vya kawaida kwa kila aina ya vyakula. Unapaswa kuondoa data inayojirudia ambayo inasababisha mkanganyiko kati ya aina za vyakula, kwa hivyo hebu tujifunze kuhusu tatizo hili.\n", "\n", "Tengeneza kazi `create_ingredient()` katika R ambayo inarudisha dataframe ya viungo. Kazi hii itaanza kwa kuondoa safu isiyo ya msaada na kuchambua viungo kulingana na idadi yao.\n", "\n", "Muundo wa msingi wa kazi katika R ni:\n", "\n", "`myFunction <- function(arglist){`\n", "\n", "**`...`**\n", "\n", "**`return`**`(value)`\n", "\n", "`}`\n", "\n", "Utangulizi mzuri wa kazi za R unaweza kupatikana [hapa](https://skirmer.github.io/presentations/functions_with_r.html#1).\n", "\n", "Hebu tuanze moja kwa moja! Tutatumia [vitenzi vya dplyr](https://dplyr.tidyverse.org/) ambavyo tumekuwa tukijifunza katika masomo yetu ya awali. Kama ukumbusho:\n", "\n", "- `dplyr::select()`: hukusaidia kuchagua ni **safu** zipi za kuweka au kuondoa.\n", "\n", "- `dplyr::pivot_longer()`: hukusaidia \"kurefusha\" data, kuongeza idadi ya safu na kupunguza idadi ya safu wima.\n", "\n", "- `dplyr::group_by()` na `dplyr::summarise()`: hukusaidia kupata takwimu za muhtasari kwa vikundi tofauti, na kuziweka katika jedwali zuri.\n", "\n", "- `dplyr::filter()`: huunda subset ya data inayojumuisha tu safu zinazokidhi masharti yako.\n", "\n", "- `dplyr::mutate()`: hukusaidia kuunda au kurekebisha safu wima.\n", "\n", "Angalia [mafunzo ya learnr yaliyojaa *sanaa*](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) na Allison Horst, ambayo yanatambulisha baadhi ya kazi muhimu za kushughulikia data katika dplyr *(sehemu ya 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": [ "Sasa tunaweza kutumia kazi hii kupata wazo la viungo kumi maarufu zaidi kwa kila aina ya vyakula. Hebu tuijaribu na `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": [ "Katika sehemu iliyopita, tulitumia `geom_col()`, hebu tuone jinsi unavyoweza kutumia `geom_bar` pia, kuunda chati za mstari. Tumia `?geom_bar` kwa kusoma zaidi.\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": [], "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": [ "Vipi kuhusu vyakula vya Kichina?\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": [], "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": [], "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": [ "Kutokana na taswira za data, sasa tunaweza kuondoa viungo vya kawaida zaidi vinavyosababisha mkanganyiko kati ya vyakula tofauti, kwa kutumia `dplyr::select()`.\n", "\n", "Kila mtu anapenda mchele, vitunguu saumu na tangawizi!\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": [ "## Kuchakata data kwa kutumia mapishi ๐Ÿ‘ฉโ€๐Ÿณ๐Ÿ‘จโ€๐Ÿณ - Kushughulikia data isiyo na uwiano โš–๏ธ\n", "\n", "

\n", " \n", "

Uchoraji na @allison_horst
\n", "\n", "Kwa kuwa somo hili linahusu vyakula, tunapaswa kuweka `mapishi` katika muktadha.\n", "\n", "Tidymodels inatoa kifurushi kingine kizuri: `recipes` - kifurushi cha kuchakata data.\n" ], "metadata": { "id": "kkFd-JxdIaL6" } }, { "cell_type": "markdown", "source": [ "Tuchunguze tena usambazaji wa vyakula vyetu.\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": [ "Kama unavyoona, kuna usambazaji usio sawa kabisa katika idadi ya vyakula. Vyakula vya Kikorea ni karibu mara tatu ya vyakula vya Kithai. Data isiyo na uwiano mara nyingi ina athari mbaya kwenye utendaji wa modeli. Fikiria kuhusu uainishaji wa binary. Ikiwa data yako nyingi ni ya darasa moja, modeli ya ML itaelekea kutabiri darasa hilo mara kwa mara, kwa sababu kuna data zaidi kwa ajili yake. Kusawazisha data huchukua data iliyopotoshwa na husaidia kuondoa uwiano huu. Modeli nyingi hufanya kazi vizuri zaidi wakati idadi ya uchunguzi ni sawa na, kwa hivyo, huwa na changamoto na data isiyo na uwiano.\n", "\n", "Kuna njia kuu mbili za kushughulikia seti za data zisizo na uwiano:\n", "\n", "- kuongeza uchunguzi kwenye darasa la wachache: `Over-sampling` mfano kutumia algorithimu ya SMOTE\n", "\n", "- kuondoa uchunguzi kutoka darasa la walio wengi: `Under-sampling`\n", "\n", "Sasa wacha tuonyeshe jinsi ya kushughulikia seti za data zisizo na uwiano kwa kutumia `recipe`. Recipe inaweza kufikiriwa kama ramani inayoelezea hatua gani zinapaswa kutumika kwenye seti ya data ili kuifanya iwe tayari kwa uchambuzi wa data.\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": [ "Tuchambue hatua zetu za awali za usindikaji.\n", "\n", "- Simu ya `recipe()` na fomula inaambia recipe *majukumu* ya vigezo kwa kutumia data ya `df_select` kama rejeleo. Kwa mfano, safu ya `cuisine` imepewa jukumu la `outcome` huku safu nyingine zimepewa jukumu la `predictor`.\n", "\n", "- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) inaunda *maelezo maalum* ya hatua ya recipe ambayo huzalisha mifano mipya ya darasa la wachache kwa kutumia majirani wa karibu wa kesi hizi.\n", "\n", "Sasa, ikiwa tungependa kuona data iliyosindikwa, tungehitaji [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) na [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) recipe yetu.\n", "\n", "`prep()`: inakadiria vigezo vinavyohitajika kutoka kwenye seti ya mafunzo ambavyo vinaweza kutumika baadaye kwenye seti nyingine za data.\n", "\n", "`bake()`: inachukua recipe iliyosindikwa na kutumia operesheni kwenye seti yoyote ya data.\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": [ "Hebu sasa tukague usambazaji wa vyakula vyetu na tuvilinganishe na data isiyo na uwiano.\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": [ "Yum! Takwimu ni safi, zenye uwiano mzuri, na ladha tamu sana ๐Ÿ˜‹!\n", "\n", "> Kwa kawaida, mapishi hutumika kama mchakato wa awali wa kuandaa modeli ambapo hufafanua hatua gani zinapaswa kutekelezwa kwenye seti ya data ili kuifanya iwe tayari kwa modeli. Katika hali hiyo, `workflow()` kwa kawaida hutumika (kama tulivyoona katika masomo yetu ya awali) badala ya kukadiria mapishi kwa mikono.\n", ">\n", "> Kwa hivyo, kwa kawaida huhitaji kutumia **`prep()`** na **`bake()`** mapishi unapotumia tidymodels, lakini ni kazi muhimu kuwa nazo kwenye zana zako ili kuthibitisha kwamba mapishi yanafanya kile unachotarajia kama ilivyo katika hali yetu.\n", ">\n", "> Unapofanya **`bake()`** kwenye mapishi yaliyotayarishwa kwa **`new_data = NULL`**, unapata data uliyotoa wakati wa kufafanua mapishi, lakini ikiwa imepitia hatua za usindikaji wa awali.\n", "\n", "Sasa tuweke nakala ya data hii kwa matumizi ya masomo ya baadaye:\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 mpya sasa inaweza kupatikana katika folda kuu ya data.\n", "\n", "**๐Ÿš€Changamoto**\n", "\n", "Mtaala huu una seti kadhaa za data za kuvutia. Chunguza folda za `data` na uone kama kuna seti za data zinazofaa kwa uainishaji wa binary au wa darasa nyingi? Ni maswali gani ungeuliza kuhusu seti hii ya data?\n", "\n", "## [**Jaribio baada ya somo**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n", "\n", "## **Mapitio na Kujisomea**\n", "\n", "- Angalia [pakiti ya themis](https://github.com/tidymodels/themis). Ni mbinu gani nyingine tunaweza kutumia kushughulikia data isiyo na uwiano?\n", "\n", "- Tovuti ya marejeleo ya [Tidy models](https://www.tidymodels.org/start/).\n", "\n", "- H. Wickham na G. Grolemund, [*R kwa Sayansi ya Data: Kuonyesha, Kuelekeza, Kubadilisha, Kupanga, na Kuingiza Data*](https://r4ds.had.co.nz/).\n", "\n", "#### ASANTE KWA:\n", "\n", "[`Allison Horst`](https://twitter.com/allison_horst/) kwa kuunda michoro ya kushangaza inayofanya R kuwa ya kuvutia na ya kupendeza zaidi. Pata michoro zaidi katika [galeria yake](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) na [Jen Looper](https://www.twitter.com/jenlooper) kwa kuunda toleo la awali la moduli hii kwa Python โ™ฅ๏ธ\n", "\n", "

\n", " \n", "

Sanaa na @allison_horst
\n" ], "metadata": { "id": "WQs5621pMGwf" } }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**Kanusho**: \nHati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kuhakikisha usahihi, tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutokuelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.\n" ] } ] }