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/hr/2-Regression/2-Data/solution/R/lesson_2-R.ipynb

671 lines
23 KiB

{
"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-09-04T07:21:46+00:00",
"source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
"language_code": "hr"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# Izgradnja regresijskog modela: priprema i vizualizacija podataka\n",
"\n",
"## **Linearna regresija za bundeve - Lekcija 2**\n",
"#### Uvod\n",
"\n",
"Sada kada imate alate potrebne za izgradnju modela strojnog učenja koristeći Tidymodels i Tidyverse, spremni ste početi postavljati pitanja o svojim podacima. Dok radite s podacima i primjenjujete rješenja strojnog učenja, vrlo je važno znati kako postaviti pravo pitanje kako biste pravilno iskoristili potencijale svog skupa podataka.\n",
"\n",
"U ovoj lekciji naučit ćete:\n",
"\n",
"- Kako pripremiti podatke za izgradnju modela.\n",
"\n",
"- Kako koristiti `ggplot2` za vizualizaciju podataka.\n",
"\n",
"Pitanje na koje trebate odgovoriti odredit će koju vrstu algoritama strojnog učenja ćete koristiti. Kvaliteta odgovora koji dobijete uvelike će ovisiti o prirodi vaših podataka.\n",
"\n",
"Pogledajmo ovo kroz praktičnu vježbu.\n",
"\n",
"\n",
"<p >\n",
" <img src=\"../../images/unruly_data.jpg\"\n",
" width=\"700\"/>\n",
" <figcaption>Umjetničko djelo @allison_horst</figcaption>\n",
"\n",
"\n",
"<!--![Umjetničko djelo \\@allison_horst](../../../../../../2-Regression/2-Data/images/unruly_data.jpg)<br>Umjetničko djelo \\@allison_horst-->\n"
],
"metadata": {
"id": "Pg5aexcOPqAZ"
}
},
{
"cell_type": "markdown",
"source": [
"## 1. Uvoz podataka o bundevama i pozivanje Tidyverse-a\n",
"\n",
"Trebat ćemo sljedeće pakete za analizu i obradu podataka u ovoj lekciji:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) je [kolekcija R paketa](https://www.tidyverse.org/packages) osmišljena kako bi znanost o podacima bila brža, jednostavnija i zabavnija!\n",
"\n",
"Možete ih instalirati pomoću:\n",
"\n",
"`install.packages(c(\"tidyverse\"))`\n",
"\n",
"Skripta ispod provjerava imate li instalirane potrebne pakete za dovršetak ovog modula i instalira ih za vas ako neki nedostaju.\n"
],
"metadata": {
"id": "dc5WhyVdXAjR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
"pacman::p_load(tidyverse)"
],
"outputs": [],
"metadata": {
"id": "GqPYUZgfXOBt"
}
},
{
"cell_type": "markdown",
"source": [
"Sada pokrenimo neke pakete i učitajmo [podatke](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) koji su osigurani za ovu lekciju!\n"
],
"metadata": {
"id": "kvjDTPDSXRr2"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load the core Tidyverse packages\n",
"library(tidyverse)\n",
"\n",
"# Import the pumpkins data\n",
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
"\n",
"\n",
"# Get a glimpse and dimensions of the data\n",
"glimpse(pumpkins)\n",
"\n",
"\n",
"# Print the first 50 rows of the data set\n",
"pumpkins %>% \n",
" slice_head(n =50)"
],
"outputs": [],
"metadata": {
"id": "VMri-t2zXqgD"
}
},
{
"cell_type": "markdown",
"source": [
"Brzi `glimpse()` odmah pokazuje da postoje praznine i mješavina stringova (`chr`) i numeričkih podataka (`dbl`). `Date` je tipa karakter, a tu je i čudan stupac nazvan `Package` gdje su podaci mješavina između `sacks`, `bins` i drugih vrijednosti. Podaci su, zapravo, pomalo neuredni 😤.\n",
"\n",
"Zapravo, nije baš uobičajeno dobiti dataset koji je potpuno spreman za korištenje u stvaranju ML modela odmah iz kutije. Ali ne brinite, u ovoj lekciji naučit ćete kako pripremiti sirovi dataset koristeći standardne R biblioteke 🧑‍🔧. Također ćete naučiti razne tehnike za vizualizaciju podataka.📈📊\n",
"<br>\n",
"\n",
"> Podsjetnik: Operator cijevi (`%>%`) izvodi operacije u logičnom slijedu prosljeđujući objekt dalje u funkciju ili izraz poziva. Možete zamisliti operator cijevi kao da u vašem kodu kaže \"i onda\".\n"
],
"metadata": {
"id": "REWcIv9yX29v"
}
},
{
"cell_type": "markdown",
"source": [
"## 2. Provjera nedostajućih podataka\n",
"\n",
"Jedan od najčešćih problema s kojima se znanstvenici podataka susreću je nepotpuni ili nedostajući podaci. R predstavlja nedostajuće ili nepoznate vrijednosti posebnim sentinel vrijednostima: `NA` (Not Available).\n",
"\n",
"Kako možemo znati da podatkovni okvir sadrži nedostajuće vrijednosti?\n",
"<br>\n",
"- Jedan jednostavan način bio bi korištenje osnovne R funkcije `anyNA`, koja vraća logičke objekte `TRUE` ili `FALSE`.\n"
],
"metadata": {
"id": "Zxfb3AM5YbUe"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"pumpkins %>% \n",
" anyNA()"
],
"outputs": [],
"metadata": {
"id": "G--DQutAYltj"
}
},
{
"cell_type": "markdown",
"source": [
"Odlično, čini se da nedostaju neki podaci! To je dobro mjesto za početak.\n",
"\n",
"- Drugi način bio bi korištenje funkcije `is.na()` koja pokazuje koji su pojedinačni elementi stupca nedostajući s logičkom vrijednošću `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": [
"U redu, posao je obavljen, ali s velikim podatkovnim okvirom poput ovog, bilo bi neučinkovito i praktički nemoguće pregledati sve redove i stupce pojedinačno😴.\n",
"\n",
"- Intuitivniji način bio bi izračunati zbroj nedostajućih vrijednosti za svaki stupac:\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": [
"Mnogo bolje! Nedostaju neki podaci, ali možda to neće biti važno za zadatak koji je pred nama. Vidjet ćemo što će donijeti daljnja analiza.\n",
"\n",
"> Uz sjajne skupove paketa i funkcija, R ima vrlo dobru dokumentaciju. Na primjer, koristite `help(colSums)` ili `?colSums` kako biste saznali više o funkciji.\n"
],
"metadata": {
"id": "9gv-crB6ZD1Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. Dplyr: Gramatika za manipulaciju podacima\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_wrangling.png\"\n",
" width=\"569\"/>\n",
" <figcaption>Ilustracija: @allison_horst</figcaption>\n",
"\n",
"\n",
"<!--![Ilustracija: \\@allison_horst](../../../../../../2-Regression/2-Data/images/dplyr_wrangling.png)<br/>Ilustracija: \\@allison_horst-->\n"
],
"metadata": {
"id": "o4jLY5-VZO2C"
}
},
{
"cell_type": "markdown",
"source": [
"[`dplyr`](https://dplyr.tidyverse.org/), paket u Tidyverseu, predstavlja gramatiku manipulacije podacima koja pruža dosljedan skup glagola za rješavanje najčešćih izazova u manipulaciji podacima. U ovom dijelu istražit ćemo neke od dplyr-ovih glagola!\n"
],
"metadata": {
"id": "i5o33MQBZWWw"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::select()\n",
"\n",
"`select()` je funkcija u paketu `dplyr` koja vam pomaže odabrati stupce koje želite zadržati ili isključiti.\n",
"\n",
"Kako biste olakšali rad s vašim podatkovnim okvirom, uklonite nekoliko njegovih stupaca koristeći `select()`, zadržavajući samo one stupce koji su vam potrebni.\n",
"\n",
"Na primjer, u ovoj vježbi naša analiza će uključivati stupce `Package`, `Low Price`, `High Price` i `Date`. Odaberimo te stupce.\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()` je funkcija u paketu `dplyr` koja vam omogućuje stvaranje ili izmjenu stupaca, dok postojeći stupci ostaju nepromijenjeni.\n",
"\n",
"Opća struktura funkcije mutate je:\n",
"\n",
"`data %>% mutate(new_column_name = what_it_contains)`\n",
"\n",
"Hajdemo isprobati `mutate` koristeći stupac `Date` i izvršiti sljedeće operacije:\n",
"\n",
"1. Pretvoriti datume (trenutno tipa karakter) u format mjeseca (ovo su datumi iz SAD-a, pa je format `MM/DD/YYYY`).\n",
"\n",
"2. Izvući mjesec iz datuma u novi stupac.\n",
"\n",
"U R-u, paket [lubridate](https://lubridate.tidyverse.org/) olakšava rad s podacima o datumu i vremenu. Dakle, koristit ćemo `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` i vidjeti kako postići gore navedene ciljeve. Možemo ukloniti stupac Date jer nam više neće biti potreban u daljnjim operacijama.\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": [
"Jupi! 🤩\n",
"\n",
"Sljedeće, kreirajmo novi stupac `Price`, koji predstavlja prosječnu cijenu bundeve. Sada, izračunajmo prosjek stupaca `Low Price` i `High Price` kako bismo popunili novi stupac Price. \n",
"<br>\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": [
"Yeees!💪\n",
"\n",
"\"Ali čekaj!\", reći ćeš nakon što brzo pregledaš cijeli skup podataka s `View(pumpkins)`, \"Ovdje nešto ne štima!\"🤔\n",
"\n",
"Ako pogledaš stupac `Package`, bundeve se prodaju u mnogim različitim konfiguracijama. Neke se prodaju u mjerama `1 1/9 bushel`, neke u mjerama `1/2 bushel`, neke po bundevi, neke po funti, a neke u velikim kutijama različitih širina.\n",
"\n",
"Provjerimo ovo:\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": [
"Nevjerojatno!👏\n",
"\n",
"Čini se da je vrlo teško dosljedno vagati bundeve, pa ih filtrirajmo odabirom samo bundeva koje sadrže niz *bushel* u stupcu `Package` i stavimo to u novi podatkovni okvir `new_pumpkins`.\n"
],
"metadata": {
"id": "7sMjiVujaZxY"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::filter() i stringr::str_detect()\n",
"\n",
"[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): stvara podskup podataka koji sadrži samo **redove** koji zadovoljavaju vaše uvjete, u ovom slučaju, bundeve s nizom *bushel* u stupcu `Package`.\n",
"\n",
"[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): otkriva prisutnost ili odsutnost uzorka u nizu.\n",
"\n",
"Paket [`stringr`](https://github.com/tidyverse/stringr) pruža jednostavne funkcije za uobičajene operacije s nizovima.\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": [
"Možete vidjeti da smo suzili na otprilike 415 redaka podataka koji sadrže bundeve po bušelu.🤩 \n",
"<br>\n"
],
"metadata": {
"id": "VrDwF031avlR"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::case_when()\n",
"\n",
"**Ali čekajte! Ima još nešto za napraviti**\n",
"\n",
"Jeste li primijetili da se količina u bušelu razlikuje po redovima? Trebate normalizirati cijene tako da prikazujete cijenu po bušelu, a ne po 1 1/9 ili 1/2 bušela. Vrijeme je za malo matematike kako biste to standardizirali.\n",
"\n",
"Koristit ćemo funkciju [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) za *modifikaciju* stupca Price ovisno o određenim uvjetima. `case_when` omogućuje vektorizaciju više `if_else()` izraza.\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": [
"Sada možemo analizirati cijenu po jedinici na temelju njihove mjere u bušelima. Sve ovo proučavanje bušela bundeva, međutim, pokazuje koliko je `važno` `razumjeti prirodu svojih podataka`!\n",
"\n",
"> ✅ Prema [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), težina bušela ovisi o vrsti proizvoda, budući da je to mjera volumena. \"Bušel rajčica, na primjer, trebao bi težiti 56 funti... Lišće i zelje zauzimaju više prostora s manje težine, pa bušel špinata teži samo 20 funti.\" Sve je to prilično komplicirano! Nemojmo se zamarati pretvaranjem bušela u funte, već radije odredimo cijenu po bušelu. Sve ovo proučavanje bušela bundeva, međutim, pokazuje koliko je važno razumjeti prirodu svojih podataka!\n",
">\n",
"> ✅ Jeste li primijetili da su bundeve koje se prodaju na pola bušela vrlo skupe? Možete li otkriti zašto? Savjet: male bundeve su puno skuplje od velikih, vjerojatno zato što ih ima mnogo više po bušelu, s obzirom na neiskorišteni prostor koji zauzima jedna velika šuplja pita bundeva.\n"
],
"metadata": {
"id": "pS2GNPagbSdb"
}
},
{
"cell_type": "markdown",
"source": [
"Sada, za čisti užitak avanture 💁‍♀️, premjestimo stupac Mjesec na prvu poziciju, tj. `prije` stupca `Paket`.\n",
"\n",
"`dplyr::relocate()` koristi se za promjenu pozicija stupaca.\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": [
"Dobar posao!👌 Sada imate čist i uredan skup podataka na kojem možete izgraditi svoj novi regresijski model!\n"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. Vizualizacija podataka s ggplot2\n",
"\n",
"<p >\n",
" <img src=\"../../images/data-visualization.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Infografika autora Dasani Madipalli</figcaption>\n",
"\n",
"\n",
"<!--![Infografika autora Dasani Madipalli](../../../../../../2-Regression/2-Data/images/data-visualization.png){width=\"600\"}-->\n",
"\n",
"Postoji jedna *mudra* izreka koja kaže:\n",
"\n",
"> \"Jednostavan graf donio je više informacija analitičaru podataka nego bilo koji drugi alat.\" --- John Tukey\n",
"\n",
"Dio uloge znanstvenika za podatke je pokazati kvalitetu i prirodu podataka s kojima rade. Da bi to postigli, često kreiraju zanimljive vizualizacije, poput grafova, dijagrama i tablica, koje prikazuju različite aspekte podataka. Na taj način mogu vizualno prikazati odnose i praznine koje bi inače bilo teško otkriti.\n",
"\n",
"Vizualizacije također mogu pomoći u određivanju tehnike strojnog učenja koja je najprikladnija za određene podatke. Na primjer, raspršeni graf koji slijedi liniju može ukazivati na to da su podaci dobar kandidat za linearnu regresiju.\n",
"\n",
"R nudi nekoliko sustava za izradu grafova, ali [`ggplot2`](https://ggplot2.tidyverse.org/index.html) je jedan od najelegantnijih i najsvestranijih. `ggplot2` omogućuje sastavljanje grafova **kombiniranjem neovisnih komponenti**.\n",
"\n",
"Započnimo s jednostavnim raspršenim grafom za stupce Price i Month.\n",
"\n",
"U ovom slučaju, počet ćemo s [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html), dodati skup podataka i estetsko mapiranje (pomoću [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html)), a zatim dodati slojeve (poput [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) za raspršene grafove.\n"
],
"metadata": {
"id": "mYSH6-EtbvNa"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Set a theme for the plots\n",
"theme_set(theme_light())\n",
"\n",
"# Create a scatter plot\n",
"p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n",
"p + geom_point()"
],
"outputs": [],
"metadata": {
"id": "g2YjnGeOcLo4"
}
},
{
"cell_type": "markdown",
"source": [
"Je li ovo koristan grafikon 🤷? Iznenađuje li vas nešto u vezi s njim?\n",
"\n",
"Nije osobito koristan jer samo prikazuje vaše podatke kao raspršene točke u određenom mjesecu. \n",
"<br>\n"
],
"metadata": {
"id": "Ml7SDCLQcPvE"
}
},
{
"cell_type": "markdown",
"source": [
"### **Kako učiniti podatke korisnima?**\n",
"\n",
"Kako bismo prikazali korisne podatke na grafikonima, obično je potrebno nekako grupirati podatke. Na primjer, u našem slučaju, pronalaženje prosječne cijene bundeva za svaki mjesec pružilo bi više uvida u osnovne obrasce u našim podacima. To nas dovodi do još jednog brzog pregleda **dplyr**:\n",
"\n",
"#### `dplyr::group_by() %>% summarize()`\n",
"\n",
"Grupirana agregacija u R-u može se lako izračunati pomoću\n",
"\n",
"`dplyr::group_by() %>% summarize()`\n",
"\n",
"- `dplyr::group_by()` mijenja jedinicu analize s cijelog skupa podataka na pojedinačne grupe, poput grupiranja po mjesecima.\n",
"\n",
"- `dplyr::summarize()` stvara novi podatkovni okvir s jednim stupcem za svaku grupirajuću varijablu i jednim stupcem za svaku od statistika sažetka koje ste odredili.\n",
"\n",
"Na primjer, možemo koristiti `dplyr::group_by() %>% summarize()` kako bismo grupirali bundeve u grupe na temelju stupca **Month** i zatim pronašli **prosječnu cijenu** za svaki mjesec.\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": [
"Sažeto!✨\n",
"\n",
"Kategorijske značajke, poput mjeseci, bolje su prikazane pomoću stupčastog grafikona 📊. Slojevi odgovorni za stupčaste grafikone su `geom_bar()` i `geom_col()`. Pogledajte `?geom_bar` za više informacija.\n",
"\n",
"Idemo napraviti jedan!\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": [
"🤩🤩Ovo je korisnija vizualizacija podataka! Čini se da pokazuje kako su najviše cijene bundeva u rujnu i listopadu. Odgovara li to vašim očekivanjima? Zašto da ili zašto ne?\n",
"\n",
"Čestitamo na završetku druge lekcije 👏! Pripremili ste svoje podatke za izgradnju modela, a zatim otkrili više uvida koristeći vizualizacije!\n"
],
"metadata": {
"id": "zDm0VOzzcuzR"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Odricanje od odgovornosti**: \nOvaj dokument je preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.\n"
]
}
]
}