Data yang digunakan pada projek ini merupakan data Starbucks
Coffee Company Beverage Nutrition Information yang bersumber dari
TidyTuesday
dan sudah dilakukan data wragling/preparation pada LBB: Programming for
Data Science. sebelumnya. Pada kesempatan ini saya akan menggunakan
dataset tersebut yang sudah di export menjadi file
sbux_clean.csv.
Pada saat ini meminum kopi bukan lagi untuk memenuhi kebutuhan di pagi hari, tetapi sudah menjadi bagian dari kultur/budaya di masyarakat indonesia terutama bagi generasi milenials. Dimana dahulu mengkonsumsi kopi dilakukan pagi hari sebelum beraktifitas dan saat ini mengkonsumsi kopi dijadikan sebagai media untuk bercengkrama maupun berdiskusi bersama teman maupun kolega. Starbucks adalah salah satu kedai kopi yang berasal dari Amerika Serikat yang memiliki banyak kedai di seluruh dunia dan sangat populer terutama di indonesia. Seiring populernya industri kopi maka para coffee shop juga berlomba untuk memberikan sebuah inovasi pada menu mereka agar lebih disukai oleh pelangganan. Tetapi, apakah para konsumer ini sudah memperhatikan kandungan nutrisi pada kopi yang mereka minum?
Menurut U.S FDA manusia dewasa memiliki batas konsumsi maksimum per hari adalah 400 mg. Jika melebihi batas tersebut akan mengakibatkan efek negatif yang berbeda setiap orang.
Tujuan dari projek ini adalah membuat visualisasi terkait anjuran dari U.S FDA pada konsumsi kafein perhari, sebagai berikut :
Untuk memasukan dataset sbux_clean.csv kita akan
menggunakan fungsi read.csv():
sbux_clean <- read.csv('data input/sbux_clean.csv')Selanjutnya kita akan memunculkan 6 baris pertama dari data
sbux_clean dengan fungsi head() untuk melihat
apakah sudah berhasil dilakukan proses importing file csv tersebut.
head(sbux_clean)Melakukan pengecekan missing values dengan kombinasi
fungsi colSums() dan is.na()
colSums(is.na(sbux_clean))#> product_name size milk whip serv_size_m_l
#> 0 0 0 0 0
#> calories total_fat_g saturated_fat_g trans_fat_g cholesterol_mg
#> 0 0 0 0 0
#> sodium_mg total_carbs_g fiber_g sugar_g caffeine_mg
#> 0 0 0 0 0
#> category
#> 0
Dataset sudah terbaca dan tidak memiliki missing values, langkah
selanjutnya adalah melakukan pengecekan data type
setiap kolom menggunakan fungsi str()
str(sbux_clean)#> 'data.frame': 1147 obs. of 16 variables:
#> $ product_name : chr "Brewed Coffee - Dark Roast" "Brewed Coffee - Dark Roast" "Brewed Coffee - Dark Roast" "Brewed Coffee - Dark Roast" ...
#> $ size : chr "short" "tall" "grande" "venti" ...
#> $ milk : chr "none" "none" "none" "none" ...
#> $ whip : chr "without whip cream" "without whip cream" "without whip cream" "without whip cream" ...
#> $ serv_size_m_l : int 236 354 473 591 236 354 473 591 236 354 ...
#> $ calories : int 3 4 5 5 3 4 5 5 3 4 ...
#> $ total_fat_g : num 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 ...
#> $ saturated_fat_g: num 0 0 0 0 0 0 0 0 0 0 ...
#> $ trans_fat_g : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ cholesterol_mg : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ sodium_mg : int 5 10 10 10 5 10 10 10 5 5 ...
#> $ total_carbs_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ fiber_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ sugar_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ caffeine_mg : int 130 193 260 340 15 20 25 30 155 235 ...
#> $ category : chr "Coffee" "Coffee" "Coffee" "Coffee" ...
Deskripsi Kolom:
Selanjutnya akan dilakukan perubahan data type untuk kolom
product_name, size, milk, whip,
serv_size_m_l, dan category menggunakan fungsi
as.factor()
sbux_clean$product_name <- as.factor(sbux_clean$product_name)
sbux_clean$size <- as.factor(sbux_clean$size)
sbux_clean$milk <- as.factor(sbux_clean$milk)
sbux_clean$whip <- as.factor(sbux_clean$whip)
sbux_clean$serv_size_m_l <- as.factor(sbux_clean$serv_size_m_l)
sbux_clean$category <- as.factor(sbux_clean$category)Dilakukan pengecekan kembali apakah sudah berhasil dilakukan
perubahan data type dengan fungsi str()
str(sbux_clean)#> 'data.frame': 1147 obs. of 16 variables:
#> $ product_name : Factor w/ 93 levels "Blended Strawberry Lemonade",..: 2 2 2 2 3 3 3 3 4 4 ...
#> $ size : Factor w/ 11 levels "1 scoop","1 shot",..: 6 8 4 11 6 8 4 11 6 8 ...
#> $ milk : Factor w/ 6 levels "2%","coconut",..: 3 3 3 3 3 3 3 3 3 3 ...
#> $ whip : Factor w/ 2 levels "with whip cream",..: 2 2 2 2 2 2 2 2 2 2 ...
#> $ serv_size_m_l : Factor w/ 7 levels "0","236","354",..: 2 3 4 5 2 3 4 5 2 3 ...
#> $ calories : int 3 4 5 5 3 4 5 5 3 4 ...
#> $ total_fat_g : num 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 ...
#> $ saturated_fat_g: num 0 0 0 0 0 0 0 0 0 0 ...
#> $ trans_fat_g : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ cholesterol_mg : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ sodium_mg : int 5 10 10 10 5 10 10 10 5 5 ...
#> $ total_carbs_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ fiber_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ sugar_g : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ caffeine_mg : int 130 193 260 340 15 20 25 30 155 235 ...
#> $ category : Factor w/ 10 levels "Add-Ons","Coffee",..: 2 2 2 2 2 2 2 2 2 2 ...
Pada tahap ini, kita akan melakukan data processing untuk menunjang
tahap visualization. Kita akan menggunakan library dplyr
agar memudahkan saat melakukan aggregasi pada data
sbux_clean.csv.
library(dplyr)Untuk membuat tabel aggregasi kita akan menggunakan fungsi
aggregate() pada kolom category dan caffeine_mg, dimana
untuk kolom caffeine_mg akan dilakukan perhitungan rata-rata
tabel1 <- aggregate(caffeine_mg ~ category, data = sbux_clean, mean)
tabel1Selanjutnya kita akan mengurutkan kadar kafein dari tertinggi ke
terendah menggunakan kombinasi fungsi arrange() dari
library dplyr
tabel1 <- arrange(tabel1, desc(caffeine_mg))
tabel1Jika dilihat pada tabel1 kategori coffee merupakan
kategori dengan rata-rata kandungan kafein tertinggi, sehingga kita akan
melakukan menyiapkan tabel untuk kategori tersebut beserta data
kandungan kafein dan kalori. Dalam pembuatan tabel tersebut kita akan
menggunakan fungsi filter() untuk melakukan filter di
kategori coffee, selanjutnya akan menggunakan fungsi
select() untuk memilih kolom product_name, size, calories,
dan caffeine_mg
tabel2 <- sbux_clean %>%
filter(category == 'Coffee') %>%
select(c(product_name, size, calories, caffeine_mg))
tabel2Untuk membuat visualisasi kita akan menggunakan library
ggplot2
library(ggplot2)Lollipop plot merupakan salah satu plot yang digunakan untuk data dengan 1 kategorik dan 1 numerik, merupakan modifikasi dari barplot.
ggplot(tabel1, aes(x = caffeine_mg, y = reorder(category, caffeine_mg))) +
geom_point(size = 3, color="#69b3a2") +
geom_segment(aes(x = 0, xend = caffeine_mg , yend = category), size = 1, color = "#69b3a2") +
theme_minimal() +
xlab('Average Caffeine (mg)') +
ylab('') +
ggtitle('Average Caffeine by Category') +
theme(plot.title = element_text(hjust = 0.5))
Dapat dilihat dari visualisasi diatas bahwa kategori dengan rata-rata
kadar kafein tertinggi adalah kategori Coffee dengan nilai
193.78 mg.
Selanjutnya dari kategori coffee kita akan membuat scatter plot antara calories dengan caffeine, yang dapat dilihat sebagai berikut:
ggplot(tabel2, aes(x = caffeine_mg, y = calories)) +
geom_point(color = '#00704A') +
geom_vline(xintercept = 400, color = 'red', linetype = 2) +
geom_text(aes(400,100, label = 'Caffeine Maximum Daily Intake', angle = 90, vjust = -1.5)) +
theme_minimal() +
ggtitle('Caffeine vs Calories in Coffee Category') +
xlab('Caffeine (mg)') +
ylab('Calories (kcal)') +
theme(plot.title = element_text(hjust = 0.5))Ternyata pada kategori Coffee memiliki 5 minuman yang melebihi batas maksimum konsumsi kafein dari anjuran U.S FDA. Bisa kita lihat menggunakan conditional subsetting sebagai berikut:
tabel2[tabel2$caffeine_mg > 400,]5 minuman tersebut adalah :