1 VISUALISASI BESARAN DATA

Pada pertemuan kedua ini, akan diilustrasikan visualisasi data menggunakan ggplot2. Sebagai ilustrasi, akan digunakan data mtcars yang tersedia pada package dplyr. Paket yang perlu diinstal: install.packages(“dplyr”) install.packages(“ggplot2”)

## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.0     ✓ dplyr   1.0.6
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Untuk melihat deskripsi dari data tersebut, dapat digunakan fungsi help().

help(mtcars)

Deskripsi Mtcars Dataset

Penjelasan untuk masing-masing peubah yang ada pada dataset mtcars (Motor Trend Car Road Tests adalah sebagai berikut: Data diambil dari majalah Motor Trend US 1974, dan terdiri dari konsumsi bahan bakar dan 10 aspek desain dan kinerja mobil untuk 32 mobil (model 1973-1974). Data terdiri dari 32 observasi dan 11 variabel.

  • mpg : Miles/gallon
  • cyl : Ukuran silinder
  • disp : Perpindahan/Jarak tempuh
  • hp : Tenaga motor
  • drat : Rear exle ratio (rasio gandar belakang drat)
  • wt : Berat (lbs)
  • qsec : 1/4 mil
  • vs : Mesin (0=Berbetuk-V, 1=Lurus)
  • am : Transmisi (0=otomatis, 1=manual)
  • gear : Jumlah gigi
  • carb : Jumlah karburator

1.1 Barplot

Andaikan kita ingin mengetahui banyaknya masing-masing jumlah gigi, maka kita dapat menampilkannya menggunakan barplot berikut:

ggplot(data = mtcars) +
       geom_bar(mapping=aes(x=carb))

Pada umumnya, barplot ditampilkan secara terurut dari frekuensi yang paling besar. Sehingga kita dapat mengurutkan kelas berdasarkan frekuensi dnegan menggunakan Sebagai tambahan, kita dapat pula memberikan warna pada plot dengan menambahkan argumen fill, serta warna border setiap bar dengan argumen color, seperti contoh berikut ini.

mtcars$carb=as.factor(mtcars$carb)
mtcars %>%
    count(carb) %>%
    mutate(carb = fct_reorder(carb, n, .desc = TRUE)) %>%
    ggplot(aes(x = carb, y = n, fill=carb)) + geom_bar(stat = 'identity')

Untuk melihat hubungan antar peubah, dapat dilakukan dengan menggunakan barchart sebagai berikut:

library(ggplot2)
ggplot(mtcars, aes(am, fill =carb )) + geom_bar()+
labs(title = "Plot Hubungan Peubah Karburator dan Transmisi", borders())

Barplot digunakan untuk menyajikan data kategorik. Untuk data numerik, terdapat cukup banyak jenis visualisasi yang dapat digunakan untuk menampilkan nilai data, di antaranya adalah dotplot, histogram, density plot, dsb.

ggplot(mtcars, aes(x = carb)) +
  geom_dotplot(dotsize=0.4) +
  scale_y_continuous(NULL, breaks = NULL) +
  labs(x="Highway Miles per Gallon")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.

1.2 Violin Plot

# install.packages("vioplot")
library("vioplot")
## Loading required package: sm
## Package 'sm', version 2.2-5.7: type help(sm) for summary information
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
mpg1 <- mtcars$mpg
vioplot(mpg1)

vioplot(mpg1,
        col = 4,               # Color of the area
        rectCol = "tomato4",       # Color of the rectangle
        lineCol = "white",     # Color of the line
        colMed = "green",      # Pch symbol color
        border = "black",      # Color of the border of the violin
        pchMed = 16,           # Pch symbol for the median
        plotCentre = "points") # If "line", plots a median line

ggplot(mtcars, aes(x=carb, y=wt))+
  geom_violin()

Menambahkan argumen judul, sub judul, dan caption pada violine plot:

g <- ggplot(mtcars, aes(carb, wt))
g + geom_violin() + 
  labs(title="Violin plot", 
       subtitle="Karburator vs Bentuk Mesin",
       caption="Source: mtcars",
       x="Kelas Karburator",
       y="Bentuk Mesin")

Menambahkan warna pada violin plot:

ggplot(mtcars, aes(x=carb, y=wt))+
  geom_violin(fill="tomato3")

ggplot(mtcars, aes(x=carb, y=wt, fill=carb))+
  geom_violin()

Pada violin plot, kita dapat memilih untuk tidak melakukan pemangkasan data dengan menambahkan argumen trim=FALSE

ggplot(mtcars, aes(x=carb, y=wt, fill=carb))+
  geom_violin(trim=FALSE)

Menambahkan mean dan median pada violin plot dapat dilakukan sebagai berikut:

# Adding Mean & Median 

ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) + 
  geom_violin() + scale_y_log10() +
  stat_summary(fun.y = "mean", geom = "point", shape = 8, size = 3, color = "midnightblue") +
  stat_summary(fun.y = "median", geom = "point", shape = 2, size = 3, color = "red")
