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

672 lines
24 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_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-06T13:55:20+00:00",
"source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
"language_code": "tr"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# Bir regresyon modeli oluşturma: verileri hazırlama ve görselleştirme\n",
"\n",
"## **Balkabağı için Doğrusal Regresyon - Ders 2**\n",
"#### Giriş\n",
"\n",
"Tidymodels ve Tidyverse ile makine öğrenimi modeli oluşturma sürecine başlamak için gerekli araçları kurduğunuza göre, artık verilerinizle ilgili sorular sormaya hazırsınız. Verilerle çalışırken ve ML çözümleri uygularken, veri setinizin potansiyelini doğru bir şekilde açığa çıkarmak için doğru soruyu nasıl soracağınızı anlamak çok önemlidir.\n",
"\n",
"Bu derste öğreneceksiniz:\n",
"\n",
"- Model oluşturma için verilerinizi nasıl hazırlayacağınızı.\n",
"\n",
"- Veri görselleştirme için `ggplot2`'yi nasıl kullanacağınızı.\n",
"\n",
"Cevaplanmasını istediğiniz soru, hangi tür ML algoritmalarını kullanacağınızı belirleyecektir. Ve alacağınız cevabın kalitesi, büyük ölçüde verilerinizin doğasına bağlı olacaktır.\n",
"\n",
"Bunu pratik bir alıştırma ile görelim.\n",
"\n",
"\n",
"<p >\n",
" <img src=\"../../images/unruly_data.jpg\"\n",
" width=\"700\"/>\n",
" <figcaption>@allison_horst tarafından yapılmış sanat eseri</figcaption>\n",
"\n",
"\n",
"<!--![@allison_horst tarafından yapılmış sanat eseri](../../../../../../2-Regression/2-Data/images/unruly_data.jpg)<br>@allison_horst tarafından yapılmış sanat eseri-->\n"
],
"metadata": {
"id": "Pg5aexcOPqAZ"
}
},
{
"cell_type": "markdown",
"source": [
"## 1. Kabak verilerini içe aktarma ve Tidyverse'i çağırma\n",
"\n",
"Bu dersin verilerini işlemek için aşağıdaki paketlere ihtiyacımız olacak:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/), veri bilimini daha hızlı, kolay ve eğlenceli hale getirmek için tasarlanmış bir [R paketleri koleksiyonudur](https://www.tidyverse.org/packages).\n",
"\n",
"Paketleri şu şekilde yükleyebilirsiniz:\n",
"\n",
"`install.packages(c(\"tidyverse\"))`\n",
"\n",
"Aşağıdaki script, bu modülü tamamlamak için gerekli paketlere sahip olup olmadığınızı kontrol eder ve eksik olanları sizin için yükler.\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": [
"Şimdi, bazı paketleri çalıştıralım ve bu ders için sağlanan [veriyi](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yükleyelim!\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": [
"Hızlı bir `glimpse()` işlemi, boşluklar olduğunu ve metin (`chr`) ile sayısal verilerin (`dbl`) karışık olduğunu hemen gösteriyor. `Date` karakter türünde ve ayrıca verilerin `sacks`, `bins` ve diğer değerlerin karışımı olduğu garip bir `Package` adlı sütun da var. Aslında, veri biraz karışık 😤.\n",
"\n",
"Aslında, tamamen kullanıma hazır bir veri setinin size sunulması ve doğrudan bir ML modeli oluşturmak için uygun olması pek yaygın değildir. Ama endişelenmeyin, bu derste, standart R kütüphanelerini kullanarak ham bir veri setini nasıl hazırlayacağınızı öğreneceksiniz 🧑‍🔧. Ayrıca, veriyi görselleştirmek için çeşitli teknikleri de öğreneceksiniz. 📈📊\n",
"<br>\n",
"\n",
"> Bir hatırlatma: Pipe operatörü (`%>%`), bir nesneyi ileriye doğru bir fonksiyona veya çağrı ifadesine geçirerek işlemleri mantıksal bir sırayla gerçekleştirir. Pipe operatörünü kodunuzda \"ve sonra\" demek gibi düşünebilirsiniz.\n"
],
"metadata": {
"id": "REWcIv9yX29v"
}
},
{
"cell_type": "markdown",
"source": [
"## 2. Eksik verileri kontrol et\n",
"\n",
"Veri bilimcilerin en sık karşılaştığı sorunlardan biri eksik veya kayıp verilerdir. R, eksik veya bilinmeyen değerleri özel bir işaret değeri olan `NA` (Not Available) ile temsil eder.\n",
"\n",
"Peki, veri çerçevesinde eksik değerler olduğunu nasıl anlayabiliriz?\n",
"<br>\n",
"- En basit yöntem, mantıksal nesneler `TRUE` veya `FALSE` döndüren temel R fonksiyonu `anyNA`yı kullanmaktır.\n"
],
"metadata": {
"id": "Zxfb3AM5YbUe"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"pumpkins %>% \n",
" anyNA()"
],
"outputs": [],
"metadata": {
"id": "G--DQutAYltj"
}
},
{
"cell_type": "markdown",
"source": [
"Harika, bazı eksik veriler var gibi görünüyor! Bu başlamak için iyi bir yer.\n",
"\n",
"- Bir başka yöntem, hangi bireysel sütun elemanlarının eksik olduğunu `TRUE` mantıksal değeriyle gösteren `is.na()` fonksiyonunu kullanmaktır.\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": [
"Tamam, iş tamamlandı ancak bu kadar büyük bir veri çerçevesiyle, tüm satırları ve sütunları tek tek incelemek verimsiz ve pratikte imkansız olurdu😴.\n",
"\n",
"- Daha sezgisel bir yöntem, her sütundaki eksik değerlerin toplamını hesaplamak olacaktır:\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": [
"Çok daha iyi! Eksik veriler var, ancak belki de bu, yapılacak görev için önemli olmayabilir. Bakalım, daha fazla analiz ne ortaya çıkaracak.\n",
"\n",
"> R, harika paketler ve fonksiyonlar setlerinin yanı sıra çok iyi bir dokümantasyona sahiptir. Örneğin, `help(colSums)` veya `?colSums` kullanarak bu fonksiyon hakkında daha fazla bilgi edinebilirsiniz.\n"
],
"metadata": {
"id": "9gv-crB6ZD1Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. Dplyr: Veri Manipülasyonu için Bir Dilbilgisi\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_wrangling.png\"\n",
" width=\"569\"/>\n",
" <figcaption>@allison_horst tarafından yapılmış bir illüstrasyon</figcaption>\n",
"\n",
"\n",
"<!--![@allison_horst tarafından yapılmış bir illüstrasyon](../../../../../../2-Regression/2-Data/images/dplyr_wrangling.png)<br/>@allison_horst tarafından yapılmış bir illüstrasyon-->\n"
],
"metadata": {
"id": "o4jLY5-VZO2C"
}
},
{
"cell_type": "markdown",
"source": [
"[`dplyr`](https://dplyr.tidyverse.org/), Tidyverse içinde yer alan bir paket olup, veri manipülasyonu için bir dilbilgisi sunar ve en yaygın veri manipülasyonu sorunlarını çözmenize yardımcı olan tutarlı bir fiil seti sağlar. Bu bölümde, dplyr'ın bazı fiillerini keşfedeceğiz! \n",
"<br>\n"
],
"metadata": {
"id": "i5o33MQBZWWw"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::select()\n",
"\n",
"`select()` fonksiyonu, `dplyr` paketinde bulunan ve belirli sütunları seçmenize veya hariç tutmanıza yardımcı olan bir işlevdir.\n",
"\n",
"Veri çerçevenizi daha kolay çalışılabilir hale getirmek için, `select()` kullanarak ihtiyacınız olan sütunları tutup diğerlerini kaldırabilirsiniz.\n",
"\n",
"Örneğin, bu alıştırmada analizimiz `Package`, `Low Price`, `High Price` ve `Date` sütunlarını içerecek. Hadi bu sütunları seçelim.\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()`, `dplyr` paketinde bulunan ve mevcut sütunları korurken yeni sütunlar oluşturmanıza veya mevcut sütunları değiştirmenize yardımcı olan bir fonksiyondur.\n",
"\n",
"`mutate` fonksiyonunun genel yapısı şu şekildedir:\n",
"\n",
"`data %>% mutate(yeni_sutun_adi = icerigi)`\n",
"\n",
"`mutate` fonksiyonunu `Date` sütunu üzerinde şu işlemleri yaparak deneyelim:\n",
"\n",
"1. Tarihleri (şu anda karakter türünde) ay formatına dönüştürün (bunlar ABD tarih formatında, yani `MM/DD/YYYY`).\n",
"\n",
"2. Tarihlerden ay bilgisini çıkararak yeni bir sütuna ekleyin.\n",
"\n",
"R dilinde, [lubridate](https://lubridate.tidyverse.org/) paketi Tarih-Zaman verileriyle çalışmayı kolaylaştırır. Bu nedenle, yukarıdaki hedeflere ulaşmak için `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` fonksiyonlarını kullanalım. Date sütununu, sonraki işlemlerde artık ihtiyaç duymayacağımız için kaldırabiliriz.\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": [
"Woohoo! 🤩\n",
"\n",
"Şimdi, bir yeni sütun olan `Price` oluşturalım. Bu sütun, bir kabağın ortalama fiyatını temsil ediyor. Şimdi, `Low Price` ve `High Price` sütunlarının ortalamasını alarak yeni Price sütununu dolduralım.\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": [
"Evet!💪\n",
"\n",
"\"Ama dur bir dakika!\", tüm veri setini `View(pumpkins)` ile hızlıca gözden geçirdikten sonra diyeceksiniz ki, \"Burada bir gariplik var!\"🤔\n",
"\n",
"Eğer `Package` sütununa bakarsanız, kabakların birçok farklı şekilde satıldığını göreceksiniz. Bazıları `1 1/9 bushel` ölçüsünde, bazıları `1/2 bushel` ölçüsünde, bazıları kabak başına, bazıları pound başına, ve bazıları da farklı genişliklerde büyük kutular içinde satılıyor.\n",
"\n",
"Hadi bunu doğrulayalım:\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": [
"Harika!👏\n",
"\n",
"Balkabaklarını tutarlı bir şekilde tartmak oldukça zor görünüyor, bu yüzden onları filtreleyelim. Bunun için `Package` sütununda *bushel* kelimesini içeren balkabaklarını seçip yeni bir veri çerçevesi olan `new_pumpkins` içine koyalım.\n"
],
"metadata": {
"id": "7sMjiVujaZxY"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::filter() ve stringr::str_detect()\n",
"\n",
"[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): Verilerin yalnızca **satırlarının** koşullarınızı sağladığı bir alt kümesini oluşturur, bu durumda `Package` sütununda *bushel* kelimesini içeren kabaklar.\n",
"\n",
"[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): Bir dizgede bir desenin varlığını veya yokluğunu algılar.\n",
"\n",
"[`stringr`](https://github.com/tidyverse/stringr) paketi, yaygın dizge işlemleri için basit fonksiyonlar sağlar.\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": [
"Kabakları kile ile içeren yaklaşık 415 satıra kadar daralttığımızı görebilirsiniz.🤩\n",
"<br>\n"
],
"metadata": {
"id": "VrDwF031avlR"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::case_when()\n",
"\n",
"**Ama durun! Yapılacak bir şey daha var**\n",
"\n",
"Her satırda buşel miktarının değiştiğini fark ettiniz mi? Fiyatlandırmayı normalize etmeniz gerekiyor, böylece fiyatlandırmayı 1 1/9 veya 1/2 buşel yerine buşel başına gösterebilirsiniz. Şimdi fiyatları standartlaştırmak için biraz matematik yapma zamanı.\n",
"\n",
"Fiyat sütununu bazı koşullara bağlı olarak *değiştirmek* için [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) fonksiyonunu kullanacağız. `case_when`, birden fazla `if_else()` ifadesini vektörleştirmenize olanak tanır.\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": [
"Şimdi, bushel ölçümüne göre birim fiyat analizini yapabiliriz. Ancak, tüm bu kabak bushel'leri üzerine yapılan çalışma, `verinizin doğasını anlamanın` ne kadar `önemli` olduğunu gösteriyor!\n",
"\n",
"> ✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)'e göre, bir bushel'in ağırlığı ürün türüne bağlıdır çünkü bu bir hacim ölçüsüdür. \"Örneğin, bir domates bushel'i 56 pound ağırlığında olmalı... Yapraklar ve yeşillikler daha az ağırlıkla daha fazla alan kaplar, bu yüzden bir ıspanak bushel'i sadece 20 pound'dur.\" Oldukça karmaşık bir konu! Bushel'den pound'a dönüşüm yapmaya uğraşmayalım, bunun yerine bushel üzerinden fiyatlandırma yapalım. Ancak, tüm bu kabak bushel'leri üzerine yapılan çalışma, verinizin doğasını anlamanın ne kadar önemli olduğunu gösteriyor!\n",
">\n",
"> ✅ Yarım bushel ile satılan kabakların çok pahalı olduğunu fark ettiniz mi? Nedenini çözebilir misiniz? İpucu: Küçük kabaklar büyük olanlardan çok daha pahalıdır, muhtemelen bir bushel'de daha fazla yer kapladıkları için. Büyük, içi boş bir turta kabağının kapladığı kullanılmayan alan nedeniyle bushel başına daha fazla küçük kabak bulunur.\n"
],
"metadata": {
"id": "pS2GNPagbSdb"
}
},
{
"cell_type": "markdown",
"source": [
"Son olarak, sırf macera olsun diye 💁‍♀️, Haydi Ay sütununu da ilk sıraya, yani `Package` sütununun `öncesine` taşıyalım.\n",
"\n",
"Sütunların yerini değiştirmek için `dplyr::relocate()` kullanılır.\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": [
"Tebrikler! 👌 Artık yeni regresyon modelinizi oluşturabileceğiniz temiz ve düzenli bir veri kümesine sahipsiniz! \n",
"<br>\n"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. ggplot2 ile Veri Görselleştirme\n",
"\n",
"<p >\n",
" <img src=\"../../images/data-visualization.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Dasani Madipalli tarafından hazırlanan infografik</figcaption>\n",
"\n",
"\n",
"<!--![Dasani Madipalli tarafından hazırlanan infografik](../../../../../../2-Regression/2-Data/images/data-visualization.png){width=\"600\"}-->\n",
"\n",
"Şöyle bir *bilgece* söz vardır:\n",
"\n",
"> \"Basit bir grafik, veri analistinin zihnine diğer tüm araçlardan daha fazla bilgi taşımıştır.\" --- John Tukey\n",
"\n",
"Bir veri bilimcinin rolü, üzerinde çalıştığı verinin kalitesini ve doğasını göstermektir. Bunu yapmak için genellikle verinin farklı yönlerini gösteren ilginç görselleştirmeler, grafikler, çizimler ve tablolar oluştururlar. Bu şekilde, görsel olarak ilişkileri ve aksi takdirde ortaya çıkarması zor olan boşlukları gösterebilirler.\n",
"\n",
"Görselleştirmeler, veriye en uygun makine öğrenimi tekniğini belirlemeye de yardımcı olabilir. Örneğin, bir çizgiye uyar gibi görünen bir dağılım grafiği, verinin doğrusal regresyon çalışması için iyi bir aday olduğunu gösterir.\n",
"\n",
"R, grafik oluşturmak için birkaç sistem sunar, ancak [`ggplot2`](https://ggplot2.tidyverse.org/index.html) en zarif ve en esnek olanlardan biridir. `ggplot2`, grafikleri **bağımsız bileşenleri birleştirerek** oluşturmanıza olanak tanır.\n",
"\n",
"Hadi Price ve Month sütunları için basit bir dağılım grafiğiyle başlayalım.\n",
"\n",
"Bu durumda, [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html) ile başlayacağız, bir veri seti ve estetik eşleme ([`aes()`](https://ggplot2.tidyverse.org/reference/aes.html) ile) sağlayacağız, ardından dağılım grafikleri için katmanlar ekleyeceğiz (örneğin [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)).\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": [
"Bu faydalı bir grafik mi 🤷? Sizi şaşırtan bir şey var mı?\n",
"\n",
"Pek faydalı değil, çünkü tek yaptığı verilerinizi belirli bir ayda noktalar halinde göstermek. \n"
],
"metadata": {
"id": "Ml7SDCLQcPvE"
}
},
{
"cell_type": "markdown",
"source": [
"### **Nasıl faydalı hale getirebiliriz?**\n",
"\n",
"Grafiklerin faydalı veriler göstermesini sağlamak için genellikle verileri bir şekilde gruplandırmanız gerekir. Örneğin, bizim durumumuzda, her ay için kabakların ortalama fiyatını bulmak, verilerimizdeki temel desenlere dair daha fazla içgörü sağlayacaktır. Bu bizi bir başka **dplyr** özelliğine yönlendiriyor:\n",
"\n",
"#### `dplyr::group_by() %>% summarize()`\n",
"\n",
"R'de gruplandırılmış toplama işlemleri kolayca şu şekilde yapılabilir:\n",
"\n",
"`dplyr::group_by() %>% summarize()`\n",
"\n",
"- `dplyr::group_by()` analiz birimini tüm veri setinden, ay gibi bireysel gruplara değiştirir.\n",
"\n",
"- `dplyr::summarize()` her bir gruplama değişkeni için bir sütun ve belirttiğiniz özet istatistikler için bir sütun içeren yeni bir veri çerçevesi oluşturur.\n",
"\n",
"Örneğin, **Month** sütunlarına göre kabakları gruplandırmak ve her ay için **ortalama fiyatı** bulmak için `dplyr::group_by() %>% summarize()` kullanabiliriz.\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": [
"Kısa ve öz!✨\n",
"\n",
"Aylar gibi kategorik özellikler, bir çubuk grafik kullanılarak daha iyi temsil edilir 📊. Çubuk grafiklerden sorumlu katmanlar `geom_bar()` ve `geom_col()`dur. Daha fazla bilgi için `?geom_bar` komutuna göz atabilirsiniz.\n",
"\n",
"Hadi bir tane oluşturalım!\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": [
"🤩🤩Bu, daha kullanışlı bir veri görselleştirme! Görünüşe göre en yüksek kabak fiyatları Eylül ve Ekim aylarında gerçekleşiyor. Bu beklentinizi karşılıyor mu? Neden veya neden değil?\n",
"\n",
"İkinci dersi tamamladığınız için tebrikler 👏! Verilerinizi model oluşturma için hazırladınız, ardından görselleştirmeler kullanarak daha fazla içgörü ortaya çıkardınız!\n"
],
"metadata": {
"id": "zDm0VOzzcuzR"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Feragatname**: \nBu belge, [Co-op Translator](https://github.com/Azure/co-op-translator) adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.\n"
]
}
]
}