Dosen Pengampu : Prof. Dr. Suhartono, M.Kom

Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang

Jurusan : Teknik Informatika

Pengertian Pivot Data

Pivot pada umumnya adalah laporan berbentuk tabel yang dalam waktu singkat bisa menampilkan ringkasan dari jumlah data besar kedalam bentuk atau orientasi berbeda serta mampu melakukan kalkulasi pada setiap item yang dibutuhkan.

Misalnya, jika kita memiliki data yang didownload dari sebuah sistem atau dibuat sendiri dengan jumlah ratusan, ribuan, atau bahkan ratusan ribu baris data, tentunya akan sulit untuk mengolah serta mendapatkan informasi secara cepat. Informasi yang dimaksud misalnya: Menampilkan data berdasarkan kriteria atau perhitungan tertentu, membandingkan antar field(kolom) satu dengan yang lainnya, menampilkan perulangan data, hubungan perulangan data pada suatu periode dan lain sebagainya.

Berkaitan dengan menampilkan data berdasarkan kriteria tertentu, microsoft Excel sebenarnya sudah menyediakan fasilitas seperti Filter untuk dapat melakukan filtering pada table. Tetapi, pada kasus tertentu fitur ini terkadang belum terlalu efektif untuk menampilkan informasi secara cepat. Sehingga, keterbatasan itu bisa ditanggulangi dengan menggunakan kemampuan Pivot Table. Selain menggunakan microsoft Excel kita juga bisa menggunakan Bahasa pemograman Rstudio (R). Berikut contoh pivot data Uang kartal jambi dari tahun 2011-2021 menggunakan syntax bahasa R.

Tabel inflow Jawa tahun 2011-2021

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
InflowJawa <- read_excel(path = "C:/Users/Putri Oktavia/OneDrive/Dokumen/InflowJawa.xlsx")
InflowJawa
## # A tibble: 6 x 12
##   Keterangan   `2011`  `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##   <chr>         <dbl>   <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 Jawa        123917. 160482. 134998. 217303. 2.30e5 2.62e5 2.78e5 3.07e5 3.25e5
## 2 Jawa Barat   43775.  60629.  35190.  78660. 8.13e4 8.80e4 8.32e4 8.72e4 9.48e4
## 3 Jawa Tengah  35137.  43298.  42182.  60476. 6.52e4 7.28e4 7.70e4 8.78e4 9.08e4
## 4 Yogyakarta    6490.   9173.   8939.  13890. 1.48e4 1.74e4 1.75e4 2.06e4 2.09e4
## 5 Jawa Timur   38515.  47383.  48687.  64276. 6.88e4 8.34e4 9.84e4 1.06e5 1.14e5
## 6 Banten           0       0       0       0  0      0      1.49e3 4.83e3 4.48e3
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.8
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.0.2     v forcats 0.5.1
## Warning: package 'dplyr' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

pivot_longer()

pivot_longer() “lengthens” data, increasing the number of rows and decreasing the number of columns. The inverse transformation is pivot_wider().

dataLength <- InflowJawa %>% 
  pivot_longer(!Keterangan, names_to = "Tahun", values_to = "Kasus")
dataLength 
## # A tibble: 66 x 3
##    Keterangan Tahun   Kasus
##    <chr>      <chr>   <dbl>
##  1 Jawa       2011  123917.
##  2 Jawa       2012  160482.
##  3 Jawa       2013  134998.
##  4 Jawa       2014  217303.
##  5 Jawa       2015  230141.
##  6 Jawa       2016  261607.
##  7 Jawa       2017  277609.
##  8 Jawa       2018  306911.
##  9 Jawa       2019  324624.
## 10 Jawa       2020  259444.
## # ... with 56 more rows

Memilih variable Daerah dan Kasus

library(dplyr)
JawaUp <- select(dataLength, Keterangan, Kasus)
JawaUp
## # A tibble: 66 x 2
##    Keterangan   Kasus
##    <chr>        <dbl>
##  1 Jawa       123917.
##  2 Jawa       160482.
##  3 Jawa       134998.
##  4 Jawa       217303.
##  5 Jawa       230141.
##  6 Jawa       261607.
##  7 Jawa       277609.
##  8 Jawa       306911.
##  9 Jawa       324624.
## 10 Jawa       259444.
## # ... with 56 more rows

Menyeleksi baris atau observasi berdasarkan nilai.