## Warning: `fun.y` is deprecated. Use `fun` instead.

## Warning: `fun.y` is deprecated. Use `fun` instead.
## Warning: Groups with fewer than two data points have been dropped.

## Warning: Groups with fewer than two data points have been dropped.

Menambahkan boxplot pada violin plot:

library(ggplot2)

ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
  geom_violin() +
  geom_boxplot(width = 0.1)

Pada violin plot kita juga dapat mengubah posisi legend dari sebelah kanan ke atas. Sementara untuk menghilangkan legend juga dapat dilakukan dengan menggunakan argumen legend.position = “none”

ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
  geom_violin() +
  geom_boxplot(width = 0.2) +
  theme(legend.position = "top")

Mengubah posisi violin plot menjadi horisontal:

library(ggplot2)

ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
  geom_violin() + 
  geom_boxplot(width = 0.2) +
  coord_flip()
## Warning: Groups with fewer than two data points have been dropped.

## Warning: Groups with fewer than two data points have been dropped.

1.3 Stacked Bar Chart

Pada kasus tertentu, kita perlu menyajikan grafik dari beberapa peubah untuk menyampaikan informasi tentang komposisi tertentu. Beberapa pendekatan dapat digunakan, di antaranya adalah stacked bar plot, stacked hitogram, pyramid, dsb.

Misalnya, kita ingin menampilkan jenis-jenis karburator pada berbagai jenis mesin. Pertama, kita dapat menggunakan stacked bar chart seperti pada contoh berikut ini.

## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.

Cara lain yang dapat digunakan untuk menampilkan stacked bar adalah menggunakan segmented bar.

library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
# create a summary dataset (data manipulation)
plotdata <- mtcars %>%
  group_by(carb, vs) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
## `summarise()` has grouped output by 'carb'. You can override using the `.groups` argument.
# create segmented bar chart
# adding labels to each segmen
ggplot(plotdata, 
       aes(x = factor(carb),
           y = pct,
        fill = factor(vs))) +
  geom_bar(stat = "identity",
           position = "fill") +
  scale_y_continuous(breaks = seq(0, 1, .2), 
                     label = percent)+
  geom_text(aes(label = lbl),
            size = 3,
            position = position_stack(vjust = 0.5)) +
  scale_fill_brewer(palette = "Set2") +
  scale_fill_discrete(name = "Karburator", labels = c("1", "2", "3","4","6","8")) +
  theme_minimal() +                                  # use a minimal theme
  labs(y = "Percent",
       fill = "Karburator",
       x = "Karburator",
       title = "Jenis Karburator pada Mesin") +
  theme_minimal()
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.

ggplot(data=mtcars, aes(x=wt, group=carb, fill=carb)) +
    geom_density(adjust=0.5, position="fill", adjust=1.5, alpha=.2) 

1.4 Lollipop Chart

mtcars %>%
  ggplot(aes(x=mpg,y=hp)) +
  geom_point(size = 3, colour = "black") + 
  geom_segment( aes(x=mpg, xend=mpg, y=0, yend=hp))+
  labs(y= "Tenaga Motor", x="Mile/Gallon")

#DataViz : Plot the lollipop chart
ggplot(mtcars, aes(x=mpg,y=hp)) +
    geom_point(size = 6, colour = "red") +
    geom_segment(aes(x=mpg, xend=mpg, y=0, yend=hp))+
    geom_label(aes(mpg, hp+1, label = signif(hp,3)),
colour = "blue", nudge_x = 0.3, size = 2)+
    labs(title="Perbandingan Jumlah Gallon/mil dan Tenaga Motor", y= "Tenaga Motor", x="Mile/Gallon") +
    theme(axis.text.x = element_text(angle=60, vjust=0.6, color="black"))