INTRODUCTION

    Ease My Trip adalah platform internet untuk memesan tiket penerbangan, dan merupakan platform yang digunakan calon penumpang untuk membeli tiket. Hal ini akan sanagt membantu dalam penemuan wawasan berharga yang akan sangat bermanfaat bagi penumpang. Tujuan dari penelitian ini sendri adalah untuk menganalisis kumpulan data pemesanan penerbangan yang diperoleh dari situs Ease My Trip. Dari data ini kita akan menggunakan beberapa fungsi yang ada dalam pemrograman yang ada di R. Hingga hasil akhirnya kita bisa menjawab beberapa business question dalam bentuk plotting data.

link : https://www.kaggle.com/datasets/shubhambathwal/flight-price-prediction

IMPORT LIBRARY

library(dplyr)
library(plotly)
library(glue)
library(scales)
library(tidyverse)
library(tidyr) 
library(ggpubr)
library(ggplot2)
library(carData)
library(ggridges)

READ DATA

Hal pertama yang harus kita lakukan yaitu import data kita terlebih dahulu read.csv.

flight_vis<- read.csv("Clean_Dataset.csv")

DATA INSPECTIONS

Kita gunakan head() untuk melihat urutan data teratas dan gunakan tail() untuk melihat urutan data paling bawah.

head(flight_vis)

Melihat struktur data yang dimiliki dapat menggunakan fungsi glimpse().

glimpse(flight_vis)
#> Rows: 300,153
#> Columns: 12
#> $ X                <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
#> $ airline          <chr> "SpiceJet", "SpiceJet", "AirAsia", "Vistara", "Vistar…
#> $ flight           <chr> "SG-8709", "SG-8157", "I5-764", "UK-995", "UK-963", "…
#> $ source_city      <chr> "Delhi", "Delhi", "Delhi", "Delhi", "Delhi", "Delhi",…
#> $ departure_time   <chr> "Evening", "Early_Morning", "Early_Morning", "Morning…
#> $ stops            <chr> "zero", "zero", "zero", "zero", "zero", "zero", "zero…
#> $ arrival_time     <chr> "Night", "Morning", "Early_Morning", "Afternoon", "Mo…
#> $ destination_city <chr> "Mumbai", "Mumbai", "Mumbai", "Mumbai", "Mumbai", "Mu…
#> $ class            <chr> "Economy", "Economy", "Economy", "Economy", "Economy"…
#> $ duration         <dbl> 2.17, 2.33, 2.17, 2.25, 2.33, 2.33, 2.08, 2.17, 2.17,…
#> $ days_left        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
#> $ price            <int> 5953, 5953, 5956, 5955, 5955, 5955, 6060, 6060, 5954,…

Dengan menggunakan fungsi glimpse() kita mendapatkan informasi bahwa data kita terdapat 300.153 baris dan 12 columns. Memuat informasi columns sebagai berikut :

    `airline`             : Nama perusahaan penerbangan disimpan pada kolom maskapai.
    `flight`              : Penerbangan menyimpan informasi mengenai kode penerbangan pesawat.
    `source_city`         : Kota tempat penerbangan lepas landas.
    `departure_time`      : Menyimpan informasi tentang waktu keberangkatan.
    `stops`               : Menyimpan jumlah perhentian antara kota sumber dan kota tujuan.
    `arrival_time`        : Menyimpan informasi tentang waktu kedatangan.
    `destination_city`    : Kota tempat penerbangan akan mendarat.
    `class`               : Berisi informasi tentang kelas kursi, Bisnis dan Ekonomi.
    `duration`            : Menampilkan jumlah keseluruhan waktu yang diperlukan untuk melakukan perjalanan antar kota dalam hitungan jam.
    `days_left`           : Ini adalah karakteristik turunan yang dihitung dengan mengurangkan tanggal perjalanan dengan tanggal pemesanan.
    `price`               : Informasi harga tiket.

CLEANSING DATA & PRE-PROCESSING

Kita check apakah terdapat missing value atau tidak pada data yang kita miliki menggunakan fungsi anyNA().

anyNA(flight_vis)
#> [1] FALSE

Setelah kita melakukan pengecekan missing value menggunakan fungsi anyNA() tidak terdapat missing value di tandai dengan munculnya FALSE pada output

Kita coba untuk merapihkan data kita, membuang columns atau baris yang tidak digunakan menggunakan conditional subsetting subset().

flight_clean <- subset(flight_vis, select = -X)

Setelah di subset kita cek lihat rangkuman dari data kita menggunakan fungsi summary().

summary(flight_clean)
#>    airline             flight          source_city        departure_time    
#>  Length:300153      Length:300153      Length:300153      Length:300153     
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>     stops           arrival_time       destination_city      class          
#>  Length:300153      Length:300153      Length:300153      Length:300153     
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>     duration       days_left      price       
#>  Min.   : 0.83   Min.   : 1   Min.   :  1105  
#>  1st Qu.: 6.83   1st Qu.:15   1st Qu.:  4783  
#>  Median :11.25   Median :26   Median :  7425  
#>  Mean   :12.22   Mean   :26   Mean   : 20890  
#>  3rd Qu.:16.17   3rd Qu.:38   3rd Qu.: 42521  
#>  Max.   :49.83   Max.   :49   Max.   :123071

