Airline Data Scraping and Visualization
Nama : Rizky Ardhani
NIM : G1501231074
Statistical Machine Learning
Pendahuluan
Airline quality mengacu pada tingkat layanan dan kinerja yang disediakan oleh sebuah maskapai penerbangan kepada penumpangnya. Kualitas ini biasanya dievaluasi dan dinilai berdasarkan berbagai faktor yang diantaranya mencakup keselamatan, kenyamanan, efisiensi, dan layanan pelanggan.
Deskripsi Web
Pada project kali ini, yaitu melakukan scraping pada website https://www.airlinequality.com/. Situs web ini dikenal dengan nama “Skytrax.” Ini adalah platform yang menyediakan penilaian dan ulasan tentang maskapai penerbangan dan bandara di seluruh dunia. Skytrax dikenal karena memberikan informasi terperinci tentang pengalaman penumpang dan peringkat kualitas layanan maskapai dan bandara.
Skytrax dianggap sebagai sumber tepercaya untuk evaluasi kualitas layanan dalam industri penerbangan, dan digunakan oleh penumpang serta profesional industri untuk membuat keputusan yang lebih baik terkait perjalanan udara.
Dalam hal ini, data yang akan dilakukan scraping berkaitan dengan airline ratings, lounge ratings, seat ratings dan airport ratings.
Hasil Data Scraping
Dalam hal ini, data yang akan dilakukan scraping berkaitan dengan airline ratings, lounge ratings, seat ratings dan airport ratings.
## Warning: package 'rvest' was built under R version 4.3.3
##
## 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
Airline Ratings
link_airline = "https://www.airlinequality.com/review-pages/a-z-airline-reviews/airline-review-ratings/"
page_airline = read_html(link_airline)
airline = page_airline %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_two")%>% html_text()
score = page_airline %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_three")%>% html_text()
total_review = page_airline%>% html_nodes(".clearfix+ .clearfix .aggregateColumn_four")%>% html_text()
airline_ratings = data.frame (airline, score, total_review, stringsAsFactors = FALSE)
airline_ratings$score <- as.numeric(airline_ratings$score)
airline_ratings$total_review <- as.numeric(airline_ratings$total_review)Terdapat 564 data airline hasil scraping
## Rows: 564
## Columns: 3
## $ airline <chr> "AB Aviation", "Adria Airways", "Aegean Airlines", "Aer L…
## $ score <dbl> 4, 6, 7, 5, 9, 3, 6, 2, 5, 3, 4, 5, 3, 5, 4, 4, 3, 3, 8, …
## $ total_review <dbl> 3, 91, 780, 1004, 3, 3, 595, 2, 247, 9, 708, 11, 9, 29, 1…
Menampilkan 10 contoh data hasil scraping
## airline score total_review
## 1 AB Aviation 4 3
## 2 Adria Airways 6 91
## 3 Aegean Airlines 7 780
## 4 Aer Lingus 5 1004
## 5 Aero VIP 9 3
## 6 Aerocaribbean 3 3
## 7 Aeroflot Russian Airlines 6 595
## 8 AeroItalia 2 2
## 9 Aerolineas Argentinas 5 247
## 10 Aeromar 3 9
Lounge Ratings
link_lounge = "https://www.airlinequality.com/review-pages/a-z-lounge-reviews/airline-lounge-review-ratings/"
page_lounge = read_html(link_lounge)
airline_lounge = page_lounge %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_two")%>% html_text()
score_lounge = page_lounge %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_three")%>% html_text()
total_review_lounge = page_lounge%>% html_nodes(".clearfix+ .clearfix .aggregateColumn_four")%>% html_text()
airline_lounge_ratings = data.frame (airline_lounge, score_lounge, total_review_lounge, stringsAsFactors = FALSE)
airline_lounge_ratings$score_lounge <- as.numeric(airline_lounge_ratings$score_lounge)
airline_lounge_ratings$total_review_lounge <- as.numeric(airline_lounge_ratings$total_review_lounge)Terdapat 156 data lounge hasil scraping
## Rows: 156
## Columns: 3
## $ airline_lounge <chr> "Adria Airways", "Aegean Airlines", "Aer Lingus", …
## $ score_lounge <dbl> 5, 6, 3, 6, 4, 2, 4, 4, 5, 3, 6, 5, 4, 3, 6, 6, 4,…
## $ total_review_lounge <dbl> 2, 15, 37, 19, 20, 9, 11, 122, 1, 36, 1, 7, 85, 34…
Menampilkan 10 contoh data hasil scraping
## airline_lounge score_lounge total_review_lounge
## 1 Adria Airways 5 2
## 2 Aegean Airlines 6 15
## 3 Aer Lingus 3 37
## 4 Aeroflot Russian Airlines 6 19
## 5 Aeromexico 4 20
## 6 Air Astana 2 9
## 7 Air Berlin 4 11
## 8 Air Canada 4 122
## 9 Air Caraibes 5 1
## 10 Air China 3 36
Seat Ratings
link_seat = "https://www.airlinequality.com/review-pages/a-z-seat-reviews/airline-seat-review-ratings/"
page_seat = read_html(link_seat)
airline_seat = page_seat %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_two")%>% html_text()
score_seat = page_seat %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_three")%>% html_text()
total_review_seat = page_seat%>% html_nodes(".clearfix+ .clearfix .aggregateColumn_four")%>% html_text()
airline_seat_ratings = data.frame (airline_seat, score_seat, total_review_seat, stringsAsFactors = FALSE)
airline_seat_ratings$score_seat <- as.numeric(airline_seat_ratings$score_seat)
airline_seat_ratings$total_review_seat <- as.numeric(airline_seat_ratings$total_review_seat)Terdapat 202 data seat hasil scraping
## Rows: 202
## Columns: 3
## $ airline_seat <chr> "Aegean Airlines", "Aer Lingus", "Aeroflot Russian A…
## $ score_seat <dbl> 6, 5, 6, 10, 5, 1, 4, 9, 4, 3, 4, 5, 8, 5, 4, 4, 1, …
## $ total_review_seat <dbl> 16, 9, 20, 1, 9, 2, 23, 1, 77, 22, 15, 2, 1, 2, 114,…
Menampilkan 10 contoh data hasil scraping
## airline_seat score_seat total_review_seat
## 1 Aegean Airlines 6 16
## 2 Aer Lingus 5 9
## 3 Aeroflot Russian Airlines 6 20
## 4 Aerolineas Argentinas 10 1
## 5 Aeromexico 5 9
## 6 Air Astana 1 2
## 7 Air Berlin 4 23
## 8 Air Busan 9 1
## 9 Air Canada 4 77
## 10 Air Canada rouge 3 22
Airport Ratings
link_airport = "https://www.airlinequality.com/review-pages/a-z-airport-reviews/airport-review-ratings/"
page_airport = read_html(link_airport)
airline_airport = page_airport %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_two")%>% html_text()
score_airport = page_airport %>% html_nodes(".clearfix+ .clearfix .aggregateColumn_three")%>% html_text()
total_review_airport = page_airport%>% html_nodes(".clearfix+ .clearfix .aggregateColumn_four")%>% html_text()
airline_airport_ratings = data.frame (airline_airport, score_airport, total_review_airport, stringsAsFactors = FALSE)
airline_airport_ratings$score_airport <- as.numeric(airline_airport_ratings$score_airport)
airline_airport_ratings$total_review_airport <- as.numeric(airline_airport_ratings$total_review_airport)Terdapat 965 data airport hasil scraping
## Rows: 965
## Columns: 3
## $ airline_airport <chr> "Aalborg Airport", "Aarhus Airport", "Abbotsford …
## $ score_airport <dbl> 6, 1, 4, 3, 6, 3, 3, 10, 4, 3, 3, 5, 4, 1, 9, 7, …
## $ total_review_airport <dbl> 14, 2, 4, 84, 7, 256, 8, 1, 32, 3, 164, 66, 4, 3,…
Menampilkan 10 contoh data hasil scraping
## airline_airport score_airport total_review_airport
## 1 Aalborg Airport 6 14
## 2 Aarhus Airport 1 2
## 3 Abbotsford Intl Airport 4 4
## 4 Aberdeen Airport 3 84
## 5 Abidjan Airport 6 7
## 6 Abu Dhabi Airport 3 256
## 7 Abuja Airport 3 8
## 8 Acapulco Airport 10 1
## 9 Accra Kotoka Airport 4 32
## 10 Adana Airport 3 3
Data Visualisasi
Airline Ratings
Top 5 Airlines by Score
top_5_airlines_score <- airline_ratings %>%
arrange(desc(score)) %>%
select(airline, score) %>%
head(5)
print(top_5_airlines_score)## airline score
## 1 Air Rarotonga 10
## 2 AIRDO 10
## 3 Auric Air 10
## 4 FMI Air 10
## 5 Grand Cru Airlines 10
barplot(
height = top_5_airlines_score$score,
names.arg = top_5_airlines_score$airline,
col="skyblue",
main = "Top 5 Airlines by Score",
xlab = "Airline",
ylab = "Score",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Top 5 Airlines by Total Review
top_5_airlines_totalreview <- airline_ratings %>%
arrange(desc(total_review)) %>%
select(airline, total_review) %>%
head(5)
print(top_5_airlines_totalreview)## airline total_review
## 1 American Airlines 6002
## 2 Spirit Airlines 5149
## 3 United Airlines 4890
## 4 British Airways 3807
## 5 Frontier Airlines 3631
barplot(
height = top_5_airlines_totalreview$total_review,
names.arg = top_5_airlines_totalreview$airline,
col="skyblue",
main = "Top 5 Airlines by Total Review",
xlab = "Airline",
ylab = "Total Review",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Bottom 5 Airlines by Score
bottom_5_airlines_score <- airline_ratings %>%
arrange(score) %>%
select(airline, score) %>%
head(5)
print(bottom_5_airlines_score)## airline score
## 1 Air Cote d'Ivoire 1
## 2 Air Juan 1
## 3 Air Senegal 1
## 4 AirConnect 1
## 5 Andes Líneas Aéreas 1
barplot(
height = bottom_5_airlines_score$score,
names.arg = bottom_5_airlines_score$airline,
col="skyblue",
main = "Bottom 5 Airlines by Score",
xlab = "Airline",
ylab = "Score",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Bottom 5 Airlines by Total Review
bottom_5_airlines_totalreview <- airline_ratings %>%
arrange(total_review) %>%
select(airline, total_review) %>%
head(5)
print(bottom_5_airlines_totalreview)## airline total_review
## 1 Air Belgium 1
## 2 Air Costa 1
## 3 Air Cote d'Ivoire 1
## 4 Air Labrador 1
## 5 Air Senegal 1
barplot(
height = bottom_5_airlines_totalreview$total_review,
names.arg = bottom_5_airlines_totalreview$airline,
col="skyblue",
main = "Bottom 5 Airlines by Total Review",
xlab = "Airline",
ylab = "Total Review",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Lounge Ratings
Top 5 Lounge by Score
top_5_lounge_score <- airline_lounge_ratings %>%
arrange(desc(score_lounge)) %>%
select(airline_lounge, score_lounge) %>%
head(5)
print(top_5_lounge_score)## airline_lounge score_lounge
## 1 Azerbaijan Airlines 10
## 2 IndiGo 10
## 3 Sky Express Airlines 10
## 4 Thai AirAsia 10
## 5 Air Transat 9
barplot(
height = top_5_lounge_score$score_lounge,
names.arg = top_5_lounge_score$airline_lounge,
col="brown",
main = "Top 5 Lounge by Score",
xlab = "Lounge",
ylab = "Score",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Top 5 Lounge by Total Reviews
#top_5_seat_totalreview
top_5_lounge_totalreview <- airline_lounge_ratings %>%
arrange(desc(total_review_lounge)) %>%
select(airline_lounge, total_review_lounge) %>%
head(5)
print(top_5_lounge_totalreview)## airline_lounge total_review_lounge
## 1 British Airways 421
## 2 Qantas Airways 253
## 3 United Airlines 222
## 4 Emirates 216
## 5 Lufthansa 199
barplot(
height = top_5_lounge_totalreview$total_review_lounge,
names.arg = top_5_lounge_totalreview$airline_lounge,
col="brown",
main = "Top 5 Lounge by Total Review",
xlab = "Lounge",
ylab = "Total Review",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Bottom 5 Lounge by Score
bottom_5_lounge_score <- airline_lounge_ratings %>%
arrange(score_lounge) %>%
select(airline_lounge, score_lounge) %>%
head(5)
print(bottom_5_lounge_score)## airline_lounge score_lounge
## 1 ASKY Airlines 1
## 2 Le Saigonnais Lounge 1
## 3 SATA International 1
## 4 Thomson Airways 1
## 5 Air Astana 2
barplot(
height = bottom_5_lounge_score$score_lounge,
names.arg = bottom_5_lounge_score$airline_lounge,
col="brown",
main = "Bottom 5 Lounge by Score",
xlab = "Lounge",
ylab = "Score",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Bottom 5 Lounge by Total Review
bottom_5_lounge_totalreview <- airline_lounge_ratings %>%
arrange(total_review_lounge) %>%
select(airline_lounge, total_review_lounge) %>%
head(5)
print(bottom_5_lounge_totalreview)## airline_lounge total_review_lounge
## 1 Air Caraibes 1
## 2 Air Cote d'Ivoire 1
## 3 AIRDO 1
## 4 ASKY Airlines 1
## 5 Azerbaijan Airlines 1
barplot(
height = bottom_5_lounge_totalreview$total_review_lounge,
names.arg = bottom_5_lounge_totalreview$airline_lounge,
col="brown",
main = "Bottom 5 Lounge by Total Review",
xlab = "Lounge",
ylab = "Total Review",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Seat Ratings
Top 5 Seat by Score
top_5_seat_score <- airline_seat_ratings %>%
arrange(desc(score_seat)) %>%
select(airline_seat, score_seat) %>%
head(5)
print(top_5_seat_score)## airline_seat score_seat
## 1 Aerolineas Argentinas 10
## 2 Air Italy 10
## 3 BA CityFlyer 10
## 4 Germanwings 10
## 5 Iran Air 10
barplot(
height = top_5_seat_score$score_seat,
names.arg = top_5_seat_score$airline_seat,
col="green",
main = "Top 5 Seat by Score",
xlab = "Seat",
ylab = "Score",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Top 5 Seat by Total Reviews
#top_5_seat_totalreview
top_5_seat_totalreview <- airline_seat_ratings %>%
arrange(desc(total_review_seat)) %>%
select(airline_seat, total_review_seat) %>%
head(5)
print(top_5_seat_totalreview)## airline_seat total_review_seat
## 1 British Airways 197
## 2 Cathay Pacific Airways 142
## 3 Emirates 138
## 4 Virgin Atlantic 124
## 5 Lufthansa 123
barplot(
height = top_5_seat_totalreview$total_review_seat,
names.arg = top_5_seat_totalreview$airline_seat,
col="green",
main = "Top 5 Seat by Total Review",
xlab = "Seat",
ylab = "Total Review",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Bottom 5 Seat by Score
bottom_5_seat_score <- airline_seat_ratings %>%
arrange(score_seat) %>%
select(airline_seat, score_seat) %>%
head(5)
print(bottom_5_seat_score)## airline_seat score_seat
## 1 Air Astana 1
## 2 Air India Express 1
## 3 El Al Israel Airlines 1
## 4 ITA Airways 1
## 5 Juneyao Air 1
barplot(
height = bottom_5_seat_score$score_seat,
names.arg = bottom_5_seat_score$airline_seat,
col="green",
main = "Bottom 5 Seat by Score",
xlab = "Seat",
ylab = "Score",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Bottom 5 Seat by Total Review
bottom_5_seat_totalreview <- airline_seat_ratings %>%
arrange(total_review_seat) %>%
select(airline_seat, total_review_seat) %>%
head(5)
print(bottom_5_seat_totalreview)## airline_seat total_review_seat
## 1 Aerolineas Argentinas 1
## 2 Air Busan 1
## 3 Air Dolomiti 1
## 4 Air India Express 1
## 5 Air Italy 1
barplot(
height = bottom_5_seat_totalreview$total_review_seat,
names.arg = bottom_5_seat_totalreview$airline_seat,
col="green",
main = "Bottom 5 Seat by Total Review",
xlab = "Seat",
ylab = "Total Review",
las = 1,
cex.names = 0.8,
horiz = FALSE
)Airport Ratings
Top 5 Airport by Score
top_5_airport_score <- airline_airport_ratings %>%
arrange(desc(score_airport)) %>%
select(airline_airport, score_airport) %>%
head(5)
print(top_5_airport_score)## airline_airport score_airport
## 1 Acapulco Airport 10
## 2 AkronCanton Airport 10
## 3 Barra Eoligarry Airport 10
## 4 Bengkulu Airport 10
## 5 Bhopal Airport 10
barplot(
height = top_5_airport_score$score_airport,
names.arg = top_5_airport_score$airline_airport,
col="pink",
main = "Top 5 Airport by Score",
xlab = "Airport",
ylab = "Score",
las = 1,
cex.names = 0.6,
horiz = FALSE
)Top 5 Airport by Total Reviews
top_5_airport_totalreview <- airline_airport_ratings %>%
arrange(desc(total_review_airport)) %>%
select(airline_airport, total_review_airport) %>%
head(5)
print(top_5_airport_totalreview)## airline_airport total_review_airport
## 1 Manchester Airport 1373
## 2 London Heathrow Airport 1025
## 3 London Stansted Airport 922
## 4 Luton Airport 798
## 5 Paris CDG Airport 767
barplot(
height = top_5_airport_totalreview$total_review_airport,
names.arg = top_5_airport_totalreview$airline_airport,
col="pink",
main = "Top 5 Airport by Total Review",
xlab = "Airport",
ylab = "Total Review",
las = 1,
cex.names = 0.6,
horiz = FALSE
)Bottom 5 Airport by Score
bottom_5_airport_score <- airline_airport_ratings %>%
arrange(score_airport) %>%
select(airline_airport, score_airport) %>%
head(5)
print(bottom_5_airport_score)## airline_airport score_airport
## 1 Aarhus Airport 1
## 2 Agadir Al Massira Airport 1
## 3 Baneasa Airport 1
## 4 Batumi Airport 1
## 5 Biarritz Airport 1
barplot(
height = bottom_5_airport_score$score_airport,
names.arg = bottom_5_airport_score$airline_airport,
col="pink",
main = "Bottom 5 Airport by Score",
xlab = "Airport",
ylab = "Score",
las = 1,
cex.names = 0.7,
horiz = FALSE
)Bottom 5 Airport by Total Review
bottom_5_airport_totalreview <- airline_airport_ratings %>%
arrange(total_review_airport) %>%
select(airline_airport, total_review_airport) %>%
head(5)
print(bottom_5_airport_totalreview)## airline_airport total_review_airport
## 1 Acapulco Airport 1
## 2 Aguadilla Airport 1
## 3 Akita Airport 1
## 4 Al Ula Airport 1
## 5 Alderney Airport 1
barplot(
height = bottom_5_airport_totalreview$total_review_airport,
names.arg = bottom_5_airport_totalreview$airline_airport,
col="pink",
main = "Bottom 5 Airport by Total Review",
xlab = "Airport",
ylab = "Total Review",
las = 1,
cex.names = 0.8,
horiz = FALSE
)