{ "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:23:19+00:00", "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", "language_code": "hu" } }, "cells": [ { "cell_type": "markdown", "source": [ "# Készítsünk regressziós modellt: adatok előkészítése és vizualizálása\n", "\n", "## **Lineáris regresszió tökök esetében - 2. lecke**\n", "#### Bevezetés\n", "\n", "Most, hogy rendelkezésedre állnak azok az eszközök, amelyekkel elkezdheted a gépi tanulási modellek építését a Tidymodels és a Tidyverse segítségével, készen állsz arra, hogy kérdéseket tegyél fel az adataiddal kapcsolatban. Amikor adatokkal dolgozol és gépi tanulási megoldásokat alkalmazol, rendkívül fontos, hogy megtanuld, hogyan tegyél fel megfelelő kérdéseket, hogy teljes mértékben kiaknázhasd az adathalmazod lehetőségeit.\n", "\n", "Ebben a leckében megtanulod:\n", "\n", "- Hogyan készítsd elő az adataidat a modellépítéshez.\n", "\n", "- Hogyan használd a `ggplot2`-t az adatok vizualizálásához.\n", "\n", "Az a kérdés, amelyre választ szeretnél kapni, meghatározza, hogy milyen típusú gépi tanulási algoritmusokat fogsz alkalmazni. Az általad kapott válasz minősége pedig nagyban függ az adataid természetétől.\n", "\n", "Nézzük meg ezt egy gyakorlati példán keresztül.\n", "\n", "\n", "

\n", " \n", "

Illusztráció: @allison_horst
\n", "\n", "\n", "\n" ], "metadata": { "id": "Pg5aexcOPqAZ" } }, { "cell_type": "markdown", "source": [ "## 1. Tökadatok importálása és a Tidyverse előhívása\n", "\n", "A következő csomagokra lesz szükségünk, hogy feldolgozzuk ezt a leckét:\n", "\n", "- `tidyverse`: A [tidyverse](https://www.tidyverse.org/) egy [R csomaggyűjtemény](https://www.tidyverse.org/packages), amelyet arra terveztek, hogy a data science gyorsabb, egyszerűbb és szórakoztatóbb legyen!\n", "\n", "A következőképpen telepítheted őket:\n", "\n", "`install.packages(c(\"tidyverse\"))`\n", "\n", "Az alábbi szkript ellenőrzi, hogy rendelkezel-e a modul elvégzéséhez szükséges csomagokkal, és ha valamelyik hiányzik, telepíti azokat.\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": [ "Most indítsuk el néhány csomagot, és töltsük be a [adatokat](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), amelyeket ehhez a leckéhez biztosítottak!\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": [ "Egy gyors `glimpse()` azonnal megmutatja, hogy vannak hiányzó értékek, valamint szöveges (`chr`) és numerikus (`dbl`) adatok keveréke. A `Date` karakter típusú, és van egy furcsa oszlop, amelyet `Package`-nek hívnak, ahol az adatok között keverednek a `sacks`, `bins` és más értékek. Az adatok valójában egy kicsit zűrösek 😤.\n", "\n", "Valójában nem túl gyakori, hogy egy teljesen használatra kész adatállományt kapjunk, amelyből azonnal gépi tanulási modellt lehet készíteni. De ne aggódj, ebben a leckében megtanulod, hogyan készíts elő egy nyers adatállományt a standard R könyvtárak segítségével 🧑‍🔧. Emellett különböző technikákat is elsajátítasz az adatok vizualizálására. 📈📊\n", "
\n", "\n", "> Egy kis emlékeztető: A csőoperátor (`%>%`) logikai sorrendben hajt végre műveleteket, azáltal hogy egy objektumot továbbít egy függvénybe vagy kifejezésbe. Gondolhatsz a csőoperátorra úgy, mintha a kódodban azt mondanád: \"és aztán\".\n" ], "metadata": { "id": "REWcIv9yX29v" } }, { "cell_type": "markdown", "source": [ "## 2. Hiányzó adatok ellenőrzése\n", "\n", "Az egyik leggyakoribb probléma, amellyel az adatelemzők szembesülnek, az a hiányos vagy hiányzó adatok kezelése. Az R a hiányzó vagy ismeretlen értékeket egy speciális jelzőértékkel, `NA` (Not Available) jelöli.\n", "\n", "De honnan tudhatjuk, hogy az adatkeret tartalmaz-e hiányzó értékeket?\n", "
\n", "- Egy egyszerű módszer az alap R `anyNA` függvény használata, amely logikai objektumokat ad vissza: `TRUE` vagy `FALSE`.\n" ], "metadata": { "id": "Zxfb3AM5YbUe" } }, { "cell_type": "code", "execution_count": null, "source": [ "pumpkins %>% \n", " anyNA()" ], "outputs": [], "metadata": { "id": "G--DQutAYltj" } }, { "cell_type": "markdown", "source": [ "Remek, úgy tűnik, hogy hiányoznak bizonyos adatok! Ez egy jó kiindulópont.\n", "\n", "- Egy másik módszer az `is.na()` függvény használata, amely logikai `TRUE` értékkel jelzi, hogy az adott oszlop elemei közül melyek hiányoznak.\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": [ "Rendben, elvégeztem a feladatot, de egy ilyen nagy adatkeret esetében nem lenne hatékony és gyakorlatilag lehetetlen az összes sort és oszlopot egyenként átnézni😴.\n", "\n", "- Egy intuitívabb módszer az lenne, ha kiszámítanánk az egyes oszlopok hiányzó értékeinek összegét:\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": [ "Sokkal jobb! Hiányoznak adatok, de lehet, hogy ez nem számít a feladat szempontjából. Nézzük meg, milyen eredményeket hoz a további elemzés.\n", "\n", "> Az R nemcsak nagyszerű csomagokat és függvényeket kínál, hanem kiváló dokumentációval is rendelkezik. Például használja a `help(colSums)` vagy `?colSums` parancsot, hogy többet megtudjon a függvényről.\n" ], "metadata": { "id": "9gv-crB6ZD1Y" } }, { "cell_type": "markdown", "source": [ "## 3. Dplyr: Az adatok manipulálásának nyelvtana\n", "\n", "

\n", " \n", "

Illusztráció: @allison_horst
\n", "\n", "\n", "\n" ], "metadata": { "id": "o4jLY5-VZO2C" } }, { "cell_type": "markdown", "source": [ "A [`dplyr`](https://dplyr.tidyverse.org/), a Tidyverse egyik csomagja, egy adatmanipulációs nyelvtan, amely egy egységes igekészletet biztosít, hogy segítsen megoldani a leggyakoribb adatmanipulációs kihívásokat. Ebben a szakaszban megvizsgáljuk a dplyr néhány igéjét! \n", "
\n" ], "metadata": { "id": "i5o33MQBZWWw" } }, { "cell_type": "markdown", "source": [ "#### dplyr::select()\n", "\n", "A `select()` egy függvény a `dplyr` csomagban, amely segít kiválasztani, hogy mely oszlopokat tartsuk meg vagy zárjuk ki.\n", "\n", "Ahhoz, hogy az adatkeretet könnyebben kezelhetővé tegyük, távolítsunk el néhány oszlopot a `select()` segítségével, és tartsuk meg csak azokat az oszlopokat, amelyekre szükségünk van.\n", "\n", "Például ebben a gyakorlatban az elemzésünk a `Package`, `Low Price`, `High Price` és `Date` oszlopokat fogja érinteni. Válasszuk ki ezeket az oszlopokat.\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", "A `mutate()` egy függvény a `dplyr` csomagban, amely segít új oszlopokat létrehozni vagy meglévőket módosítani, miközben a meglévő oszlopokat megtartja.\n", "\n", "A `mutate` általános szerkezete a következő:\n", "\n", "`data %>% mutate(new_column_name = what_it_contains)`\n", "\n", "Nézzük meg, hogyan működik a `mutate` a `Date` oszlopon, az alábbi műveletek végrehajtásával:\n", "\n", "1. Az időpontokat (jelenleg karakter típusúak) hónap formátumra alakítjuk (ezek amerikai dátumok, tehát a formátum `MM/DD/YYYY`).\n", "\n", "2. Az időpontokból kinyerjük a hónapot egy új oszlopba.\n", "\n", "Az R-ben a [lubridate](https://lubridate.tidyverse.org/) csomag megkönnyíti a dátum-idő adatokkal való munkát. Tehát használjuk a `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` függvényeket, hogy elérjük a fenti célokat. A `Date` oszlopot elhagyhatjuk, mivel a további műveletekhez már nem lesz rá szükség.\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": [ "Hurrá! 🤩\n", "\n", "Most hozzunk létre egy új `Price` oszlopot, amely a tök átlagos árát jelöli. Ezután vegyük a `Low Price` és a `High Price` oszlopok átlagát, hogy kitöltsük az új Price oszlopot. \n", "
\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": [ "Igen!💪\n", "\n", "\"De várjunk csak!\", mondod majd, miután átfutottad az egész adathalmazt a `View(pumpkins)` segítségével, \"Van itt valami furcsa!\"🤔\n", "\n", "Ha megnézed a `Package` oszlopot, a tökök sokféle kiszerelésben kerülnek értékesítésre. Néhányat `1 1/9 bushel` mértékegységben árulnak, néhányat `1/2 bushel` mértékegységben, néhányat darabra, néhányat súlyra (fontban), és vannak nagy dobozokban is, amelyek szélessége változó.\n", "\n", "Ellenőrizzük ezt:\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": [ "Csodás!👏\n", "\n", "Úgy tűnik, hogy a tökök súlyának következetes mérése nagyon nehéz, ezért szűrjük őket úgy, hogy csak azokat a tököket válasszuk ki, amelyekben a *bushel* szó szerepel a `Package` oszlopban, és tegyük ezt egy új adatkeretbe, `new_pumpkins`.\n" ], "metadata": { "id": "7sMjiVujaZxY" } }, { "cell_type": "markdown", "source": [ "#### dplyr::filter() és stringr::str_detect()\n", "\n", "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): létrehoz egy adat-alhalmazt, amely csak azokat a **sorokat** tartalmazza, amelyek megfelelnek a feltételeidnek, ebben az esetben azokat a tököket, amelyek *bushel* szöveget tartalmaznak a `Package` oszlopban.\n", "\n", "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): érzékeli egy minta jelenlétét vagy hiányát egy szövegben.\n", "\n", "A [`stringr`](https://github.com/tidyverse/stringr) csomag egyszerű függvényeket biztosít gyakori szövegkezelési műveletekhez.\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": [ "Láthatod, hogy körülbelül 415 sorra szűkítettük le az adatokat, amelyek tököt tartalmaznak zsákszámra.🤩 \n", "
\n" ], "metadata": { "id": "VrDwF031avlR" } }, { "cell_type": "markdown", "source": [ "#### dplyr::case_when()\n", "\n", "**De várj! Van még egy dolog, amit meg kell tenned**\n", "\n", "Észrevetted, hogy a véka mennyisége soronként változik? Normalizálnod kell az árképzést, hogy az árakat vékánként mutasd, ne pedig 1 1/9 vagy 1/2 vékánként. Ideje egy kis matematikát alkalmazni, hogy standardizáld.\n", "\n", "A [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) függvényt fogjuk használni, hogy *módosítsuk* az Ár oszlopot bizonyos feltételek alapján. A `case_when` lehetővé teszi, hogy több `if_else()` állítást vektorizálj.\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": [ "Most már elemezhetjük az egységárakat a bushel mértékegység alapján. Mindez a tökök busheljeinek tanulmányozása azonban azt mutatja, hogy mennyire `fontos` a `adataink természetének megértése`!\n", "\n", "> ✅ A [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) szerint egy bushel súlya a termény típusától függ, mivel ez egy térfogatmérték. \"Egy bushel paradicsom például 56 fontot kell, hogy nyomjon... A levelek és zöldek több helyet foglalnak kevesebb súllyal, így egy bushel spenót csak 20 font.\" Ez elég bonyolult! Ne foglalkozzunk a bushel-font átváltással, inkább árazzunk bushel alapján. Mindez a tökök busheljeinek tanulmányozása azonban azt mutatja, hogy mennyire fontos az adataink természetének megértése!\n", ">\n", "> ✅ Észrevetted, hogy a fél bushel tökök nagyon drágák? Ki tudod találni, miért? Tipp: a kis tökök sokkal drágábbak, mint a nagyok, valószínűleg azért, mert sokkal több van belőlük bushelként, tekintve az egy nagy üreges pite tök által elfoglalt kihasználatlan helyet.\n" ], "metadata": { "id": "pS2GNPagbSdb" } }, { "cell_type": "markdown", "source": [ "Most végül, csak a kaland kedvéért 💁‍♀️, helyezzük át a Month oszlopot az első pozícióba, azaz a `Package` oszlop `elé`.\n", "\n", "A `dplyr::relocate()` függvényt használjuk az oszlopok sorrendjének megváltoztatására.\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": [ "Szép munka!👌 Most már van egy tiszta, rendezett adathalmazod, amelyre felépítheted az új regressziós modelledet! \n", "
\n" ], "metadata": { "id": "y8TJ0Za_bn5Y" } }, { "cell_type": "markdown", "source": [ "## 4. Adatvizualizáció ggplot2-vel\n", "\n", "

\n", " \n", "

Infografika: Dasani Madipalli
\n", "\n", "\n", "\n", "\n", "Van egy *bölcs* mondás, ami így szól:\n", "\n", "> \"Az egyszerű grafikon több információt hozott a data analyst számára, mint bármely más eszköz.\" --- John Tukey\n", "\n", "Az adatelemzők egyik feladata, hogy bemutassák az általuk vizsgált adatok minőségét és jellegét. Ehhez gyakran készítenek érdekes vizualizációkat, például diagramokat, grafikonokat és táblázatokat, amelyek az adatok különböző aspektusait mutatják be. Ily módon vizuálisan képesek megjeleníteni olyan összefüggéseket és hiányosságokat, amelyeket másképp nehéz lenne feltárni.\n", "\n", "A vizualizációk abban is segíthetnek, hogy meghatározzuk, melyik gépi tanulási technika a legmegfelelőbb az adott adatokhoz. Például egy szórásdiagram, amely egy vonalat követ, azt jelezheti, hogy az adatok alkalmasak egy lineáris regressziós elemzésre.\n", "\n", "Az R számos rendszert kínál grafikonok készítésére, de a [`ggplot2`](https://ggplot2.tidyverse.org/index.html) az egyik legelegánsabb és legsokoldalúbb. A `ggplot2` lehetővé teszi, hogy grafikonokat **független komponensek kombinálásával** állítsunk össze.\n", "\n", "Kezdjünk egy egyszerű szórásdiagrammal, amely a Price és Month oszlopokat ábrázolja.\n", "\n", "Ebben az esetben a [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html) függvénnyel kezdünk, megadunk egy adatkeretet és esztétikai leképezést (az [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html) segítségével), majd hozzáadunk rétegeket (például [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) a szórásdiagramokhoz.\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": [ "Hasznos ez a grafikon 🤷? Meglepett rajta valami?\n", "\n", "Nem különösebben hasznos, mivel csak annyit mutat, hogy az adataid pontokként szóródnak egy adott hónapban.\n", "
\n" ], "metadata": { "id": "Ml7SDCLQcPvE" } }, { "cell_type": "markdown", "source": [ "### **Hogyan tegyük hasznossá?**\n", "\n", "Ahhoz, hogy a diagramok hasznos adatokat jelenítsenek meg, általában valahogyan csoportosítani kell az adatokat. Például a mi esetünkben, ha megtaláljuk a tökök havi átlagárát, az több betekintést nyújtana az adatok mögötti mintázatokba. Ez elvezet minket egy újabb **dplyr** bemutatóhoz:\n", "\n", "#### `dplyr::group_by() %>% summarize()`\n", "\n", "A csoportosított aggregáció R-ben könnyen kiszámítható a következővel:\n", "\n", "`dplyr::group_by() %>% summarize()`\n", "\n", "- A `dplyr::group_by()` megváltoztatja az elemzés egységét a teljes adathalmazról az egyes csoportokra, például hónaponként.\n", "\n", "- A `dplyr::summarize()` egy új adatkeretet hoz létre, amelyben minden csoportosító változóhoz tartozik egy oszlop, valamint minden megadott összesítő statisztikához egy oszlop.\n", "\n", "Például használhatjuk a `dplyr::group_by() %>% summarize()`-t arra, hogy a tököket a **Month** oszlop alapján csoportokba rendezzük, majd kiszámítsuk az egyes hónapok **átlagárát**.\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": [ "Tömören!✨\n", "\n", "A kategóriális jellemzők, mint például a hónapok, jobban ábrázolhatók oszlopdiagram segítségével 📊. Az oszlopdiagramokért felelős rétegek a `geom_bar()` és a `geom_col()`. További információért nézd meg a `?geom_bar` dokumentációját.\n", "\n", "Készítsünk egyet!\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": [ "🤩🤩 Ez egy sokkal hasznosabb adatvizualizáció! Úgy tűnik, hogy a legmagasabb tökárak szeptemberben és októberben fordulnak elő. Ez megfelel az elvárásaidnak? Miért igen, vagy miért nem?\n", "\n", "Gratulálok a második leckéhez 👏! Előkészítetted az adataidat a modellépítéshez, majd további betekintéseket fedeztél fel vizualizációk segítségével!\n" ], "metadata": { "id": "zDm0VOzzcuzR" } }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**Felelősségkizárás**: \nEz a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével készült. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt a professzionális, emberi fordítás igénybevétele. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy téves értelmezésekért.\n" ] } ] }