DATA VISUALIZATION

Dari pengolahan data yang telah kita lakukan sebelumnya, saat ini kita akan mencari tau dan menjawab business question tersebut dalam bentuk visualization.

Saat ini kita akan mencari tahu jumlah data dari variable airline, lalu kita coba untuk urutkan datanya dari yang tertinggi ke yang terendah.

#menghitung persentase dan freq columns `airline`
flight_col <- flight_clean %>% 
  count(airline) %>% 
  mutate(pct = n/sum(n),
         pctlabel = paste0(round(pct*100), "%"))

flight_col <- arrange(flight_col, desc(n))
head(flight_col, n = 10)
ggplot(data = flight_col,
       aes(x = reorder(airline, -pct),
           y = pct)) +
  geom_bar(stat = "identity",
           fill = rainbow(6),
           color = "azure3") +
  geom_text(aes(label = pctlabel),
            vjust = -0.25) +
  theme_minimal() +
  labs(x = "airline",
       y = "frequency",
       title = "Sorting & Labeling by Rank") +
  theme(axis.text.x = element_text(angle = 45,
                                   hjust = 1))

Berdasarkan urutan dari participant berdasarkan data airline adalah Vistara berjumlah 127.859 (43%), Air_India berjumlah 80.892 (27%), Indigo berjumlah 43.120 (14%), GO_FIRST berjumlah 23.173 (8%), AirAsia berjumalh 16.098 (5%), SpiceJet berjumlah 9.011(3%).

Kita buat grafik yang menampilkan rata-rata data harga pada airline.

#hitung rata-rata harga pada setiap `airline`
flight_col2 <- flight_clean %>% 
  group_by(airline) %>% 
  summarize(mean_price = mean(price))
ggplot(data = flight_col2,
       aes(x = reorder(airline, -mean_price),
           y = mean_price)) +
  geom_bar(stat = "identity",
           fill = rainbow(6)) +
  geom_text(aes(label = dollar(mean_price)),
            vjust = -0.25)+
  theme_minimal() +
  labs(title = "Mean Price by Airline",
       subtitle = NULL,
       x = "airline",
       y = "mean_price")

*Berdasarkan urutan dari data airline adalah Kisaran atau range harga pada airline Visatara yaitu sebesar $30,396.54, Air_India yaitu sebesar $23,507.02, SpiceJet yaitu sebesar $6,179.28, GO_FIRST yaitu sebesar $5,652.01, Indigo yaitu sebesar $5,324.22, AirAsia yaitu sebesar $4,091.07.

Coba kita lihat distribusi data harga price berdasarkan class yang dikelompokkan.

ggplot(flight_clean,
       aes(x = price,
           fill = class)) +
  geom_density(alpha = 0.5) +
  theme_minimal() +
  labs(title = "Price Distribution by Airline")

Untuk harga class Economy masih menjadi paling banyak digunakan dari pada kelas Business.

Kita coba mencari tahu rata-rata class berdasarkan destination_city.

#buat data frame nya terlebih dahulu
viz_data <- as.data.frame(table(flight_clean$destination_city, flight_clean$class))

#perbaiki nama kolom
names(viz_data) <- c("destination_city", "class", "frequency")
#buat visualisasinya
ggplot(viz_data,
       aes(x = frequency,
           y = reorder(destination_city, frequency))) +
  geom_col(aes(fill = class), position = "dodge") +
  geom_label(aes(label = frequency)) +
  labs(
    title = "Grafik Class Berdasarkan Kota Tujuannya",
    caption = "source : kaggle.com"
  )

Berdasarkan hasil data visualisasi diatas didapatkan bahwa untuk kota tujuan Mumbai mempunya penerbangan class economy sebanyak 40.106 dan class business sebanyak 18.991, Delhi mempunya penerbangan class economy sebanyak 40.653 dan class business sebanyak 16.707, Bangalore mempunya penerbangan class economy sebanyak 34.870 dan class business sebanyak 16.198, Kolkata mempunya penerbangan class economy sebanyak 34.776 dan class business sebanyak 14.758, Hyderabad mempunya penerbangan class economy sebanyak 29.051 dan class business sebanyak 13.675, Chennai mempunya penerbangan class economy sebanyak 27.210 dan class business sebanyak 13.158.

SUMMARY

Dari beberapa visualisasi yang telah kita lakukan terhadap business question, didapatkan informasi bahwa airline yang memiliki data paling tinggi digunakan adalah Vistara berjumlah 127.859 (43%) dan yang paling rendah adalah SpiceJet berjumlah 9.011(3%). Untuk rata-rata harga airline paling tinggi masih di duduki oleh Visatara yaitu sebesar $30,396.54, dan yang terendah AirAsia yaitu sebesar $4,091.07. Dan untuk distribusi harga berdasarkan class terdapat pada class economy yang paling tinggi. Untuk kota tujuan paling tinggi terdapat kota Delhi dengan class tertingginya class economy sebanyak 40.653. Sedangkan untuk class business kota tujuan yang paling tinggi yaitu Mumbai sebanyak 18.991.