Merhaba. Bu çalışmada Wikipedia.com’da bulunan Türk Hava Yolları’na ait uçuş noktaları tablosunun 3D olarak dünya üzerinde interaktif görselleştirmesini bulabilirsiniz. Çalışmadaki veriler kaynağı kısıtlı olduğu ve Coronavirüs önlemleri kapsamında sıklıkla değişkenlik gösterdiği için normal hayatta icra edilen seferlerle uyumluluk göstermeyebilir. Bu konuda en doğru bilgiyi almak için lütfen https://www.turkishairlines.com/tr-int/ucak-bileti/ ve https://www.turkishairlines.com/tr-tr/duyurular/coronavirus-salgini/seyahat-kisitlamalari/ sitelerini ziyaret ediniz. Sadece eğitim amaçlı hazırlanmış açık kaynak kodlu bir çalışmadır.
Kullandığım Kaynaklar
Destinasyon verisi https://tr.m.wikipedia.org/wiki/T%C3%BCrk_Hava_Yollar%C4%B1_u%C3%A7u%C5%9F_noktalar%C4%B1_listesi
Echarts 3D plot çalışması https://rpubs.com/bradyajohnston/tt-2021-01-26
Havalimanlarının Enlem/Boylam verileri https://openflights.org/data.html
Kullandığım Kütüphaneler
rvest kütüphanesi websitesi üzerinden scraping yolu ile verinin kazınmasına, tidyverse ve magrittr kütüphaneleri veri manipülasyonu yapılmasına, echarts4r ve echarts4r.assets kütüphaneleri de 3D görsel oluşturmak için kulanılmıştır. echarts4r.assets kütüphanesi CRAN üzerinde bulunmadığı için GitHub üzerinden yüklenmesi gerekmektedir.
library(rvest)
library(tidyverse)
library(magrittr)
library(echarts4r)
library(echarts4r.assets)
#install.packages("devtools")
#remotes::install_github("JohnCoene/echarts4r.assets")
Wikipedia.com’dan veri kazıma işlemi
thydata <-
read_html("https://tr.m.wikipedia.org/wiki/T%C3%BCrk_Hava_Yollar%C4%B1_u%C3%A7u%C5%9F_noktalar%C4%B1_listesi") %>%
html_nodes(".wikitable") %>%
html_table(fill=T) %>% .[[2]]
str(thydata)
## 'data.frame': 379 obs. of 5 variables:
## $ Şehir : chr "Aalborg" "Abican" "Abu Dabi" "Abuja" ...
## $ Ülke : chr "Danimarka" "Fildişi Sahili" "Birleşik Arap Emirlikleri" "Nijerya" ...
## $ IATA : chr "AAL" "ABJ" "AUH" "ABV" ...
## $ ICAO : chr "EKYT" "DIAP" "OMAA" "DNAA" ...
## $ Havalimanı: chr "Aalborg Havalimanı[F]" "Port Bouet Havalimanı" "Abu Dabi Havalimanı" "Nnamdi Azikiwe Havalimanı#" ...
Kazınan ve verinin temizlenmesi ve manipülasyon işlemleri
Bu noktada temizlenen veride sadece uçulan (kargo yolcu farketmeksizin) destinasyonlara ait veriler filtrelenmiştir.
thydata %<>%
mutate(durum =
ifelse(str_detect(Havalimanı, "[F]"),"Iptal",
ifelse(str_detect(Havalimanı, "\\^"),"Planlanan",
ifelse(str_detect(Havalimanı, "\\#"),"Yolcu ve Kargo",
ifelse(str_detect(Havalimanı, "\\[Kargo\\]"),"Sadece Kargo",
ifelse(str_detect(Havalimanı, "\\[Merkez\\]"),"Ana Base",
ifelse(str_detect(Havalimanı,"\\[Yan Merkez\\]"),"İkinci Base","Uçulan")))))))
#Uçuş Noktaları
thydata %<>% filter(!durum %in% c("Iptal","Planlanan"))
head(thydata,10)
## Şehir Ülke IATA ICAO
## 1 Abican Fildişi Sahili ABJ DIAP
## 2 Abu Dabi Birleşik Arap Emirlikleri AUH OMAA
## 3 Abuja Nijerya ABV DNAA
## 4 Adana Türkiye ADA LTAF
## 5 Addis Ababa Etiyopya ADD HAAB
## 6 Adıyaman Türkiye ADF LTCP
## 7 Ağrı Türkiye AJI LTCO
## 8 Ahmetabat Hindistan AMD VAAH
## 9 Akabe Ürdün AQJ OJAQ
## 10 Akra Gana ACC DGAA
## Havalimanı durum
## 1 Port Bouet Havalimanı Uçulan
## 2 Abu Dabi Havalimanı Uçulan
## 3 Nnamdi Azikiwe Havalimanı# Yolcu ve Kargo
## 4 Adana Şakirpaşa Havalimanı Uçulan
## 5 Bole Uluslararası Havalimanı Uçulan
## 6 Adıyaman Havalimanı Uçulan
## 7 Ağrı Havalimanı Uçulan
## 8 Sardar Vallabhbhai Patel Uluslararası Havalimanı# Yolcu ve Kargo
## 9 Kral Hüseyin Havalimanı Uçulan
## 10 Kotoka Havalimanı# Yolcu ve Kargo
Openflights.org üzerinden veri çekilmesi
Openflights.org web sitesi dünya üzerindeki bütün havaalanlarına ait birçok veriyi barındıran ücretsiz bir veri kaynağıdır. Bu adımda site üzerinden veri çekilip elimizdeki thydata adlı veriye eklenerek ve manipülasyon işlemleri yapılmıştır.
airportdata <- read.csv("https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat",header=F,encoding = "UTF-8")
airportdata %<>% select(V5,V7,V8,V12) %>%
rename("IATA"="V5","latitude"="V7","longitude"="V8")
df<-thydata %>% left_join(airportdata, by="IATA")
continent1 <- c()
for (i in 1:length(strsplit(df$V12,split='/', fixed=TRUE))){
continent1[i] <- strsplit(df$V12,split='/', fixed=TRUE)[[i]][[1]]
}
df %<>% mutate(continent = continent1, fromlat="40.9769",fromlong="28.8146",value="1") %>% select(-V12)
Eksik verilerin tespiti
Her çalışmanın olmazsa olmazı olan eksik gözlemlerin tespiti ve düzenlenmesi işlemleri yapılmıştır. İlk olarak konum satırı boş gelen satırlar tespit edilip manuel olarak eklenmiş, ikinci adımda ise continent verisi eksik ve hatalı olan satırlar düzeltilmiştir.
#Konum bilgisi eksik olan satırlar
df %>% filter(is.na(latitude) == TRUE)
## Şehir Ülke IATA ICAO Havalimanı durum
## 1 Bağdat Irak SDA ORBI Bağdat Havalimanı# Yolcu ve Kargo
## 2 Berlin Almanya BER EDDB Berlin Brandenburg Havalimanı Uçulan
## latitude longitude continent fromlat fromlong value
## 1 NA NA <NA> 40.9769 28.8146 1
## 2 NA NA <NA> 40.9769 28.8146 1
#Continent bilgisi eksik ya da hatalı olan satırlar
df %>% filter(continent == "\\N")
## Şehir Ülke IATA ICAO
## 1 Dakar Senegal DSS GOBD
## 2 Doha Katar DOH OTHH
## 3 Hakkâri Türkiye YKO LTCW
## 4 Haydarabat Hindistan HYD VOHS
## 5 İslamabad Pakistan ISB OPIS
## 6 İstanbul Türkiye IST LTBA
## 7 Ordu/Giresun Türkiye OGU LTCB
## Havalimanı durum latitude
## 1 Blaise Diagne Uluslararası Havalimanı# Yolcu ve Kargo 14.67000
## 2 Hamad Uluslararası Havalimanı# Yolcu ve Kargo 25.27306
## 3 Hakkâri Yüksekova Selahaddin Eyyubi Havalimanı Uçulan 37.54970
## 4 Rajiv Gandhi Havalimanı[Kargo] Sadece Kargo 17.23132
## 5 İslamabad Uluslararası Havalimanı# Yolcu ve Kargo 33.56071
## 6 İstanbul Atatürk Havalimanı# Yolcu ve Kargo 41.27528
## 7 Ordu Giresun Havalimanı Uçulan 40.96605
## longitude continent fromlat fromlong value
## 1 -17.07333 \\N 40.9769 28.8146 1
## 2 51.60806 \\N 40.9769 28.8146 1
## 3 44.23810 \\N 40.9769 28.8146 1
## 4 78.42986 \\N 40.9769 28.8146 1
## 5 72.85161 \\N 40.9769 28.8146 1
## 6 28.75194 \\N 40.9769 28.8146 1
## 7 38.08099 \\N 40.9769 28.8146 1
df %<>%
mutate(continent = ifelse(Ülke %in% "Senegal", "Africa",
ifelse(Ülke %in% "Katar", "Asia",
ifelse(Ülke %in% "Türkiye","Domestic",
ifelse(Ülke %in% "Hindistan", "Asia",
ifelse(Ülke %in% "Pakistan","Asia",
ifelse(continent %in% "Indian","Africa",
ifelse(IATA %in% "MLE","Asia",continent))))))),
longitude = ifelse(IATA %in% "SDA", "44.234444",
ifelse(IATA %in% "BER","13.5190",longitude)),
latitude = ifelse(IATA %in% "SDA", "33.2625",
ifelse(IATA %in% "BER","52.3738",latitude)))
rm(airportdata,thydata,continent1,i)
Temizlenen ve manipülasyonu yapılan veriler kullanılarak kıtasal bazda gruplandırılmış verinin görselleştirmesini aşağıda bulabilirsiniz. Bu interaktif görsel Türk Hava Yolları’nın Wikipedia.com üzerinde yer alan Şubat 2021 uçuş noktaları verilerinden oluşturulmuştur.
df %>%
group_by(continent) %>%
e_charts() %>%
e_globe(
environment = gray(0.1),
base_texture = ea_asset("world")
) %>%
e_lines_3d(
fromlong,
fromlat,
longitude,
latitude,
value = value,
source_name = IATA,
target_name = IATA,
effect = list(show = TRUE)
) %>%
e_legend(textStyle = list(color = gray(0.9)))
İletişim için aşağıdaki yolları izleyebilirsiniz.
LinkedIn: https://linkedin.com/in/tolgakurtulus Github: https://github.com/tolgakurtuluss Mail: mailto:tolgakurtulus95@gmail.com