Üçüncü ödevimiz kapsamında ilk olarak bizlerden sunulan üç kaynaktan
önemli bulduğumuz noktalara yönelik yerleri not almamız istenmiştir. Bu
kapsamda ilk olarak “Hafta 3: Görselleştirme Notları” ve “Openintro”
kapsamındaki belgeleri incelemiş bulunmaktayım. Bu belge kapsamında
dikkatimi çeken noktaların birçoğuna haftalık “RMarkdown Öğrenme
Günlüğü” bölümünde de değinmiş bulunmaktayım. Bu kaynakta yer alan
distinct() fonksiyonu özellikle ilgimi çekmiştir. Bir veri
setindeki değişkenleri hatırlama veya görüntüleme açısından kolaylık
sağlaması nedeniyle bu fonksiyonu önemli bulmaktayım. Ayrıca, kontenjans
tablosu yani grupların eşleştirildiği tablo oluşturulma sürecinde
count(a,b)fonksiyonun işlevinin önemli olduğunu
gözlemledim.
“Hafta 3: Görselleştirme Notları” kaynağı kapsamında ayrıca bir sette
bulunan değişkenlerin türünün saptanması ve değişken türünün
saptanmasına yönelik uygulamanın gelecek uygulamalarda önem arz ettiğini
düşündüm. Bu doğrutluda sjlabelled ve dplyr
kütüphanesinde bulunan
mutate(acroos(where(değişken türü), değiştirilecek tür))
yapısıyla birlikte değişikenlerde değişiklik yapılabileceğini öğrendim.
Ayrıca veri setindeki kayıp yapıların çıkartılması için derste
öğrendiğimiz na.omit() dışında droplevels()
fonksiyonuyla kullanılmayan faktörlerin silinmesinde kullanıldığını da
öğrendim.Bunun dışında, theme(legend.position = "") ile
lejant pozisyonu ayarlanmaktadır.
Bu kaynak kapsamında, grafikler açısından özellikle bazı
fonksiyonların veriyi görselleştirme sürecinde önemli olduğunu düşündüm.
Örneğin, geom_bar(position = "dodge") fonksiyonu çubukların
yan yana gösterilmesini sağlayarak ve alpha = 0-1 yapısıyla
görsel yoğunluk ayarlamasıyla verinin okunabilirliğini artırmaktadır.
labs(x = "ad") fonksiyonu eksenleri isimlendirme açısından,
pivot_wider(id_cols = , names_from = , values_from = )
fonksiyonu ise veri tablosunu daha kolay okunabilir hale getirme
açısından önemli olduğunu düşündüğüm yapılardır. Ayrıca,
geom_bar(position = "fill") fonksiyonu gruplar arasında
oransal karşılaştırmalar yapma açısından,
geom_bar(fill = "renk") fonksiyonu çubukların rengini
ayarlama açısından ve facet_wrap(~ değişken_adı) ve
facet_grid(değişken adı ~ değişken_adı, labeller = label_both)
fonksiyonu gruplara göre ayrı grafikler oluşturarak farkları detaylı
inceleme açısından önemli olduğunu düşündüğüm fonksiyonlardır.
Pasta grafiği ise bu kaynakta öğrendiğim yeni bilgilerdendir.Burada
verilerin aktarılması sürecinde yüzdelik görünümlerin pasta grafiğine
aktarılmasında label = scales::percent(prop, accuracy = 1)
fonksiyonunun mutate içinde verilmesiyle birlikte sağlanabileceğini
gözlemledim. Ayrıca pasta grafiği oluştulurken aes
fonksiyonu içerisinde xdeğerinin boş bırakılmasının önemli
bir detay olduğunu düşünmekteyim.
Pasta grafiğinin oluşturulması sürecinde ise doğrudan bir fonksiyon
bulunmadığını, bu nedenle öncelikle geom_col(width = 1)
fonksiyonu ile sütun grafiğinin oluşturulduğunu ve ardından
coord_polar("y") ifadesiyle bu yapının pasta grafiğine
dönüştürüldüğünü öğrendim. Ayrıca, bu şekilde oluşturulan bir pasta
grafiğinin etkileşimli hale getirilmesinde plotly()
kütüphanesinin önemli bir rol oynadığını fark ettim. Bu süreçte,
grafiğin oluşturulmasında data = "veri seti adı",
labels = ~başlıklandırma yapısı,
values = ~kullanılacak değerler,
type = "grafik türü", text = ve
textinfo = gibi parametrelerin kullanılarak etkileşimli
grafik üzerinde çeşitli bilgilerin sunulabildiğini anladım. Son olarak,
veri türünü doğru ayarlamak ve forcats paketindeki
fct_relevel() fonksiyonunu kullanarak faktör seviyelerinin
sıralamasını değiştirebilmek önemliymiş.
Pasta grafiği dışında, sayısal verilerin görselleştirilmesinde nokta
grafiğinin kullanışlı olduğunu öğrendim. Bu grafik histograma benzemekle
birlikte yalnızca x ekseni tanımlanmakta ve
geom_dotplot(dotsize = ) fonksiyonu ile oluşturulmaktadır.
Ayrıca, veri sayısının fazla olduğu durumlarda, grafik oluşturulmadan
önce sample_n(veri seti, belirli_sayı) fonksiyonu
kullanılarak rastgele bir alt örnek alınması sağlanabilirmiş; bu sayede
de veriler daha kolay incelenebilir.Bu grafik türlerine ek olarak,
histogram grafiği de daha önce öğrendiğim bir yapı olarak dikkatimi
çekti. Bu grafikte veri sürekliliğinin
geom_histogram(binwidth = değer) ile ayarlanabildiğini ve
veri dağılımının sıklığını gözlemlemek açısından önemli bir araç
olduğunu fark ettim. Bindwith ve bin değeri
arttıkça da daha okunaklı bir yapı oluştuğuun düşünmekteyim.
Bölümde yoğunluk grafiği yapısı da ele alınmıştır. Bu yapının büyük
örneklemlerde işlevli olacağını öğrenmekle birlikte
geom_density(bw= bant değeri ata) fonksiyonuyla
oluşturulduğunu öğrendim (Bu değer azaldıkça daha küçük değerler açık
veriliyor diye düşündüm.). Ayrıca ggridges paketindeki
geom_density_ridges() birlikte de verilerin üst üste
binmesini engelleyecek bir grafik yapısı elde edilebilirmiş. Ayrıca
ggridges kapsamında ele alınacak değişkenlerin as.factor
tanımlamasının yapılmasına dikkat edilmelmesi gerekiyormuş. Bunun yanı
sıra, uç değer, medyan gibi çeşitli yapıları rahatça saptayabileceğimiz
kutu grafiğinin ise geom_boxplot() fonksiyonuyla y temelli
oluşturulduğunu öğrendim (Çeyreklere göre değerlendirme de önemlidir.).
Bu yapıda saptanan uç değerleri çıkartmak için ise filtreleme işlemi
kullanılması uygunmuş. Son olarak geom_text() ve
ylab() fonksiyonunun kullanımı anlamadığımı
söyleyebilirim.
Yukarıda ele aldığım yapılar yanı sıra “Openintro” belgesinde ek
olarak çeşitli fonksiyonlara değinilmiştir. round()
fonksiyonu ile elde edilen sayıların yuvarlama işleminin
gerçekleştiğini,mean(),median(),mod(),var(),sd(),quantile(ele alınacak yapı, çeyrek değeri),
IQR() ile temel istatistiklerin saptanabileceği ve
if_else(değerler,"","") ile çeşitli kararlar ele
alınmıştır.Ayrıca, ranjın ise elle kendi formullendirmemiz ile olacağını
öğrendim.log() fonksiyonunun ise tam olarak nasıl çevirme
işlemi yaptığını anlamadım.! ile de istenmeyen veri
belirtilir. Bunun yanı sıra, “mutate(has_image = image == 1)”
fonksiyonunda birden çok yapının olması durumunun temel mantığını
anlayamadım.
Üçüncü kaynağımız olan EPODDER kütüphanesindeki kitapla birlikte ise
normalde bildiğim fonksiyonların alt dallarını da öğrenmiş
bulunmaktayım. Öncelikle devtool yapısıyla birlikte
tuev paketini bulamadım. Bununla birlikte
install kısmında da bu pakete erişemediğimden dolayı
setleri kendim indirip aktardım. Kitap kapsamında ilk olarak
pipe operatörünün magittr paketi içerisinde
bulunduğunu öğrendim ve paket içeriğinden pipe operatörünün
farklı bir kullanımı olup olmadığını inceledim. Bunun yanı sıra kitap
kapsamıda head(),filter()
<-,pipe(),
==,<=, ! gibi operatörlere
yönelik denemeler yaptım.İstenmesi halinde hazırladığım dosyayıda
yükleyebilirim.
Kitap kapsamında | işaretinin veya anlamına geldiğini
öğrendim. Bu yapının özellikle ikili seçimlerde önemli olduğunu
düşünmekteyim. Bunun yanı sıra select() fonksiyonu
içerisindeki starts_with(), num_range() gibi
fonksiyonlar üzerinde çalıştım. Ancak contain() ve
matches() arasındaki farkı tam olarak anlayamadım. Her
ikiside belirli yapıları aradığımızda önemli bir işleve sahiptir.
arrange() ve desc() fonksiyonlarında ise
tekrardan bir hatırlama süreci gerçekleştirdim. select()
fonksiyonunda ise rename() benzerinde isim değişikliği
işlevinin yapıldığını bilmiyordum. Bu yapıyla birlikte kod açısından
tasarruf sağlanacağını düşünmekteyim. Bu duruma benzer olarak da
mutate() fonksiyonu içerisinde .before= ve
.after= yapılarının eklenmesiyle birlikte
relocate() benzeri işlevin gerçekleştirildiğini öğrendim.
Bu durumunda kod açısından tasarruf sağlayacağını düşünmekteyim.
Dikkatimi en çok çeken fonksiyonlardan biri ise
transmute() fonksiyonu oldu. Karmaşık veri setlerinde yeni
oluşturduğumuz sütunlar ile bir daha ele almayacaklarımız arsındaki
ilişkinin saptanması açısından önemli bir değeri olduğunu düşünmekteyim.
Bununla birlikte mutate fonskiyonu kapsamında
if_else,case_when denemeleri de yapmış
bulunmaktayım. count() fonksiyonu kapsamında ise
sort=TRUE kullanımını öğrendim. Bu yapıyla birlikte gruplar
arası karşılaştırma yapmada veri sayısını saptama açısından önemli bir
işlevi olduğunu düşündüm.
summarise() kapsamında ise
min,max,var,diff(range())
gibi fonksiyonları denedim, buna karşın n_distinct()
fonksiyonunun işlevini tam olarak anlamadım. Ayrıca
summarise() kapsamında
summarise(across(c(değişkenler), yapılacak işlem, .names=))
ve summarise_at(vars(değişkenler),list(~işlem)) ile de
birden çok değişkene yönelik işlemleri gerçekleştirebileceğimiz anladım.
İşlem yapma açısından tek kodla çalışmayı sağladığından dolayı önemli
olduğunu düşündüm. Tüm değişkenler için ise everything()
ile yapılmaktadır.
join() fonksiyonunun ise iki farklı veri setini bir
araya getirmekte işlevli olduğunu öğrendim. Bu kapsamda her birinin
görevi farklı olmak üzere left_join(),
right_join(), full_join(),
inner_join(), semi_join(),
anti_join() fonksiyonlarının kullanıldığını öğrendim. Bu
fonksiyonu kullanırken merak duygumun arttığını düşünmekteyim. Özellikle
neden genel olarak A seti temelli bir yapı olduğunu merak ettim. Bu
fonksiyon yanı sıra min,max gibi temel
istatistik değerlerine yönelikte denemeler yaptım. Bu kısımda özellikle
summary()ve describe() fonksiyonları ilgimi
çekti. Değerleri tek tek saptamak yerine toplu bir şekilde incelemeye
imkan tanıyormuş.
Veri inceleme açısından son olarak birden çok sütunu tekte
birleştiren gather() ve bu birleştirmeyi dağıtan
spread() fonksiyonlarını denedim. Ayrıca
seperate(değişken, bölünecek adlar, "MA") fonksiyonun bir
sütunu birden çok sutuna ayirdığını,
unite(değişken, alt dğeikenler, setp ="_") fonksiyonunu ise
tam tersi şekilde bölünmüşleri birleştirdiğini öğrendim.
Veri görselleştirme sürecinde genel olarak önceden bildiğim yapı ve
fonksiyonlarla karşılaştım. Bununla birlikte, çeşitli alt fonksiyonlar
hakkında yeni bilgiler de edindim. Örneğin, facet_grid() ve
facet_wrap() fonksiyonlarının çoklu grafik oluşturmak için
kullanıldığını, geom_point() ve diğer geom_ türlerinin ise
color = "renk", size =,
shape = "", position = "",
alpha = gibi parametrelerle özelleştirilebildiğini yeniden
hatırladım. Ayrıca geom_text(aes(label = "değişken"))
fonksiyonu ile veri noktalarına etiket eklenebildiğini öğrendim.Bunun
yanı sıra, scale_x_continuous() ve
scale_y_continuous() fonksiyonlarının
limits = c(),
breaks = seq(),by =, expand =
gibi argümanlar aracılığıyla eksen aralıklarını, eksen üzerindeki artış
değerlerini ve boşluk ayarlarını düzenlemeye olanak sağladığını gördüm.
Son olarak, scale_color(),
scale_fill("değişken",values(c("renk"))) ve
scale_shape() fonksiyonları ile grafiğin renk, dolgu ve
şekil özelliklerinin ayarlanabildiğini öğrendim. Bu yapılarla birlikte
bir grafiğin daha okunaklı hale geleceğini düşünmekteyim.Ayrıca,
regresoyn eğrisi bazında da stat_regline_equation() ile
eğrinin şekillendirilebieceğini ve daha detaylı bir görünüm elde
edeceğimizi düşündüm.
Son olarak, plotly paketi kapsamında etkileşimli grafik
ve tablolar oluşturma sürecini öğrendim. Bu süreçte, analiz edeceğimiz
değişkenleri group_split fonksiyonu ile gruplara ayırmanın
ve her grubun türüne göre anlamlı biçimde adlandırmanın önemli olduğunu
fark ettim. Örneğin,
OD_1 <- density(data[1][[1]]$ODOKUMA1, na.rm = TRUE)
kodu üzerinden, verilerin yoğunluk dağılımını elde etme sürecini
deneyimledim. Bu aşamadan sonra, add_lines fonksiyonu
kullanılarak yoğunluk grafiği üzerinde x ve y eksenlerine uygun değişken
atamaları yapılmakta, grafik başlıkları ve dolgu (fill) özellikleri
belirlenmektedir. Son olarak, layout(xaxis=, yaxis=) yapısı
aracılığıyla eksen adlandırmalarının düzenlenebildiğini ve bu sayede
grafiğin okunabilirliğinin artırıldığını öğrendim. Bu uygulama, veri
görselleştirmede hem teknik becerimi geliştirmeme hem de etkileşimli
grafiklerin dinamik yapısını daha iyi kavramama katkı sağladı. Ayrıca
yoğunluk grafiğinde olduğu gibi, diğer grafik türlerinde de
plot_ly(x=, y=, color=) ile temel yapı kurulduğunu,
add_grafikturu() (örneğin add_bars, add_lines) ile grafik
türünün belirlendiğini ve
layout(xaxis= list(title=), yaxis= list(title=)) ile eksen
adlarının düzenlendiğini öğrendim. Bu sayede farklı grafik türlerinin
ortak bir mantıkla oluşturulabildiğini fark ettim.
Ödev kapsamında 2013 yılında New York City(NYC) çıkışlı uçuşlara
yönelik detaylı bilgileri içeren nycflights13 veri seti
tercih edilmiştir. Bu veri setinin uçuş gecikmeleri, havaalanı
performansı, zaman serisi gibi yapıların analizlerinde kullanılabileceği
söylenebilir. Bu veri seti nycflights13 paketi içerisindeki
flights yapısıyla birlikte RMarkdown’a aktarılmıştır.
İlk olarak install.packpages() fonksiyonu ile veri
setinin içerisinde bulunduğu nycflight13 paketi
yüklenmiştir. Ardından süreçte kullanılması planlanan
dplyr, ggplot2, tidyverse ve
nycflights13 paketleri library() komutu ile
aktif edilmiştir.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ readr 2.1.5
## ✔ ggplot2 4.0.0 ✔ stringr 1.5.2
## ✔ lubridate 1.9.4 ✔ tibble 3.3.0
## ✔ purrr 1.1.0 ✔ 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
library(tidyr)
library(ggplot2)
library(nycflights13)
Paketlerin aktif edilmesinin ardından nycflights13
içerisindeki flights seti data() fonksiyonuyla
birlikte ucus veri seti olarak aktarılmıştır.
data(flights)
ucus <- flights
Veri setinin yüklenmesinin ardından veri setinde kaç değişken ve kaç
gözlem olduğunun saptanması amacıyla dim() fonksiyonu, veri
setindeki değişkenlere genel bir bakış için ise glimpse()
fonksiyonları kullanılmıştır. Gerçekleştirilen bu süreç doğrultusunda
veri setinin 336776 gözlem ve 19 değişkenle birlikte oluşturulduğu
gözlemlenmiştir. Bu değişkenlere year, month,
day, dep_time, flight,
arr_time gibi yapılar örnek verilebilmekle birlikte bu
değişkenler bazıları kategorik yapıda iken bazıları sayısal bir
yapıdadır. Sayısal yapılara distance air_time,
kategorik değişkenlere ise carrier, origin
değişkenleri örnek verilebilir.
dim(ucus)
## [1] 336776 19
glimpse(ucus)
## Rows: 336,776
## Columns: 19
## $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2…
## $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ dep_time <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, 558, 558, …
## $ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, 600, 600, …
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1…
## $ arr_time <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849,…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -1…
## $ carrier <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", "…
## $ flight <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, 79, 301, 4…
## $ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N394…
## $ origin <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EWR", "LGA",…
## $ dest <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FLL", "IAD",…
## $ air_time <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, 1…
## $ distance <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733, …
## $ hour <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6…
## $ minute <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0…
## $ time_hour <dttm> 2013-01-01 05:00:00, 2013-01-01 05:00:00, 2013-01-01 0…
Değişken yapılarının saptanmasının ardından veri setinin daha rahat
kullanımı amacıyla rename() fonksiyonuyla birikte
değişkenler Türkçeleştirilmiştir. Setteki değişkenlerin
Türkçeleştirilmesinin ardından colnames() fonksiyonu ile
düzenlemeler kontrol edilmiştir.
Bu veri setinde, yil, gun, ay
değişkenleri 2013 yılında New York City’den kalkışlı uçuşların
gün/ay/yıl cinsinden ifadesini bizlere sunmaktadır.Bunun yanı sıra,
kalkis_saati ve planlanan_kalkis degiskenleri
ucagin gerçek ve plananan kalkış saatlerini dakika cinsinden ifade
ederken, kalkis_gecikmesi kalkışın planlanan zamana göre
gecikme süresini dakikalar cinsinden vermektedir.
varis_saati, varis_gecikmesi ve
planlanan_varis degiskenleri ise uçusun gecikme verilerini
bizlere sunmaktadır. Ayrıca hava_yolu değişkeni havayolu
firmasını, ucak_no ucagin tescil numarasını,
kalkis_havaalani ve varis_havaalani ise kalkış
varış havalimanlarını temsil etmektedir. Uçağın havada geçirdiği süre
havada_sure, uçuş mesafesi ise mesafe
değişkeninde mil cinsinden yer almaktadır. Ayrıca, saat ve
dakika değişkenleri kalkış saatinin saat ve dakika kısmını
gösterirken, saat_tarih değişkeni uçuşun tam tarih ve saat bilgisini
sunmaktadır. Tüm bu değişkenlerin adlarının düzenlenmesi aşamasında
değişkenlerin işlevleri göz önünde bulundurulmuştur.
ucus_v1 <- ucus %>%
rename(
yil = year,
ay = month,
gun = day,
kalkis_saati = dep_time,
planlanan_kalkis = sched_dep_time,
kalkis_gecikmesi = dep_delay,
varis_saati = arr_time,
planlanan_varis = sched_arr_time,
varis_gecikmesi = arr_delay,
hava_yolu = carrier,
ucus_no = flight,
ucak_no = tailnum,
kalkis_havaalani = origin,
varis_havaalani = dest,
havada_sure = air_time,
mesafe = distance,
saat = hour,
dakika = minute,
saat_tarih = time_hour
)
colnames(ucus_v1)
## [1] "yil" "ay" "gun" "kalkis_saati"
## [5] "planlanan_kalkis" "kalkis_gecikmesi" "varis_saati" "planlanan_varis"
## [9] "varis_gecikmesi" "hava_yolu" "ucus_no" "ucak_no"
## [13] "kalkis_havaalani" "varis_havaalani" "havada_sure" "mesafe"
## [17] "saat" "dakika" "saat_tarih"
ucus_v1 kapsamındaki kayıp verileri saptamak amacıyla
colSums(is.na()) fonksiyonu kullanılmıştır. Bu eksik
verilerin yanı sıra setin boyutunun yeniden ele alınması için
dim() fonksiyonu kullanılmıştır ve satır, sütun
saptanmıştır. Bu doğrultuda kalkis_saati ve
kalkis_gecikmesi için 8255, varis_gecikmesi ve
havada_sure için 9430, ucak_no için 2512,
varis_saati için 8713 veri eksik bulunmuştur.
colSums(is.na(ucus_v1))
## yil ay gun kalkis_saati
## 0 0 0 8255
## planlanan_kalkis kalkis_gecikmesi varis_saati planlanan_varis
## 0 8255 8713 0
## varis_gecikmesi hava_yolu ucus_no ucak_no
## 9430 0 0 2512
## kalkis_havaalani varis_havaalani havada_sure mesafe
## 0 0 9430 0
## saat dakika saat_tarih
## 0 0 0
Eksik verilerin saptanmasının ardından veri setinde bulunan eksik
verilerin silinmesi amacıyla na.omit() fonksiyonu
kullanılmıştır. Bu silinme işlemi sonrasında boyutların saptanması
amacıyla dim() fonksiyonu kullanılarak satır, sütun
saptanmıştır. Son olarak ucus_v1, ucus_v2
olarak tanımlanmıştır. Bu doğrultuda 327346 veri ve 19 değişken
kalmıştır.
ucus_v2 <- na.omit(ucus_v1)
dim(ucus_v2)
## [1] 327346 19
Ödev kapsamında dersler kapsamında öğrendiğimiz grafik türlerinden yola çıkarak beş farklı grafik oluşturulacaktır.
Dağılım grafiği kapsamında kalkıs_gecikmesi ve
varis_gecikmesi değişkenleri arasındaki ilişkiye bakılması
amaçlanmaştır. Bu kapsamda veri sayısının fazla olmasından dolayı
sample_n() fonksiyonu ile 100 gözlemlik bir örneklem
oluşturulmuştur. Bu örneklerim oluştıurulması sürecinde AA
ve UA havayollarından örneklem seçilmesi amacıyla
filter() fonksiyonu kullanılmış olmakla birlikte
set.seed() ile tekrar üretilebilirliğin sağlanması
amaçlanmıştır.
Grafiğin oluşturulması sürecinde x eksenine
kalkis_gecikmesi, y eksenine varis_gecikmesi
atanmış olup, oluşan noktaların renklendirmesinin ise color
fonksiyonuyla hava yolu olması sağlanmıştır. Ardından dağılım grafiğinin
oluşturulması için geom_point() fonksiyonu kullanılmış
olup, grafikteki noktların şeffaflığı alpha= ile 0.7 olarak
ayarlanmıştır. Ayrıca geom_smooth() ile eğim saptanması
amaçlanmıştır. Grafiğin temel yapısının hazırlanmasının ardından
eksenlerin ve başlığın ayarlanması için labs() fonksiyonu
kullanılmış olup, theme_minimal() ile grafiği teması
minimal olarak seçilmiştir. Lejant konumu ise
theme(legend.position = ile yapılmıştır. Son olarak
geom_vline() fonksiyonuyla deneme amaçlı bir dikey çizgi
oluşturulmuştur.Çizginin türü linetype ile kesikli,
kalınlığı size ile 3 birim ve rengi color ile
kırmızı olarak belirlenmiştir.
set.seed(1000)
ucus_ornekgrup <- ucus_v2 %>%
filter(hava_yolu %in% c( "AA","UA")) %>%
sample_n(100)
ggplot(ucus_ornekgrup, aes(x = kalkis_gecikmesi, y = varis_gecikmesi, color= hava_yolu)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "lm", se= TRUE)+
labs(title = "Kalkış ve Varış Gecikmeleri Dağılımı",
x = "Kalkış Gecikmesi (DK)",
y = "Varış Gecikmesi (DK)")+
theme_minimal()+
geom_vline(xintercept = 0, linetype = "dashed", color = "red", size = 3)+
theme(legend.position = "left")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
Sütun grafiği kapsamında, veri sayısının fazla olmasına bağlı olarak
dört farklı havayolu firması uçuş sayılarına yönelik sütun grafiği
oluşturulmuştur. Bu grafiğin oluşturulması sürecinde
filter() fonksiyonuyla birlikte AA, UA, B6 ve 9E firmaları
seçilmiştir. Ardından n sayısının hesaplanması için
count() fonksiyonu kullanılmıştır. Bu yapıların her biri
ise yine ggplot içerisinde yapılmıştır. Bunun yanı sıra
sütun grafiği oluşturmak için geom_col() fonksiyonu tercih
edilmiş olup, fill= ile renk ayarlaması
gerçekleştirilmiştir. Grafiğin genel teması için ise
theme_dark() tercih edilmiş olup, labs() ile
başlıklandırmalar gerçekleştirilmiştir.
ggplot(ucus_v2 %>%
filter(hava_yolu %in% c("AA","UA","B6","9E")) %>%
count(hava_yolu),
aes(x = hava_yolu, y = n, fill = hava_yolu)) +
geom_col(fill ="pink") +
theme_dark() +
labs(title = "Dort Havayolu Firmasına Gore Ucus Sayısı",
x = "Havayolu Firması",
y = "Ucus Sayısı")
Kutu grafiği oluşturulması amacıyla dört farklı havayolu firmasına
ait uçuşların mesafeleri, havalimanı bazında görselleştirilmiştir. Veri
seçimi için filter() fonksiyonu kullanılarak belirli
havalimanları ve havayolları süzülmüştür. Grafiğin oluşturulmasında
ggplot() fonksiyonu kullanılmış ve aes()
fonksiyonu ile x eksenine hava_yolu, y eksenine mesafe atanmıştır.
Renklendirme, fill= argümanı ile havayolu değişkenine göre
gerçekleştirilmiştir. Havalimanlarına göre sınıflandırma,
facet_wrap(~) fonksiyonu aracılığıyla yapılmıştır. Grafiğin
anlaşılabilirliğini artırmak amacıyla başlıklandırma için
labs(), tema seçimi için theme_minimal(),
lejant pozisyonunun düzenlenmesi için ise legend.position()
fonksiyonları kullanılmıştır.
ggplot(ucus_v2 %>% filter(kalkis_havaalani %in% c("LGA","EWR"), hava_yolu %in% c("DL", "EV", "YV","UA")),
aes(x = hava_yolu, y = mesafe, fill = hava_yolu)) +
geom_boxplot(alpha = 0.4) +
facet_wrap(~kalkis_havaalani) +
labs(title = "Havaalanına Gore Ucus Mesafeleri",
x = "Hava Yolu",
y = "Mesafe (mil)") +
theme_minimal()+
theme(legend.position = "right")
Bu çalışmada, histogram grafiği oluşturulmasına karar verdim.
Histogramda, AA, UA ve B6
havayolu firmalarının yılın ilk iki ayında gerçekleştirdiği seferlerde,
varış gecikmesi 10 dakikanın altında olan gözlemler
görselleştirilmiştir. Görselleştirme sürecinde, ilgili yapıları seçmek
amacıyla filter() fonksiyonu kullanılmış ve seçilen
gözlemleri ucus_kucuk adı altında topladım. Grafiğin
oluşturulmasında ise x eksenine varis_gecikmesini,
renklendirme için ise fill argümanı aracılığıyla
hava_yolu firmaları değişkenini atadım. Histogramın
görselleştirilmesini geom_histogram() fonksiyonu ile
gerçekleştirdim. Ayrıca çubuk genişliğin binwidth=, rengi
color=, şeffaflığı alpha= yapılarıyla
ayarladım. Aylara göre sınıflandırmayı ise facet_wrap()
fonksiyonu ile, eksen ve başlıklandırmayı labs() ile,
temayı theme_minimal() gerçekleştirdim. `
ucus_kucuk <- ucus_v2 %>%
filter(hava_yolu %in% c("AA","UA","B6"), ay %in% 1:2, varis_gecikmesi < 10)
ggplot(ucus_kucuk, aes(x = varis_gecikmesi, fill = hava_yolu)) +
geom_histogram(binwidth = 10, color = "black", alpha = 0.5) +
facet_wrap(~ay) +
labs(title = "İlk 2 Ayda 3 Havayolu Firmasının Kalkış Gecikmeleri",
x = "Kalkış Gecikmesi (dakika)",
y = "Ucus Sayısı",
fill = "Hava Yolu") +
theme_minimal()
Bu çizgi grafiği kapsamında AA ve B6 firmalarının ocak ayındaki
günlük sefer sayısının ele alınması amaçlanmıştır. Bu kapsamda veri
sayısının fazla olmasından dolayı sample_n() fonksiyonu ile
100 gözlemlik bir örneklem oluşturulmuştur. Bu örneklerim oluştıurulması
sürecinde AA ve B6 havayollarından örneklem
seçilmesi ve Ocak ayının seçilmesi amacıyla filter()
fonksiyonu kullanılmış olmakla birlikte set.seed() ile
tekrar üretilebilirliğin sağlanması amaçlanmıştır. Örnek grubun
oluşturulmasının ardından günlük olarak kaç verinin olduğunu saptamaya
yönelik olarak ilk group_by() fonksiyonuyla birlitke firma
ve gün sınıflaması, summarise() ile de toplam uçuş sayısı
hesaplanmıştır. Grafiğin oluşturulması sürecinde x eksenine
gün değişkeni, y eksenine ise sayi değişkeni
atanmıştır. Renklendirme amacıyla ise hava_yolu değişkeni
atanmıştır. Ardından çizgi grafiğine yönelik olarak
geom_line() ve geom_point() fonksiyonlarının
ataması sağlanmıştır. Son olarak grafiklerin iki farklı şekilde
verilmesi için ise facet_wrap() ile hava yolu ataması
gerçekleştirilmiştir.
set.seed(1001)
ucus_ornekgrup2 <- ucus_v2 %>%
filter(hava_yolu %in% c( "AA", "B6"), ay %in% 1) %>%
sample_n(100)
ucus_gunluk <- ucus_ornekgrup2 %>%
group_by(hava_yolu, gun) %>%
summarise(sayi = n())
## `summarise()` has grouped output by 'hava_yolu'. You can override using the
## `.groups` argument.
ggplot(ucus_gunluk, aes(x=gun, y=sayi, color= hava_yolu))+
geom_line()+
geom_point()+
facet_wrap(~hava_yolu)+
labs(title = "İki Firmaya Yönelik Aylik Ucus",
x="Gun",
y="Ucus Sayisi")+
theme_dark()
Bu grafik kapsamında uçuşlardaki kalkış gecikmesi ve varış gecikmesi arasındaki ilişkiyi ele almaya çalıştım. Genel bazda inceleme gerçekleştirildiğinde uçakların geç kalkma süresi arttıkça, varış süreleride o kadar geciktiği gözlenmektedir. Dağılım çizgisi incelendiğinde sol alttan sağ üste doğru gidilmesine bağlı olarak belirttiğim ilişki kapsamında pozitif bir ilişki gözlenmektedir.Havayolu firması bazında bakıldığında ise UA firmasının AA’ya göre daha fazla varış gecikmesi olduğu gözlenmektedir.
Belirttiğim ilişkinin gözlenmesinde dağılım grafiğinin önemli bir katkı sağladığını düşünmekteyim. Buna karşın sol alt köşede veri sayısının fazla olmasına bağlı olarak verilerin okunmasının kısmen zorladığını ifade edebilirim. Bu doğrultuda density plot kullanılabileceğini düşündüm.
Bu grafik kapsamında 9E, AA, B6 ile UA firmalarının yıllık uçuşlarının sayılarının saptanması ve bu firmaların uçuş sayılarının karşılaştırılması hedeflemiş bulunmaktayım. Elde ettiğim çizgi grafiği doğrultusunda, yıllık bazda en fazla uçuşu yaklaşık 58–59 bin sefer ile UA havayolu firmasının gerçekleştirdiği görülmektedir. Bunu 50–55 bin aralığındaki uçuş sayısıyla B6 firması, 32–33 bin civarındaki uçuş sayısıyla AA firması ve son olarak 17–18 bin civarındaki uçuş sayısıyla 9E firması takip etmektedir.
Grafiğin uçuş sayılarını karşılaştırmak için uygun olduğunu düşünmekle birlikte sütun grafiği yanı sıra uçuşların yüzdelik olarak ele alınması açısından pasta grafiğininde uygun olabileceğini düşünmekteyim.
Bu grafik kapsamında EWR ve LGA havalimanlarından kalkışı olan dört havayolu firmasının uçuş mesafelerini karşılaştırmayı amaçladım. Kutu grafiklerini incelediğimizde EWR havalimanından kalkan uçakların LGA’dan kalkan uçaklara göre daha uzun mesafelere gittiği gözlenmektedir. Bunu özel bazda incelediğimizde EWR havalimanından UA firmasına ait uçakların en uzak mesafelere gittiği gözlenmektedir.LGA havalimanında da UA firmasının daha uzun bir mesafe gittiğini ifade edebilirim. Ayrıca UA firmasının mesafe açısından en büyük çeşitliliğe sahip olduğunu da söyleyebiliriz.
Oluşturduğum bu grafiğin genel olarak medyan, çeyreklik gibi değerlerin görülmesi açısından önemli olduğunu düşünüyorum. Bunun yanı sıra, önceki haftalardaki ödevlerde denediğim keman grafiğinin bu yapıyı ele almak açısından daha açık bilgiler sunacağını düşünmekteyim.
Oluşturduğum bu histogram grafiği, Ocak ve Şubat aylarında gerçekleşen uçuşlar arasından, varışta en fazla 10 dakika geciken seferlerin kalkış gecikmelerini üç farklı havayolu firması (AA, B6 ve UA) için göstermektedir. Grafik, bu firmaların kısa gecikmeli uçuş performanslarını karşılaştırmalı olarak inceleme olanağı sunmaktadır. Histogram grafiğine göre uçakların çoğu belirtilen saatten erken kalkış gerçekleştirmiş. Özel bazda bakıldığında Ocak ve Şubat aylarında UA firmasının diğer iki firmaya göre daha erken kalkan yapıda olduğu gözlenmektedir.
Grafiğin genel olarak anlaşılır olduğunu düşünmekle birlikte yığılma
duruma yönelik olarak çeşitli değişikliklerin uygulanabileceğini de
düşünmekteyim. Bunun için yoğunluk grafiği tercih edilebilir.Bunun yanı
sıra, oluşturduğum formu başka bir zamanda
position= "dodge" ile de denemiş bulunmaktayım. Ancak, bana
daha karışık bir şekilde gözüktü.
Bu çizgi grafiği, AA ve B6 havayolu firmalarının Ocak ayı boyunca gerçekleştirdikleri günlük uçuş sayılarını göstermektedir (100 veri üzerinden). Ay içerisinde değişimin gözlenmesi açısından bu yöntemin uygun olacağını düşündüm. Elde edilen buglular doğrultusunda B6 firmasının 6 uçuşla maksimum günlük uçuşu gösterdiği söylenebilir. Bunun yanı sıra, B6 firmasının uçuşlarının günlük bazda daha dalganan bir yapıda olduğu gözlenmektedir. Buna karşın, AA firmasında ise daha istikrarlı bir yapı gözlenmektedir.
Bu grafik türünün ele aldığım yapı için uygun olduğunu düşünmekteyim. İlk olarak üst üste çizgiler halinde bir yapı oluşturmuştum, ancak verileri okumakta zorlandığımı fark ettiğim de iki farklı grafik halinde sunmaya karar verdim. Ele aldığım bu yapının, çizgi grafiği yanı sıra, histogram ya da bar grafiğiyle de ele alınabileceğini düşünmekteyim.
Bu hafta gerçekleştirdiğimiz ders kapsamında öncelikle
function(argüman_adı){işlem} yapısını kullanarak fonksiyon
oluşturmayı öğrendim. Bu süreçte, fonksiyon içerisinde işlem
yapılabilmesi için değer atamalarının genel olarak
a <- c() biçiminde gerçekleştirildiğini fark ettim.
Ayrıca, fonksiyon oluştururken
function(x, argüman_adı = varsayılan_değer (örneğin, 2))
biçimiyle varsayılan default değer ataması yapılabileceğini
öğrendim.
Fonksiyon oluşturmanın yanı sıra, rnorm(n) yapısını
kullanarak ortalaması 0 ve standart sapması 1 olacak şekilde rastgele
değerler üretilebileceğini öğrendim. Bu fonksiyonun
rnorm(n = , mean = , sd = ) biçiminde kullanılması
durumunda ise istenen ortalama ve standart sapma değerlerine sahip
verilerin üretilebildiğini gözlemledim. Ayrıca, üretilen bu verilerin
herkes için aynı şekilde elde edilebilmesi amacıyla
set.seed(değer) fonksiyonunun kullanılması gerektiğini fark
ettim. Bununla birlikte, dışarıdan bir veri seti yüklemek gerektiğinde
load("dosya kısayolu") komutuyla R ortamına veri
aktarılabileceğini yeniden hatırladım.
Veri setleri üzerinde yapılan işlemler sırasında, özellikle etiketli
labelled değişkenlerin analiz sürecinde bazı sorunlara yol
açabildiğini gözlemledim. Bu nedenle, söz konusu etiketli değişkenlerin
düzenlenmesinde haven ve sjlabelled
paketlerinin kullanılması gerektiğini öğrendim. Bu paketlerin
kullanımında, is_labelled() fonksiyonu değişkenlerin
etiketli olup olmadığını kontrol ederken etiketli olan sütunlar
as.factor() fonksiyonu aracılığıyla faktör değişkenlere
dönüştürülür. Bu dönüşüm sürecinde, mutate_if() yerine
mutate(across(where(is_labelled), as.factor)) yapısının
kullanılmasının daha doğru sonuçlar verdiğini öğrendim. Ayrıca
is.factor() fonksiyonuyla birlikte de faktör yapılarının
saptandığını öğrendim.
Yukarıda belirtilen fonksiyonlar yanı sıra geçen hafta yaptığımız
ödevlerde kullandığımız kayıp verilerin saptanmasında kullanılan
is.na() ve kayıp verilerin silinmesinde kullanılan
na.omit() fonksiyonlarına yönelik deneme süreci
gerçekleştirdik.Ayrıca distinct() fonsikyonu ilede bir
değişkenin kaç farklı değer aldığını saptayabileceğimizi öğrendim.
Oluşturduğumuz grafikler kapsamında, ggplot fonksiyonunun oldukça
kapsamlı ve esnek bir yapıya sahip olduğunu öğrenmiş bulunmaktayım.
Özellikle çubuk grafikleri oluştururken, çubukların yan yana
gösterilmesi gerektiğinde geom_bar(position = "dodge")
ifadesinin kullanıldığını öğrendim. Bunun yanı sıra,
facet_wrap() fonksiyonu aracılığıyla belirli değişkenlere
göre ayrı grafikler oluşturulabileceğini, geom_vline()
fonksiyonuyla grafiğe dikey çizgiler eklenebileceğini ve bu çizgilerin
konumunun geom_vline(xintercept = değer) biçiminde
belirtilebileceğini anladım. Ayrıca, çizgilerin renklerinin
color =, türlerinin linetype = "",
kalınlıklarının ise size = sayı değeri parametreleriyle
düzenlenebileceğini öğrendim. Histogram türü grafiklerde ise çubuk
sayısının bins = veya binwidth = argümanları
aracılığıyla değiştirilebileceğini gözlemledim. Tüm bu denemeleri
uygulamalı olarak gerçekleştirdim ve ayrı bir dosyamda
saklamaktayım.
Bu hafta öğrendiklerim doğrultusunda özellikle grafikler üzerinde yapılan işlemler dikkatimi çekti ve bu konuda karmaşık kodlar yazmayı denerken zorlandığımı da fark ettim. Bu konuda nasıl bir sırayla kodları yazmam gerektiğini daha iyi anlamam için daha çok antreman yapmam gerekiyormuş. Ayrıca, fonksiyon oluşturma sürecinde de matematiksel formüllere yönelik bilgi eksiğimi fark ettim. Bu konuda da kendi eksiğimi kapatmak için daha çok deneme yapmam gerektiğini hissettim. Bunlar yanı sıra, dersin genel olarak verimli geçtiğini ve aklıma yeni fikirler gelmesinde yol gösterici olduğunu ifade edebilirim.