library(dplyr)
JawaUp1 <- dataLength  %>%
    filter(Keterangan > 'Jawa Barat') %>%
    select('Keterangan', 'Tahun', 'Kasus')
JawaUp1 
## # A tibble: 33 x 3
##    Keterangan  Tahun  Kasus
##    <chr>       <chr>  <dbl>
##  1 Jawa Tengah 2011  35137.
##  2 Jawa Tengah 2012  43298.
##  3 Jawa Tengah 2013  42182.
##  4 Jawa Tengah 2014  60476.
##  5 Jawa Tengah 2015  65198.
##  6 Jawa Tengah 2016  72782.
##  7 Jawa Tengah 2017  77031.
##  8 Jawa Tengah 2018  87829.
##  9 Jawa Tengah 2019  90751.
## 10 Jawa Tengah 2020  84970.
## # ... with 23 more rows
JawaUp2 <- dataLength %>%
  filter(Keterangan <= 'Yogyakarta', Tahun <= '2019') %>%
 select('Keterangan', 'Tahun', 'Kasus')
JawaUp2
## # A tibble: 54 x 3
##    Keterangan Tahun   Kasus
##    <chr>      <chr>   <dbl>
##  1 Jawa       2011  123917.
##  2 Jawa       2012  160482.
##  3 Jawa       2013  134998.
##  4 Jawa       2014  217303.
##  5 Jawa       2015  230141.
##  6 Jawa       2016  261607.
##  7 Jawa       2017  277609.
##  8 Jawa       2018  306911.
##  9 Jawa       2019  324624.
## 10 Jawa Barat 2011   43775.
## # ... with 44 more rows

pivot_wider()

pivot_wider() “widens” data, increasing the number of columns and decreasing the number of rows. The inverse transformation is pivot_longer().

JawaID <- dataLength %>% 
  pivot_wider(names_from = "Tahun", 
                     values_from = "Kasus")
JawaID
## # A tibble: 6 x 12
##   Keterangan   `2011`  `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##   <chr>         <dbl>   <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 Jawa        123917. 160482. 134998. 217303. 2.30e5 2.62e5 2.78e5 3.07e5 3.25e5
## 2 Jawa Barat   43775.  60629.  35190.  78660. 8.13e4 8.80e4 8.32e4 8.72e4 9.48e4
## 3 Jawa Tengah  35137.  43298.  42182.  60476. 6.52e4 7.28e4 7.70e4 8.78e4 9.08e4
## 4 Yogyakarta    6490.   9173.   8939.  13890. 1.48e4 1.74e4 1.75e4 2.06e4 2.09e4
## 5 Jawa Timur   38515.  47383.  48687.  64276. 6.88e4 8.34e4 9.84e4 1.06e5 1.14e5
## 6 Banten           0       0       0       0  0      0      1.49e3 4.83e3 4.48e3
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>

Visualisasi Pivot

ggplot(data = dataLength, 
       mapping = aes(x = Keterangan, y = Kasus, color = Keterangan)) +
    geom_jitter(alpha = 0.9)

ggplot(data = dataLength, 
       mapping = aes(x = Keterangan, y = Kasus, color = Keterangan)) +
    geom_jitter(alpha = 0.9)

ggplot(data = dataLength, mapping = aes(x = Tahun, y = Kasus)) +
  geom_point(color = "pink")

ggplot(data = dataLength, 
       mapping = aes(x = Keterangan, y = Kasus)) +
    geom_point(color = "dark green")

ggplot(data = dataLength, mapping = aes(x = Tahun, y = Kasus)) +
  geom_point(color = "dark red") +
  facet_wrap( ~ Keterangan) +
  theme(axis.text.x = element_text(angle = 90))

ggplot(data = dataLength, mapping = aes(x = Keterangan, y = Kasus)) +
  geom_point(color = "dark blue") +
  facet_wrap( ~ Tahun) +
  theme(axis.text.x = element_text(angle = 90))

ggplot(data = dataLength, 
       mapping = aes(x = Keterangan, y = Kasus)) +
          geom_boxplot(alpha = 0) +  # Do not show outliers
          geom_jitter(alpha = 0.7, color = "dark orange") +
          theme_bw()

ggplot(data = dataLength, 
       mapping = aes(x = Keterangan, y = Kasus)) +
          geom_boxplot(alpha = 0) +  # Do not show outliers
          geom_jitter(alpha = 0.7, color = "yellow") +
          theme_bw()