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.
671 lines
24 KiB
671 lines
24 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-03T19:46:27+00:00",
|
|
"source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
|
|
"language_code": "lt"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"# Sukurkite regresijos modelį: paruoškite ir vizualizuokite duomenis\n",
|
|
"\n",
|
|
"## **Linijinė regresija moliūgams - Pamoka 2**\n",
|
|
"#### Įvadas\n",
|
|
"\n",
|
|
"Dabar, kai turite įrankius, reikalingus pradėti kurti mašininio mokymosi modelius naudojant Tidymodels ir Tidyverse, esate pasiruošę pradėti užduoti klausimus savo duomenims. Dirbant su duomenimis ir taikant ML sprendimus, labai svarbu mokėti užduoti tinkamus klausimus, kad galėtumėte tinkamai atskleisti savo duomenų potencialą.\n",
|
|
"\n",
|
|
"Šioje pamokoje išmoksite:\n",
|
|
"\n",
|
|
"- Kaip paruošti duomenis modelio kūrimui.\n",
|
|
"\n",
|
|
"- Kaip naudoti `ggplot2` duomenų vizualizacijai.\n",
|
|
"\n",
|
|
"Klausimas, į kurį norite gauti atsakymą, nulems, kokio tipo ML algoritmus naudosite. O atsakymo kokybė labai priklausys nuo jūsų duomenų pobūdžio.\n",
|
|
"\n",
|
|
"Pažiūrėkime, kaip tai veikia praktiniame uždavinyje.\n",
|
|
"\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/unruly_data.jpg\"\n",
|
|
" width=\"700\"/>\n",
|
|
" <figcaption>Piešinys @allison_horst</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--<br>Piešinys \\@allison_horst-->\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Pg5aexcOPqAZ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 1. Moliūgų duomenų importavimas ir Tidyverse įtraukimas\n",
|
|
"\n",
|
|
"Šiai pamokai analizuoti ir apdoroti mums reikės šių paketų:\n",
|
|
"\n",
|
|
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) yra [R paketų rinkinys](https://www.tidyverse.org/packages), sukurtas tam, kad duomenų mokslas būtų greitesnis, paprastesnis ir smagesnis!\n",
|
|
"\n",
|
|
"Galite juos įdiegti taip:\n",
|
|
"\n",
|
|
"`install.packages(c(\"tidyverse\"))`\n",
|
|
"\n",
|
|
"Žemiau pateiktas scenarijus patikrina, ar turite šiam moduliui reikalingus paketus, ir, jei kai kurių trūksta, juos įdiegia.\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": [
|
|
"Dabar paleiskime keletą paketų ir įkelkime [duomenis](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), pateiktus šiai pamokai!\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": [
|
|
"Greitas `glimpse()` iš karto parodo, kad yra tuščių reikšmių ir maišytų duomenų tipų: tekstinių (`chr`) ir skaitinių (`dbl`). `Date` yra tekstinio tipo, o taip pat yra keista stulpelis, vadinamas `Package`, kur duomenys yra maišyti tarp `sacks`, `bins` ir kitų reikšmių. Duomenys, tiesą sakant, yra šiek tiek netvarkingi 😤.\n",
|
|
"\n",
|
|
"Iš tiesų, retai pasitaiko gauti duomenų rinkinį, kuris būtų visiškai paruoštas naudoti kuriant ML modelį iš karto. Bet nesijaudinkite, šiame pamokoje išmoksite, kaip paruošti neapdorotą duomenų rinkinį naudojant standartines R bibliotekas 🧑🔧. Taip pat išmoksite įvairių technikų, kaip vizualizuoti duomenis.📈📊\n",
|
|
"<br>\n",
|
|
"\n",
|
|
"> Primename: Vamzdžio operatorius (`%>%`) atlieka operacijas logine seka, perduodamas objektą į priekį į funkciją arba iškvietimo išraišką. Galite galvoti apie vamzdžio operatorių kaip \"ir tada\" savo kode.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "REWcIv9yX29v"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 2. Patikrinkite, ar nėra trūkstamų duomenų\n",
|
|
"\n",
|
|
"Viena iš dažniausiai pasitaikančių problemų, su kuriomis susiduria duomenų mokslininkai, yra neišsamūs arba trūkstami duomenys. R trūkstamas arba nežinomas reikšmes žymi specialia žymeklio reikšme: `NA` (Not Available).\n",
|
|
"\n",
|
|
"Taigi, kaip sužinoti, ar duomenų rėmelis turi trūkstamų reikšmių?\n",
|
|
"<br>\n",
|
|
"- Vienas paprastas būdas būtų naudoti bazinę R funkciją `anyNA`, kuri grąžina loginį objektą `TRUE` arba `FALSE`.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Zxfb3AM5YbUe"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"pumpkins %>% \n",
|
|
" anyNA()"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "G--DQutAYltj"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Puiku, atrodo, kad trūksta kai kurių duomenų! Tai gera vieta pradėti.\n",
|
|
"\n",
|
|
"- Kitas būdas būtų naudoti funkciją `is.na()`, kuri nurodo, kurie atskiri stulpelio elementai yra trūkstami, pažymėdama juos logine reikšme `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": [
|
|
"Gerai, darbas atliktas, tačiau su tokia didele duomenų lentele būtų neefektyvu ir praktiškai neįmanoma peržiūrėti visų eilučių ir stulpelių atskirai😴.\n",
|
|
"\n",
|
|
"- Intuityvesnis būdas būtų apskaičiuoti trūkstamų reikšmių sumą kiekvienam stulpeliui:\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": [
|
|
"Daug geriau! Trūksta duomenų, bet galbūt tai nesutrukdys atlikti užduotį. Pažiūrėkime, ką atneš tolimesnė analizė.\n",
|
|
"\n",
|
|
"> Be nuostabių paketų ir funkcijų rinkinių, R turi labai gerą dokumentaciją. Pavyzdžiui, naudokite `help(colSums)` arba `?colSums`, kad sužinotumėte daugiau apie šią funkciją.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "9gv-crB6ZD1Y"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 3. Dplyr: Duomenų manipuliavimo gramatika\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/dplyr_wrangling.png\"\n",
|
|
" width=\"569\"/>\n",
|
|
" <figcaption>Piešinys sukurtas @allison_horst</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--<br/>Piešinys sukurtas \\@allison_horst-->\n"
|
|
],
|
|
"metadata": {
|
|
"id": "o4jLY5-VZO2C"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"[`dplyr`](https://dplyr.tidyverse.org/), Tidyverse paketas, yra duomenų manipuliavimo gramatika, kuri siūlo nuoseklų veiksmų rinkinį, padedantį spręsti dažniausiai pasitaikančius duomenų manipuliavimo iššūkius. Šioje dalyje apžvelgsime keletą dplyr veiksmų!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "i5o33MQBZWWw"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"#### dplyr::select()\n",
|
|
"\n",
|
|
"`select()` yra funkcija pakete `dplyr`, kuri padeda pasirinkti stulpelius, kuriuos norite išsaugoti arba pašalinti.\n",
|
|
"\n",
|
|
"Kad jūsų duomenų rėmelis būtų lengviau naudojamas, pašalinkite kelis jo stulpelius, naudodami `select()`, palikdami tik tuos stulpelius, kurių jums reikia.\n",
|
|
"\n",
|
|
"Pavyzdžiui, šiame pratime mūsų analizė apims stulpelius `Package`, `Low Price`, `High Price` ir `Date`. Pasirinkime šiuos stulpelius.\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()` yra funkcija iš paketo `dplyr`, kuri padeda kurti arba keisti stulpelius, išlaikant esamus stulpelius.\n",
|
|
"\n",
|
|
"Bendras `mutate` struktūros pavyzdys:\n",
|
|
"\n",
|
|
"`data %>% mutate(new_column_name = what_it_contains)`\n",
|
|
"\n",
|
|
"Pažvelkime, kaip veikia `mutate`, naudodami `Date` stulpelį ir atlikdami šiuos veiksmus:\n",
|
|
"\n",
|
|
"1. Konvertuokime datas (šiuo metu jos yra tipo character) į mėnesio formatą (tai yra JAV datos, todėl formatas yra `MM/DD/YYYY`).\n",
|
|
"\n",
|
|
"2. Ištraukime mėnesį iš datų į naują stulpelį.\n",
|
|
"\n",
|
|
"R kalboje paketas [lubridate](https://lubridate.tidyverse.org/) palengvina darbą su datos-laiko duomenimis. Taigi, pasinaudokime `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` ir pažiūrėkime, kaip pasiekti aukščiau nurodytus tikslus. Galime pašalinti `Date` stulpelį, nes jo nebereikės tolimesnėse operacijose.\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": [
|
|
"Oho! 🤩\n",
|
|
"\n",
|
|
"Dabar sukurkime naują stulpelį `Price`, kuris atspindės vidutinę moliūgo kainą. Dabar paimkime `Low Price` ir `High Price` stulpelių vidurkį, kad užpildytume naująjį stulpelį 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": [
|
|
"Taip!💪\n",
|
|
"\n",
|
|
"„Bet palauk!“, pasakysite peržiūrėję visą duomenų rinkinį su `View(pumpkins)`, „Čia kažkas keisto!“🤔\n",
|
|
"\n",
|
|
"Jei pažvelgsite į `Package` stulpelį, moliūgai parduodami įvairiomis konfigūracijomis. Kai kurie parduodami `1 1/9 bushel` matu, kai kurie `1/2 bushel` matu, kai kurie pagal moliūgą, kai kurie pagal svorį, o kai kurie didelėse dėžėse su skirtingais pločiais.\n",
|
|
"\n",
|
|
"Patikrinkime tai:\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": [
|
|
"Nuostabu!👏\n",
|
|
"\n",
|
|
"Moliūgus atrodo labai sunku sverti nuosekliai, todėl filtruokime juos, pasirinkdami tik tuos moliūgus, kurių `Package` stulpelyje yra žodis *bushel*, ir sudėkime tai į naują duomenų rėmelį `new_pumpkins`.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "7sMjiVujaZxY"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"#### dplyr::filter() ir stringr::str_detect()\n",
|
|
"\n",
|
|
"[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): sukuria duomenų poskyrį, kuriame yra tik tos **eilutės**, kurios atitinka jūsų sąlygas, šiuo atveju moliūgai, kurių stulpelyje `Package` yra žodis *bushel*.\n",
|
|
"\n",
|
|
"[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): nustato, ar eilutėje yra tam tikras raštas, ar jo nėra.\n",
|
|
"\n",
|
|
"[`stringr`](https://github.com/tidyverse/stringr) paketas suteikia paprastas funkcijas dažniausiai atliekamoms operacijoms su eilutėmis.\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": [
|
|
"Galite matyti, kad mes susiaurinome iki maždaug 415 eilučių duomenų, kuriuose yra moliūgai pagal statinę.🤩\n"
|
|
],
|
|
"metadata": {
|
|
"id": "VrDwF031avlR"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"#### dplyr::case_when()\n",
|
|
"\n",
|
|
"**Bet palaukite! Yra dar vienas dalykas, kurį reikia padaryti**\n",
|
|
"\n",
|
|
"Ar pastebėjote, kad kiekis skiriasi kiekvienoje eilutėje? Jums reikia normalizuoti kainodarą, kad būtų rodoma kaina už vieną bušelį, o ne už 1 1/9 ar 1/2 bušelio. Laikas atlikti keletą skaičiavimų, kad tai standartizuotumėte.\n",
|
|
"\n",
|
|
"Naudosime funkciją [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html), kad *pakeistume* Price stulpelį pagal tam tikras sąlygas. `case_when` leidžia vektorizuoti kelis `if_else()` teiginius.\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": [
|
|
"Dabar galime analizuoti kainas už vienetą, remdamiesi jų matavimu bušeliais. Visa ši bušelių moliūgų analizė, tačiau, parodo, kaip labai `svarbu` yra `suprasti savo duomenų prigimtį`!\n",
|
|
"\n",
|
|
"> ✅ Pasak [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), bušelio svoris priklauso nuo produkto tipo, nes tai yra tūrio matas. \"Pavyzdžiui, pomidorų bušelis turėtų sverti 56 svarus... Lapai ir žalumynai užima daugiau vietos su mažesniu svoriu, todėl špinatų bušelis sveria tik 20 svarų.\" Viskas gana sudėtinga! Nesivarginkime konvertuoti bušelių į svarus, o vietoj to nustatykime kainą pagal bušelį. Visa ši bušelių moliūgų analizė, tačiau, parodo, kaip labai svarbu yra suprasti savo duomenų prigimtį!\n",
|
|
">\n",
|
|
"> ✅ Ar pastebėjote, kad moliūgai, parduodami pusbušeliais, yra labai brangūs? Ar galite suprasti kodėl? Užuomina: maži moliūgai yra daug brangesni nei dideli, tikriausiai todėl, kad jų bušelyje yra daug daugiau, atsižvelgiant į nepanaudotą vietą, kurią užima vienas didelis tuščiaviduris pyrago moliūgas.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "pS2GNPagbSdb"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Dabar galiausiai, dėl nuotykių dvasios 💁♀️, perkelkime stulpelį „Mėnuo“ į pirmąją poziciją, t. y. „prieš“ stulpelį „Paketas“.\n",
|
|
"\n",
|
|
"Funkcija `dplyr::relocate()` naudojama stulpelių pozicijoms pakeisti.\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": [
|
|
"Puikus darbas!👌 Dabar turite švarią, tvarkingą duomenų bazę, ant kurios galite kurti savo naują regresijos modelį!\n",
|
|
"<br>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "y8TJ0Za_bn5Y"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 4. Duomenų vizualizacija su ggplot2\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/data-visualization.png\"\n",
|
|
" width=\"600\"/>\n",
|
|
" <figcaption>Infografikas sukurtas Dasani Madipalli</figcaption>\n",
|
|
"\n",
|
|
"\n",
|
|
"<!--{width=\"600\"}-->\n",
|
|
"\n",
|
|
"Yra *išmintingas* posakis, kuris skamba taip:\n",
|
|
"\n",
|
|
"> \"Paprastas grafikas suteikė daugiau informacijos duomenų analitikui nei bet kuris kitas įrankis.\" --- John Tukey\n",
|
|
"\n",
|
|
"Duomenų mokslininko vaidmuo yra parodyti duomenų kokybę ir pobūdį, su kuriais jis dirba. Tam jie dažnai kuria įdomias vizualizacijas, arba diagramas, grafikus ir lenteles, atskleidžiančias skirtingus duomenų aspektus. Tokiu būdu jie gali vizualiai parodyti ryšius ir spragas, kurių kitaip būtų sunku pastebėti.\n",
|
|
"\n",
|
|
"Vizualizacijos taip pat gali padėti nustatyti, kuris mašininio mokymosi metodas yra tinkamiausias duomenims. Pavyzdžiui, sklaidos diagrama, kuri atrodo kaip linija, rodo, kad duomenys yra tinkami linijinės regresijos užduočiai.\n",
|
|
"\n",
|
|
"R siūlo keletą sistemų grafikai kurti, tačiau [`ggplot2`](https://ggplot2.tidyverse.org/index.html) yra viena elegantiškiausių ir universaliausių. `ggplot2` leidžia kurti grafikus **sujungiant nepriklausomus komponentus**.\n",
|
|
"\n",
|
|
"Pradėkime nuo paprastos sklaidos diagramos, kurioje bus Price ir Month stulpeliai.\n",
|
|
"\n",
|
|
"Taigi šiuo atveju pradėsime nuo [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html), pateiksime duomenų rinkinį ir estetinį žemėlapį (su [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html)), o tada pridėsime sluoksnius (pvz., [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) sklaidos diagramoms.\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": [
|
|
"Ar tai naudingas siužetas 🤷? Ar kas nors jame jus nustebina?\n",
|
|
"\n",
|
|
"Jis nėra ypač naudingas, nes viskas, ką jis daro, tai rodo jūsų duomenis kaip taškų išsidėstymą tam tikrą mėnesį.\n",
|
|
"<br>\n"
|
|
],
|
|
"metadata": {
|
|
"id": "Ml7SDCLQcPvE"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"### **Kaip padaryti tai naudingą?**\n",
|
|
"\n",
|
|
"Norint, kad diagramos rodytų naudingus duomenis, paprastai reikia kažkaip sugrupuoti duomenis. Pavyzdžiui, mūsų atveju, vidutinės moliūgų kainos nustatymas kiekvienam mėnesiui suteiktų daugiau įžvalgų apie pagrindinius duomenų modelius. Tai veda mus prie dar vieno **dplyr** apžvalgos:\n",
|
|
"\n",
|
|
"#### `dplyr::group_by() %>% summarize()`\n",
|
|
"\n",
|
|
"Grupinė agregacija R kalboje gali būti lengvai apskaičiuota naudojant\n",
|
|
"\n",
|
|
"`dplyr::group_by() %>% summarize()`\n",
|
|
"\n",
|
|
"- `dplyr::group_by()` pakeičia analizės vienetą nuo viso duomenų rinkinio į atskiras grupes, tokias kaip mėnesiai.\n",
|
|
"\n",
|
|
"- `dplyr::summarize()` sukuria naują duomenų rėmelį su viena stulpeliu kiekvienam grupavimo kintamajam ir viena stulpeliu kiekvienai jūsų nurodytai suvestinės statistikai.\n",
|
|
"\n",
|
|
"Pavyzdžiui, mes galime naudoti `dplyr::group_by() %>% summarize()` tam, kad sugrupuotume moliūgus pagal **Month** stulpelį ir tada rastume **vidutinę kainą** kiekvienam mėnesiui.\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": [
|
|
"Trumpai!✨\n",
|
|
"\n",
|
|
"Kategoriniai požymiai, tokie kaip mėnesiai, geriausiai pateikiami naudojant stulpelinę diagramą 📊. Už stulpelinių diagramų atsakingi sluoksniai yra `geom_bar()` ir `geom_col()`. Norėdami sužinoti daugiau, peržiūrėkite `?geom_bar`.\n",
|
|
"\n",
|
|
"Sukurkime vieną!\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": [
|
|
"🤩🤩Tai naudingesnė duomenų vizualizacija! Panašu, kad didžiausia moliūgų kaina yra rugsėjį ir spalį. Ar tai atitinka jūsų lūkesčius? Kodėl taip arba kodėl ne?\n",
|
|
"\n",
|
|
"Sveikinimai baigus antrąją pamoką 👏! Jūs paruošėte savo duomenis modelio kūrimui, o tada atskleidėte daugiau įžvalgų naudodami vizualizacijas!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "zDm0VOzzcuzR"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"\n---\n\n**Atsakomybės apribojimas**: \nŠis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Dėl svarbios informacijos rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.\n"
|
|
]
|
|
}
|
|
]
|
|
} |