Visualisasi dan Eksplorasi Data PSD Kel 3

Angga Fathan Rofiqy

28 September, 2023

0.0.2 Data Input

install_load('readxl','dplyr','kableExtra','DT')
raw.data <- read_xlsx("managed.xlsx", sheet="Data")
data <- raw.data

datatable(raw.data, filter = 'top', 
          options = list(pageLength = 5))

1 Brand Laptop

1.1 Bar Chart Vertikal

# Membuat bar chart persentase
gg.data <- data %>% count(Brand) %>% # banyaknya laptop brand x
  mutate(perc = round(n / sum(n) * 100)) 
chart <-
ggplot(data = gg.data, #buat persentase
       aes(x = reorder(Brand, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill= ifelse(gg.data$Brand == "HP",  "#1380A1", "#dddddd")) +
  labs(x = "\nBrand", y = "Persentase (%)", 
       title = "Sebaran Brand Laptop",
       subtitle = "Laptop apa yang paling banyak di laptopmedia.com?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) + theme1.1
  
chart 

#Export Chart
ggsave("01.1_Sebaran Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

1.2 Bar Chart Horizontal

chart <-
ggplot(data = gg.data, #buat persentase
       aes(x = reorder(Brand, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill= ifelse(gg.data$Brand == "HP",  "#1380A1", "#dddddd")) +
  labs(x = "\nBrand", y = "Persentase (%)", 
       title = "Sebaran Brand Laptop",
       subtitle = "Laptop apa yang paling banyak di laptopmedia.com?\n") + coord_flip() +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 5)) + theme1.2 
  
chart 

#Export Chart
ggsave("01.2_Sebaran Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 17)

2 Harga

2.1 Sebaran

2.1.1 Variasi

2.1.1.1 Sebaran Harga

install_load('ggtext')
chart <-
ggplot(data, aes(x=`Price (IDR)`/1000, 
                     y='')) +
  #Violin
  geom_violin(scale="count", fill='#fdbe4a', color='black', alpha=0.9, 
                    trim = FALSE) +
  #Boxplot
  geom_boxplot(fill='#0B6260', color='black',
                     outlier.size=2, outlier.color='#0B6260', 
                     notch=T, width=0.2) +
  #Mean Marker
  stat_summary(fun = mean, geom = "point", shape = 16, size = 4, 
               color = "cyan2") +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nHarga (Ribu IDR)", y='',
       title = "Sebaran Harga Brand Laptop",
       subtitle = "Berapa sih harga mayoritas laptop di laptopmedia.com?\n") + theme2 +
  #Tambah Mean Value
  geom_richtext(
    data = data.frame(x = mean(data$`Price (IDR)`) / 1000, y = 1.25, 
                      label = paste("Mean:", 
                                    round(mean(data$`Price (IDR)`) / 1000, 
                                          2))),
    aes(x, y, label = label), size = 7, color = "#0B6260", 
    fill = "white", box.color = "#0B6260", parse = TRUE
  ) +
  #Tambah panah
  geom_segment(aes(x = mean(data$`Price (IDR)`) / 1000, 
                   xend = mean(data$`Price (IDR)`) / 1000, 
                   y = 1, 
                   yend = 1.225), 
               arrow = arrow(type = "closed", length = unit(0.1, "inches")), 
               lineend = "round", color = "cyan2")
chart

#Export Chart
ggsave("02.1_Sebaran Harga Laptop.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

2.1.1.2 Sebaran Harga Per Laptop Brand

install_load('ggridges','viridis')
data$Brand <- factor(data$Brand, 
                  levels= data %>% count(Brand) %>% 
                                        arrange(n, desc(Brand)) %>%
                                        pull(Brand) )
chart <- 
ggplot(data, aes(x=`Price (IDR)`/1000, y=Brand, fill=Brand)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.75, #Opacity
                     begin = 0.5, #Color pallte scale begins
                     end = 0.9, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "B") + #Color Palette
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nHarga (Ribu IDR)",y = "Brand Laptop\n", 
       title = "Sebaran Harga Brand Laptop",
       subtitle = "Tiap brand laptop di laptopmedia.com rentang harganya berapa ya?\n") + 
  theme2 +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1.25,
  label = "<b>Tidak ada sebaran</b> pada merek laptop <b>Toshiba</b>, <b>Chuwi</b>, dan <b>Fusion5</b>\n\n karena jumlah data untuk ketiga merek tersebut sangat terbatas, yaitu <b>kurang dari 3</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.1, size = 7, fill=NA
)

chart

#Export Chart
ggsave("02.2_Sebaran Harga Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3 Storage

3.1 Pie Chart, Proporsi HDD dan SSD

install_load('stringr','ggrepel')
data <- data %>% 
  mutate(`Storage (GB)` = as.numeric(str_extract(Storage, "\\d+")),
         `Storage Type` = str_extract(Storage, "(SSD|HDD)"))  
gg.data <- data %>%
  group_by(`Storage Type`) %>%
  summarize(count = n()) %>%
  arrange(desc(count))

# Buat pie chart
chart <- 
ggplot(gg.data, aes(x = "", y = count, fill = `Storage Type`)) +
  geom_bar(stat = "identity", col=NA) +
  geom_label_repel(aes(label = paste0(`Storage Type`, "\n", 
                                    round(count / sum(count) * 100), 
                                    "% (", count, ")" ) ), 
                  position = position_stack(vjust = 0.5), size = 10,
                  label.padding = unit(1, "lines"), col="white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values =c(SSD = "#3788A1", HDD = "#504E58")) +
  theme_void() +
  labs(title = "\nProporsi Tipe Storage",
       subtitle = "Berapa sih perbandingan banyaknya SSD dan HDD laptop?\n") + theme3
chart 

#Export Chart
ggsave("03.1_Proporsi SSD dan HDD.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 14)

3.2 Bar Chart SSD

3.2.1 Variasi

3.2.1.1 Tidak Urut

# Membuat bar chart persentase
gg.data <- data %>%
        filter(grepl("SSD", `Storage Type`, ignore.case = TRUE)) %>% 
            count(`Storage (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top3 = row_number() <= 3) # Top 3 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, `Storage (GB)`), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top3,  c("#3788A1", "#5494A3", "#65AEB9"),
                         "#dddddd")
           ) + 
  labs(x = "SSD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran SSD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan SSD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart 

#Export Chart
ggsave("03.2_Sebaran SSD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3.2.1.2 Urut

# Membuat bar chart persentase
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top3,  c("#3788A1", "#5494A3", "#65AEB9"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "SSD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran SSD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan SSD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("03.3_Sebaran SSD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3.2.1.3 Horizontal

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top3,  c("#3788A1", "#5494A3", "#65AEB9"),
                         "#dddddd")
           ) +
  labs(x = "SSD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran SSD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan SSD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 4)) +
  theme1.2 + coord_flip()
chart 

#Export Chart
ggsave("03.4_Sebaran SSD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 14)

3.3 Bar Chart HDD

3.3.1 Variasi

3.3.1.1 Tidak Urut

# Membuat bar chart persentase
gg.data <- data %>%
        filter(grepl("HDD", `Storage Type`, ignore.case = TRUE)) %>% 
            count(`Storage (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, `Storage (GB)`), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#3788A1"),
                         "#dddddd")
           ) + 
  labs(x = "HDD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran HDD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan HDD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart 

#Export Chart
ggsave("03.5_Sebaran HDD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3.3.1.2 Urut

# Membuat bar chart persentase
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#3788A1"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "HDD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran HDD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan HDD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("03.6_Sebaran HDD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3.3.1.3 Horizontal

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Storage (GB)`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#3788A1"),
                         "#dddddd")
           ) +
  labs(x = "HDD (GB)", y = "Persentase (%)\n", 
       title = "Sebaran HDD Laptop",
       subtitle = "Mayoritas kapasitas penyimpanan HDD-nya berapa ya?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 9)) +
  theme1.2 + coord_flip()
chart 

#Export Chart
ggsave("03.7_Sebaran HDD Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 14)

3.4 Sebaran

3.4.1 Variasi

3.4.1.1 Sebaran Storage Score

install_load('ggtext')
chart <-
ggplot(data, aes(x=`Storage Score`, 
                     y='')) +
  #Violin
  geom_violin(scale="count", fill='#3788A1', color='black', alpha=0.9, 
                    trim = FALSE) +
  #Boxplot
  geom_boxplot(fill='#504E58', color='black',
                     outlier.size=2, outlier.color='#504E58', 
                     notch=T, width=0.2) +
  #Mean Marker
  stat_summary(fun = mean, geom = "point", shape = 16, size = 4, 
               color = "cyan2") +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nStorage Score", y='',
       title = "Sebaran Storage Score",
       subtitle = "Kebanyakan laptop punya score berapa sih?\n") + theme2 +
  #Tambah Mean Value
  geom_richtext(
    data = data.frame(x = mean(data$`Storage Score`), y = 1.25, 
                      label = paste("Mean:", 
                                    round(mean(data$`Storage Score`) , 
                                          2))),
    aes(x, y, label = label), size = 7, color = "#504E58", 
    fill = "white", box.color = "#504E58", parse = TRUE
  ) +
  #Tambah panah
  geom_segment(aes(x = mean(data$`Storage Score`) , 
                   xend = mean(data$`Storage Score`) , 
                   y = 1, 
                   yend = 1.225), 
               arrow = arrow(type = "closed", length = unit(0.1, "inches")), 
               lineend = "round", color = "cyan2")
chart

#Export Chart
ggsave("03.8_Sebaran Storage Score.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

3.4.1.2 Sebaran Storage Score Per Tipe

data$`Storage Type` <- factor(data$`Storage Type`, 
                  levels= data %>% count(`Storage Type`) %>% 
                                        arrange(n, desc(`Storage Type`)) %>%
                                        pull(`Storage Type`) )
chart <- 
ggplot(data, aes(x=`Storage Score`, y=`Storage Type`, fill=`Storage Type`)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_manual(values =c(SSD = "#3788A1", HDD = "#504E58")) +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nStorage Score",y = "Tipe Storage\n", 
       title = "Sebaran Storage Score Per Tipe Penyimpanan",
       subtitle = "SSD dan HDD punya rentang Score berapa ya?") + theme2 


chart

#Export Chart
ggsave("03.9_Sebaran Storage Score Per Tipe Penyimpanan.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

3.4.1.3 Sebaran Storage Score Per Laptop Brand

data$Brand <- factor(data$Brand, 
                  levels= data %>% count(Brand) %>% 
                                        arrange(n, desc(Brand)) %>%
                                        pull(Brand) )
chart <- 
ggplot(data, aes(x=`Storage Score`, y=Brand, fill=Brand)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.75, #Opacity
                     begin = 0.1, #Color pallte scale begins
                     end = 0.9, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "G") + #Color Palette
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nStorage Score",y = "Brand Laptop\n", 
       title = "Sebaran Storage Score Per Laptop Brand",
       subtitle = "Tiap brand laptop punya rentang storage score berapa ya?\n") + 
  theme2 +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1.25,
  label = "<b>Tidak ada sebaran</b> pada merek laptop <b>Toshiba</b>, <b>Chuwi</b>, dan <b>Fusion5</b>\n\n karena jumlah data untuk ketiga merek tersebut sangat terbatas, yaitu <b>kurang dari 3</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.1, size = 7, fill=NA
)

chart

#Export Chart
ggsave("03.10_Sebaran Storage Score Per Laptop Brand.png", 
       chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

3.5 Scatterplot Storage Score & Harga

chart <-
ggplot(data = data, aes(x = `Storage Score`, y = `Price (IDR)`/1000, color = `Storage Type`)) +
  geom_point(alpha = 0.5, size = 7, col="#3788A1") +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE, size = 0.5) +
  labs(title='Scatterplot Storage Score dengan Harga',
       subtitle = 'Bagaimana ya pola hubungan storage score dengan harga?\n',
    x = "\nStorage Score", y = "Ribu IDR\n", color = "Storage Type") +
  theme3.2 +
  geom_text(aes(x = 30000, 
                y = 100000, 
                label = paste("R =", round(cor(data$`Storage Score`, 
                                               data$`Price (IDR)`), 2))),
            color = "black", size = 20)
chart

#Export Chart
ggsave("03.11_Scatterplot Storage Score dengan Harga.png", 
       chart, path = export.chart,
        dpi = 300, height = 20, width = 20)

4 Display

Pisahkan data.

install_load('tidyr')
data <- data %>%
  separate(Display, into = c("Screen Size (Inch)", "Resolution", 
                             "Screen Type","Refresh Rate (Hz)" ), 
           sep = ", ", remove = FALSE) %>%
  mutate(
    # Menghapus karakter " dan mengubah menjadi numerik
    `Screen Size (Inch)` = as.numeric(gsub("[^0-9.]", "", `Screen Size (Inch)`)), 
    #Tukar Kolom jika ada hz
    temp = `Refresh Rate (Hz)`,
    #Ubah hz jadi numerik
    `Refresh Rate (Hz)` = ifelse(grepl("Hz", `Screen Type`), 
                                 as.numeric(gsub("[^0-9.]", "", `Screen Type`)), 
                      #Jika tidak ada, beri nilai minimal hz laptop yakni 60 hz
                                 60), 
    `Screen Type` = ifelse(grepl("Hz", `Screen Type`), temp, `Screen Type`)
  ) %>% select(-temp) %>% 
  mutate(`Screen Type` = ifelse(is.na(`Screen Type`), "LCD", `Screen Type`))

4.1 Bar Chart Screen Size

4.1.1 Variasi

4.1.1.1 Tidak Urut

# Membuat bar chart persentase
gg.data <- data %>%
            count(`Screen Size (Inch)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Screen Size (Inch)`, `Screen Size (Inch)`), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nScreen Size", y = "Persentase (%)\n", 
       title = "Sebaran Screen Size Laptop",
       subtitle = 'Berapa ya ukuran laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("04.1_Sebaran Screen Size Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.1.1.2 Urut

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Screen Size (Inch)`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nScreen Size", y = "Persentase (%)\n", 
       title = "Sebaran Screen Size Laptop",
       subtitle = 'Berapa ya ukuran laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1 
chart

#Export Chart
ggsave("04.2_Sebaran Screen Size Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.2 Bar Chart Resolution

data <- data %>% 
  mutate( # Mencari semua kemungkinan pasangan angka dalam kolom "Resolution"
    Resolution_Num = str_extract_all(Resolution, "\\d{2,}"),
    # Mengambil pasangan angka yang memiliki dua angka di dalamnya
    Resolution_Num = sapply(Resolution_Num, 
                            function(x) if (length(x) == 2) paste(x, collapse = "x") else NA)
  ) %>% # Pisahkan "Width" dan "Height" dari "Resolution_Num"
  separate(Resolution_Num, into = c("Width", "Height"), sep = "x", 
           convert = TRUE, remove = FALSE) %>% 
# Berikan bobot jika ada kata PixelSense dalam kolom resolusi
  mutate(
    Resolution = ifelse(grepl("PixelSense", Resolution), 
                              Width * Height * 1.125, 
                              Width * Height)
  ) %>% select(-Resolution_Num, -Width, -Height) 
# Membuat bar chart persentase
gg.data <- data %>%
            count(Resolution) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(Resolution, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nResolution", y = "Persentase (%)\n", 
       title = "Sebaran Resolution Laptop",
       subtitle = 'Berapa ya hasil kali resolusi laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("04.3_Sebaran Resolution Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.3 Bar Chart Screen Type

4.3.1 Variasi

4.3.1.1 Vertikal

# Membuat bar chart persentase
gg.data <- data %>%
            count(`Screen Type`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Screen Type`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nScreen Type", y = "Persentase (%)\n", 
       title = "Sebaran Screen Type Laptop",
       subtitle = 'Apa tipe layar laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("04.4_Sebaran Screen Type Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.3.1.2 Horizontal

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Screen Type`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  labs(x = "Screen Type", y = "Persentase (%)", 
       title = "Sebaran Screen Type Laptop",
       subtitle = 'Apa tipe layar laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 10)) +
  theme1.2 + coord_flip()
chart 

#Export Chart
ggsave("04.5_Sebaran Screen Type Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 14)

4.4 Bar Chart Refresh Rate

4.4.1 Variasi

4.4.1.1 Tidak Urut

# Membuat bar chart persentase
gg.data <- data %>%
            count(`Refresh Rate (Hz)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Refresh Rate (Hz)`, `Refresh Rate (Hz)`), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nRefresh Rate (Hz)", y = "Persentase (%)\n", 
       title = "Sebaran Refresh Rate Laptop",
       subtitle = 'Berapa Hz ya refresh rate laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("04.6_Sebaran Refresh Rate (Hz) Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.4.1.2 Urut

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Refresh Rate (Hz)`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nRefresh Rate (Hz)", y = "Persentase (%)\n", 
       title = "Sebaran Refresh Rate Laptop",
       subtitle = 'Berapa Hz ya refresh rate laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("04.7_Sebaran Refresh Rate (Hz) Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.4.1.3 Horizontal

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Refresh Rate (Hz)`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#6F3E98"),
                         "#dddddd")
           ) +
  labs(x = "\nRefresh Rate (Hz)", y = "Persentase (%)\n", 
       title = "Sebaran Refresh Rate Laptop",
       subtitle = 'Berapa Hz ya refresh rate laptop yang paling banyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 9)) +
  theme1.2 + coord_flip()
chart 

#Export Chart
ggsave("04.8_Sebaran Refresh Rate (Hz) Laptop_Horizontal.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 14)

4.5 Sebaran

4.5.1 Variasi

4.5.1.1 Sebaran Display Score

chart <-
ggplot(data, aes(x=`Display Score`, 
                     y='')) +
  #Violin
  geom_violin(scale="count", fill='#6F3E98', color='black', alpha=0.9, 
                    trim = FALSE) +
  #Boxplot
  geom_boxplot(fill='#65AEB9', color='black',
                     outlier.size=2, outlier.color='#65AEB9', 
                     notch=T, width=0.1) +
  #Mean Marker
  stat_summary(fun = mean, geom = "point", shape = 16, size = 4, 
               color = "cyan2") +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nDisplay Score", y='',
       title = "Sebaran Display Score Laptop",
       subtitle = 'Kebanyakan laptop punya display score berapa ya?\n') + theme2 +
  #Tambah Mean Value
  geom_richtext(
    data = data.frame(x = mean(data$`Display Score`) , y = 1.25, 
                      label = paste("Mean:", 
                                    round(mean(data$`Display Score`) , 
                                          2))),
    aes(x, y, label = label), size = 7, color = "#65AEB9", 
    fill = "white", box.color = "#65AEB9", parse = TRUE
  ) +
  #Tambah panah
  geom_segment(aes(x = mean(data$`Display Score`) , 
                   xend = mean(data$`Display Score`) , 
                   y = 1, 
                   yend = 1.225), 
               arrow = arrow(type = "closed", length = unit(0.1, "inches")), 
               lineend = "round", color = "cyan2")
chart

#Export Chart
ggsave("04.9_Sebaran Display Score Laptop.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

4.5.1.2 Sebaran Display Score Per Laptop Brand

data$Brand <- factor(data$Brand, 
                  levels= data %>% count(Brand) %>% 
                                        arrange(n, desc(Brand)) %>%
                                        pull(Brand) )
chart <- 
ggplot(data, aes(x=`Display Score`, y=Brand, fill=Brand)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.75, #Opacity
                     begin = 0.1, #Color pallte scale begins
                     end = 0.5, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "A") + #Color Palette
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nHarga (Ribu IDR)",y = "Brand Laptop\n", 
       title = "Sebaran Harga Brand Laptop",
       subtitle = "Tiap brand laptop punya rentang display score berapa ya?\n") + theme2 +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1.25,
  label = "<b>Tidak ada sebaran</b> pada merek laptop <b>Toshiba</b>, <b>Chuwi</b>, dan <b>Fusion5</b>\n\n karena jumlah data untuk ketiga merek tersebut sangat terbatas, yaitu <b>kurang dari 3</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.1, size = 7, fill=NA
)

chart

#Export Chart
ggsave("04.10_Sebaran Display Score Laptop.png", 
       chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

4.6 Scatterplot Display Score & Harga

chart <-
ggplot(data = data, aes(x = `Display Score`, y = `Price (IDR)`/1000)) +
  geom_point(alpha = 0.5, size = 7, col="#6F3E98") +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE, size = 0.5) +
  labs(title='Scatterplot Display Score dengan Harga',
       subtitle = 'Bagaimana ya pola hubungan display score dengan harga?\n',
    x = "\nDisplay Score", y = "Ribu IDR\n", color = "Storage Type") +
  theme3.2 +
  geom_text(aes(x = 150, 
                y = 100000, 
                label = paste("R =", round(cor(data$`Display Score`, 
                                               data$`Price (IDR)`), 2))),
            color = "black", size = 20)
chart

#Export Chart
ggsave("04.11_Scatterplot Display Score dengan Harga.png", 
       chart, path = export.chart,
        dpi = 300, height = 20, width = 20)

5 RAM

5.1 Bar Chart RAM

5.1.1 Variasi

5.1.1.1 Tidak Urut

# Membuat bar chart persentase
gg.data <- data %>%
            count(`Ram (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Ram (GB)`, `Ram (GB)`), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#008881"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nRAM (GB)", y = "Persentase (%)\n", 
       title = "Sebaran RAM Laptop",
       subtitle = 'RAM laptop terbanyak punya kapasitas berapa ya?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("05.1_Sebaran RAM (GB) Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

5.1.1.2 Urut

# Membuat bar chart persentase
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Ram (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#008881"),
                         "#dddddd")
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nRAM (GB)", y = "Persentase (%)\n", 
       title = "Sebaran RAM Laptop",
       subtitle = 'RAM laptop terbanyak punya kapasitas berapa ya?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("05.2_Sebaran RAM (GB) Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

5.1.1.3 Horizontal

chart <-
ggplot(data = gg.data,
       aes(x = reorder(`Ram (GB)`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$top1,  c("#008881"),
                         "#dddddd")
           ) +
  labs(x = "\nRAM (GB)", y = "Persentase (%)\n", 
       title = "Sebaran RAM Laptop",
       subtitle = 'RAM laptop terbanyak punya kapasitas berapa ya?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 9)) +
  theme1.2 + coord_flip()
chart 

#Export Chart
ggsave("05.3_Sebaran RAM (GB) Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 14)

5.2 Scatterplot RAM & Price

chart <-
ggplot(data = data, aes(x = `Ram (GB)`, y = `Price (IDR)`/1000)) +
  geom_point(alpha = 0.5, size = 7, col="#008881") +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE, size = 0.5) +
  labs(title='Scatterplot RAM dengan Harga',
       subtitle = 'Bagaimana ya pola hubungan RAM dengan harga?\n',
    x = "\nRAM (GB)", y = "Ribu IDR\n", color = "Storage Type") +
  theme3.2 +
  geom_text(aes(x = 100, 
                y = 100000, 
                label = paste("R =", round(cor(data$`Ram (GB)`, 
                                               data$`Price (IDR)`), 2))),
            color = "black", size = 20)
chart

#Export Chart
ggsave("05.4_Scatterplot RAM (GB) dengan Harga.png", 
       chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

6 CPU

6.1 Bar Chart CPU Brand

6.1.1 Variasi

6.1.1.1 Vertikal

# Membuat bar chart persentase
gg.data <- data %>%
            count(`CPU Brand`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n))   # Urutkan
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`CPU Brand`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$`CPU Brand` == 'Intel',  "#1D4B83",
                         ifelse(gg.data$`CPU Brand` == 'AMD',  "#E06C26",
                         "#dddddd"))) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nCPU Brand", y = "Persentase (%)\n", 
       title = "Sebaran CPU Brand Laptop",
       subtitle = 'Apa sih CPU brand terbanyak?\n') +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("06.1_Sebaran CPU Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

6.1.1.2 Hozizontal

chart <-
ggplot(data = gg.data, #buat persentase
       aes(x = reorder(`CPU Brand`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill= ifelse(gg.data$`CPU Brand` == 'Intel',  "#1D4B83",
                         ifelse(gg.data$`CPU Brand` == 'AMD',  "#E06C26",
                         "#dddddd"))) +
  labs(x = "\nCPU Brand", y = "Persentase (%)\n", 
       title = "Sebaran CPU Brand Laptop",
       subtitle = 'Apa sih CPU brand terbanyak?\n') + coord_flip() +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 10)) + theme1.2 
chart 

#Export Chart
ggsave("06.2_Sebaran CPU Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 17)

6.2 Sebaran

6.2.1 Variasi

6.2.1.1 Sebaran CPU Score

chart <-
ggplot(data, aes(x=`CPU Score`, 
                     y='')) +
  #Violin
  geom_violin(scale="count", fill='#E06C26', color='black', alpha=0.9, 
                    trim = FALSE) +
  #Boxplot
  geom_boxplot(fill='#1D4B83', color='black',
                     outlier.size=2, outlier.color='#1D4B83', 
                     notch=T, width=0.2) +
  #Mean Marker
  stat_summary(fun = mean, geom = "point", shape = 16, size = 4, 
               color = "cyan2") +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nCPU Score", y='',
       title = "Sebaran CPU Score Laptop",
       subtitle = 'Kebanyakan laptop punya CPU score berapa ya?\n') + theme2 +
  #Tambah Mean Value
  geom_richtext(
    data = data.frame(x = mean(data$`CPU Score`) , y = 1.25, 
                      label = paste("Mean:", 
                                    round(mean(data$`CPU Score`) , 
                                          2))),
    aes(x, y, label = label), size = 7, color = "#1D4B83", 
    fill = "white", box.color = "#1D4B83", parse = TRUE
  ) +
  #Tambah panah
  geom_segment(aes(x = mean(data$`CPU Score`) , 
                   xend = mean(data$`CPU Score`) , 
                   y = 1, 
                   yend = 1.225), 
               arrow = arrow(type = "closed", length = unit(0.1, "inches")), 
               lineend = "round", color = "cyan2")
chart

#Export Chart
ggsave("06.3_Sebaran CPU Score Laptop.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

6.2.1.2 Sebaran CPU Score Per CPU Brand

data$`CPU Brand` <- factor(data$`CPU Brand`, 
                  levels= data %>% count(`CPU Brand`) %>% 
                                        arrange(n, desc(`CPU Brand`)) %>%
                                        pull(`CPU Brand`) )
chart <- 
ggplot(data, aes(x=`CPU Score`, y=`CPU Brand`, fill=`CPU Brand`)) + 
  geom_density_ridges(alpha=0.85) +
  #COLORING
  scale_fill_manual(values =c(Intel = "#1D4B83", AMD = "#d65c2d",
                              Apple = "#777D91",  Mediatek = '#F7B747')) +
  labs(x = "\nCPU Score",y = "CPU Brand\n", 
       title = "Sebaran CPU Score Per CPU Brand",
       subtitle = "Tiap brand CPU punya rentang CPU score berapa ya?\n") + 
  theme2 + theme(legend.position = "none") +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1,
  label = "<b>Tidak ada sebaran</b> pada merek <b>Qualcomm</b> \n\n karena hanya memiliki <b> satu data</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.15, size = 7, fill=NA
)


chart

#Export Chart
ggsave("06.4_Sebaran CPU Score Per CPU Brand.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

6.2.1.3 Sebaran CPU Score Per Laptop Brand

data$Brand <- factor(data$Brand, 
                  levels= data %>% count(Brand) %>% 
                                        arrange(n, desc(Brand)) %>%
                                        pull(Brand) )
chart <- 
ggplot(data, aes(x=`CPU Score`, y=Brand, fill=Brand)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.85, #Opacity
                     begin = 0.5, #Color pallte scale begins
                     end = 0.8, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "B") + #Color Palette
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nCPU Score",y = "Brand Laptop\n", 
       title = "Sebaran CPU Score per Brand Laptop",
       subtitle = "Tiap brand laptop punya rentang CPU score berapa ya?\n") + theme2 +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1.25,
  label = "<b>Tidak ada sebaran</b> pada merek laptop <b>Toshiba</b>, <b>Chuwi</b>, dan <b>Fusion5</b>\n\n karena jumlah data untuk ketiga merek tersebut sangat terbatas, yaitu <b>kurang dari 3</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.1, size = 7, fill=NA
)

chart

#Export Chart
ggsave("06.5_Sebaran CPU Score per Brand Laptop.png", 
       chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

6.3 Scatterplot CPU & Harga

chart <-
ggplot(data = data, aes(x = `CPU Score`, y = `Price (IDR)`/1000)) +
  geom_point(alpha = 0.5, size = 7, col="#d65c2d") +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE, size = 0.5) +
  labs(title='Scatterplot CPU Score dengan Harga',
       subtitle = 'Bagaimana ya pola hubungan CPU score dengan harga?\n',
    x = "\nCPU Score", y = "Ribu IDR\n", color = "Storage Type") +
  theme3.2 +
  geom_text(aes(x = 100, 
                y = 100000, 
                label = paste("R =", round(cor(data$`CPU Score`, 
                                               data$`Price (IDR)`), 2))),
            color = "black", size = 20)
chart

#Export Chart
ggsave("06.6_Scatterplot CPU Score dengan Price.png", 
       chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

7 GPU

7.1 Bar Chart GPU Brand

7.1.1 Variasi

7.1.1.1 Vertikal

# Membuat bar chart persentase
gg.data <- data %>%
            count(`GPU Brand`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)) %>% #buat persentase, 
                  arrange(desc(n)) %>%   # Urutkan
                  mutate(top1 = row_number() <= 1) # Top 1 n terbanyak
chart <-
ggplot(data = gg.data,
       aes(x = reorder(`GPU Brand`, -n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$`GPU Brand` == 'Intel',  "#1D4B83",
                         ifelse(gg.data$`GPU Brand` == 'NVIDIA',  "#84C441",
                           ifelse(gg.data$`GPU Brand` == 'AMD',  "#DA1F27",
                           "#dddddd")
                            )
                         )
           ) +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 8, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "\nGPU Brand", y = "Persentase (%)\n", 
       title = "Sebaran GPU Brand Laptop",
       subtitle = "Brand GPU apa sih yang paling banyak?\n") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme1.1
chart

#Export Chart
ggsave("07.1_Sebaran GPU Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

7.1.1.2 Horizontal

chart <-
ggplot(data = gg.data, #buat persentase
       aes(x = reorder(`GPU Brand`, n), y = perc)) +
  geom_bar(stat = "identity", col=NA,
           fill = ifelse(gg.data$`GPU Brand` == 'Intel',  "#1D4B83",
                         ifelse(gg.data$`GPU Brand` == 'NVIDIA',  "#84C441",
                           ifelse(gg.data$`GPU Brand` == 'AMD',  "#DA1F27",
                           "#dddddd")
                            )
                         )
           ) +
  labs(x = "\nGPU Brand", y = "Persentase (%)\n", 
       title = "Sebaran GPU Brand Laptop",
       subtitle = "Brand GPU apa sih yang paling banyak?\n") + coord_flip() +
  scale_y_continuous(labels = scales::percent_format(scale = 1),
                     expand = c(0, 10)) + theme1.2 
chart 

#Export Chart
ggsave("07.2_Sebaran GPU Brand Laptop.png", chart, path = export.chart,
        dpi = 300, height = 20, width = 17)

7.2 Sebaran

7.2.1 Variasi

7.2.1.1 Sebaran GPU Score

chart <-
ggplot(data, aes(x=`GPU Score`, 
                     y='')) +
  #Violin
  geom_violin(scale="count", fill='#84C441', color='black', alpha=0.9, 
                    trim = FALSE) +
  #Boxplot
  geom_boxplot(fill='#2C68AF', color='black',
                     outlier.size=2, outlier.color='#2C68AF', 
                     notch=T, width=0.1, alpha=0.5) +
  #Mean Marker
  stat_summary(fun = mean, geom = "point", shape = 16, size = 4, 
               color = "cyan2") +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nGPU Score", y='',
       title = "Sebaran GPU Score Laptop",
       subtitle = 'Kebanyakan laptop punya GPU score berapa ya?\n') + theme2 +
  #Tambah Mean Value
  geom_richtext(
    data = data.frame(x = mean(data$`GPU Score`) , y = 1.25, 
                      label = paste("Mean:", 
                                    round(mean(data$`GPU Score`) , 
                                          2))),
    aes(x, y, label = label), size = 7, color = "#2C68AF", 
    fill = "white", box.color = "#2C68AF", parse = TRUE
  ) +
  #Tambah panah
  geom_segment(aes(x = mean(data$`GPU Score`) , 
                   xend = mean(data$`GPU Score`) , 
                   y = 1, 
                   yend = 1.225), 
               arrow = arrow(type = "closed", length = unit(0.1, "inches")), 
               lineend = "round", color = "cyan2")
chart

#Export Chart
ggsave("07.3_Sebaran GPU Score Laptop.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

7.2.1.2 Sebaran GPU Score per GPU Brand

data$`GPU Brand` <- factor(data$`GPU Brand`, 
                  levels= data %>% count(`GPU Brand`) %>% 
                                        arrange(n, desc(`GPU Brand`)) %>%
                                        pull(`GPU Brand`) )
chart <- 
ggplot(data, aes(x=`GPU Score`, y=`GPU Brand`, fill=`GPU Brand`)) + 
  geom_density_ridges(alpha=0.75) +
  #COLORING
  scale_fill_manual(values =c(Intel = "#1D4B83", AMD = "#DA1F27",
                              NVIDIA = "#84C441",  Apple = '#777D91',
                              ARM = '#35A8CA', Imagination='#71256B')) +
  labs(x = "\nGPU Score",y = "GPU Brand\n", 
       title = "Sebaran GPU Score Per GPU Brand",
       subtitle = "Tiap brand GPU punya rentang CPU score berapa ya?\n") + 
  theme2 + theme(legend.position = "none") +
  annotate(
  geom = "richtext",
  x = -Inf, y = 0.7,
  label = "<b>Tidak ada sebaran</b> pada merek <b>Qualcomm</b> \n\n karena hanya memiliki <b> satu data</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.15, size = 7, fill=NA
)


chart

#Export Chart
ggsave("07.4_Sebaran GPU Score Per GPU Brand.png", chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

7.2.1.3 Sebaran GPU Score per Laptop Brand

data$Brand <- factor(data$Brand, 
                  levels= data %>% count(Brand) %>% 
                                        arrange(n, desc(Brand)) %>%
                                        pull(Brand) )
chart <- 
ggplot(data, aes(x=`GPU Score`, y=Brand, fill=Brand)) + 
  geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.75, #Opacity
                     begin = 0.4, #Color pallte scale begins
                     end = 0.8, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "D") + #Color Palette
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nGPU Score",y = "Brand Laptop\n", 
       title = "Sebaran GPU Score per Brand Lapto",
       subtitle = "Tiap brand laptop punya rentang GPU score berapa ya?\n") + theme2 +
  annotate(
  geom = "richtext",
  x = -Inf, y = 1.25,
  label = "<b>Tidak ada sebaran</b> pada merek laptop <b>Toshiba</b>, <b>Chuwi</b>, dan <b>Fusion5</b>\n\n karena jumlah data untuk ketiga merek tersebut sangat terbatas, yaitu <b>kurang dari 3</b>.",
  vjust = 0, label.padding = unit(0.2, "lines"),
  parse = TRUE,
  hjust = -0.1, size = 7
)

chart

#Export Chart
ggsave("07.5_Sebaran GPU Score per Brand Laptop.png", 
       chart, path = export.chart,
        dpi = 300, height = 14, width = 20)

7.3 Scatterplot GPU & Price

chart <-
ggplot(data = data, aes(x = `GPU Score`, y = `Price (IDR)`/1000)) +
  geom_point(alpha = 0.5, size = 7, col="#84C441") +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE, size = 0.5) +
  labs(title='Scatterplot GPU Score dengan Price',
       subtitle = 'Bagaimana ya pola hubungan GPU score dengan harga?\n',
    x = "\nGPU Score", y = "Ribu IDR\n", color = "Storage Type") +
  theme3.2 +
  geom_text(aes(x = 30, 
                y = 100000, 
                label = paste("R =", round(cor(data$`GPU Score`, 
                                               data$`Price (IDR)`), 2))),
            color = "black", size = 20)
chart

#Export Chart
ggsave("07.6_Scatterplot GPU Score dengan Price.png", 
       chart, path = export.chart,
        dpi = 300, height = 10, width = 20)

8 Referensi