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
Hal pertama yang harus kita lakukan yaitu import data kita terlebih dahulu
read.csv.
Kita gunakan
head()untuk melihat urutan data teratas dan gunakantail()untuk melihat urutan data paling bawah.
Melihat struktur data yang dimiliki dapat menggunakan fungsi
glimpse().
#> 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.
Kita check apakah terdapat missing value atau tidak pada data yang kita miliki menggunakan fungsi
anyNA().
#> [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().
Setelah di subset kita cek lihat rangkuman dari data kita menggunakan fungsi
summary().
#> 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
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
priceberdasarkanclassyang 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
classberdasarkandestination_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.
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.