2912 yılına hoş geldiniz. Veri bilimi becerilerinize kozmik bir gizemi çözmek için ihtiyaç duyuluyor. Dört ışık yılı uzaklıktan bir iletim aldık ve işler pek de iyi görünmüyor.
Spaceship Titanic, bir ay önce fırlatılan yıldızlararası bir yolcu gemisiydi. Neredeyse 13.000 yolcuyu taşıyan gemi, göçmenleri güneş sistemimizden, yakındaki yıldızların etrafında dönen üç yeni yaşanabilir ötegezegene götürmek üzere ilk yolculuğuna çıkmıştı.
İlk durağı olan kavurucu 55 Cancri E’ye giderken, gemi Alpha Centauri yakınlarında bir toz bulutunun içinde gizlenmiş bir uzay-zaman anomalisiyle çarpıştı. Ne yazık ki, bin yıl önceki adaşıyla benzer bir kaderi paylaştı. Gemi bütünlüğünü korumuş olsa da, yolcuların neredeyse yarısı alternatif bir boyuta taşındı!
Kurtarma ekiplerine yardımcı olmak ve kaybolan yolcuları geri getirmek için, uzay gemisinin hasar görmüş bilgisayar sisteminden kurtarılan kayıtları kullanarak hangi yolcuların anomali tarafından taşındığını tahmin etmeniz isteniyor.
Onları kurtarın ve tarihi değiştirin!
Kullanılacak kütüphaneler
library(readr)library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ purrr 1.1.0
✔ forcats 1.0.1 ✔ stringr 1.5.1
✔ ggplot2 4.0.0 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Загрузка требуемого пакета: colorspace
Загрузка требуемого пакета: grid
VIM is ready to use.
Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
Присоединяю пакет: 'VIM'
Следующий объект скрыт от 'package:datasets':
sleep
library(ggplot2)library(recipes)
Присоединяю пакет: 'recipes'
Следующий объект скрыт от 'package:VIM':
prepare
Следующий объект скрыт от 'package:stringr':
fixed
Следующий объект скрыт от 'package:stats':
step
Dosya ve Veri indirimi
train <-read_csv("train.csv")
Rows: 8693 Columns: 14
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
lgl (3): CryoSleep, VIP, Transported
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
test <-read_csv("test.csv")
Rows: 4277 Columns: 13
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
lgl (2): CryoSleep, VIP
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Dosya ve Veri Alanı Açıklamaları
train.csv - Eğitim verisi olarak kullanılacak yolcuların yaklaşık üçte ikisinin (yaklaşık 8700) kişisel kayıtları.
PassengerId - Her yolcu için benzersiz bir kimlik. Her kimlik, gggg_pp biçimini alır; burada gggg, yolcunun seyahat ettiği grubu, pp ise grup içindeki numarasını belirtir. Bir gruptaki kişiler genellikle aile üyeleridir, ancak her zaman değil.
HomePlanet - Yolcunun ayrıldığı gezegen, genellikle daimi ikamet ettiği gezegen.
Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
dplyr 1.1.0.
ℹ Please use `reframe()` instead.
ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
always returns an ungrouped data frame and adjust accordingly.
`summarise()` has grouped output by 'Aile'. You can override using the
`.groups` argument.
train <-left_join(train,inceleme)
Joining with `by = join_by(Aile)`
Görüldüğü üzere aynı grup içinde olan insanlar aynı yerden yola çıkmışlardır.Buna dayanarak veri setindeki boşlukları doldururuz.
Eğer bir yolcunun tüm harcamaları (RoomService, FoodCourt, ShoppingMall, Spa, VRDeck) sıfır değilse, bu kişi muhtemelen “uykuda değildi” → CryoSleep = FALSE.
Hangi gezegenden çıktığına,VIP yolcu olup olmdığına göre Cabin sütünü değişiklik gösterebilir. Buna dayanarak Cabin veri sütününde boşluklar doldurulabilir
train <- train %>%group_by(HomePlanet,Destination,VIP) %>%mutate(Cabin =ifelse(is.na(Cabin), # Cabin boşsasample(Cabin[!is.na(Cabin)], 1), # Aynı HomePlanet içindeki dolu Cabin’lerden rastgele seç Cabin # Cabin doluysa olduğu gibi bırak )) %>%ungroup()
Destination
Aynı grup üyeleri yüksek ihtimalle aynı yere gidiyorlardır
Aynı grup üyelerinin yaş ortlamaları bir birine yakın olabilir.Buna dayanarak boşluklar doldurulabilir.
train <- train %>%group_by(Aile) %>%mutate(Age =ifelse(is.na(Age), round(mean(Age, na.rm =TRUE)), # Ortalama ile doldur Age ) ) %>%ungroup()
Hangi gezegenden yola çıktığına dayanarak yaş ortalamarı oluşturarak boş olan değerleri doldurabiliriz
train <- train %>%group_by(HomePlanet, Destination) %>%# isteğe bağlı grup sütunlarımutate(Age =ifelse(uye_s ==1&is.na(Age), median(Age, na.rm =TRUE), Age)) %>%ungroup()
VIP
Aynı grup üyeleri aynı Cabin’de kaldığına göre bu Cabin VIP ise diğer üyelerde VIP’te kalıyordırlar.
train <- train %>%group_by(uye_s) %>%# aynı gruptaki üyeleri birlikte ele almutate(VIP =ifelse(is.na(VIP) & uye_s >1, first(na.omit(VIP)), # gruptaki boş olmayan ilk değeri al VIP), )
VIP olup olmadığı hangi gezegenden çıktığına görede değişiklik gösterebilir.
Yaptığımız değiştirmeler sonucunda her bir sütündeki boşluklar dolduruldu
uye_s,bos_sayisi,bosolamyan_sayisi,farkli_gezegen,gezegen_adi gibi değişkenler veri setinden silinecektir.O yüzden onları sıfır yapmayla uğraşmaya gerek yoktur,çünkü asıl lazım olan HomePlanet zaten doldurulmuştur.