Çalışma hakkında

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")

Başlarken

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)

3D İnteraktif Dünya Gösterimi

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)))

Teşekkürler :)

İ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