Tugas Praktikum 3.a

Praktikkan penggunaan join untuk menggabungkan 2 tabel atau lebih dari database chinook.db.

library yang digunakan yaitu:

library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.0.5
library(DBI)
## Warning: package 'DBI' was built under R version 4.0.5
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.0.5
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.3     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.7
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.1
## Warning: package 'tibble' was built under R version 4.0.5
## Warning: package 'tidyr' was built under R version 4.0.5
## Warning: package 'dplyr' was built under R version 4.0.5
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

koneksi dengan database dapat dibangun dengan syntax berikut.

chinook <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/db/chinook.db")

list tabel yang terdapat dalam db chinook dapat dilihat dengan syntax berikut

RSQLite::dbListTables(chinook)
##  [1] "albums"          "artists"         "customers"       "employees"      
##  [5] "genres"          "invoice_items"   "invoices"        "media_types"    
##  [9] "playlist_track"  "playlists"       "sqlite_sequence" "sqlite_stat1"   
## [13] "tracks"

membuat objek beberapa tabel, agar dapat dioperasikan menggunakan R, dengan syntax berikut.

albums <- dplyr::tbl(chinook, "albums")
artists <- dplyr::tbl(chinook, "artists")

melihat isi dari objek artist (tabel1) dan albums (tabel2) berikut.

artists
## # Source:   table<artists> [?? x 2]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                
##       <int> <chr>               
##  1        1 AC/DC               
##  2        2 Accept              
##  3        3 Aerosmith           
##  4        4 Alanis Morissette   
##  5        5 Alice In Chains     
##  6        6 Antônio Carlos Jobim
##  7        7 Apocalyptica        
##  8        8 Audioslave          
##  9        9 BackBeat            
## 10       10 Billy Cobham        
## # ... with more rows
albums
## # Source:   table<albums> [?? x 3]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    AlbumId Title                                 ArtistId
##      <int> <chr>                                    <int>
##  1       1 For Those About To Rock We Salute You        1
##  2       2 Balls to the Wall                            2
##  3       3 Restless and Wild                            2
##  4       4 Let There Be Rock                            1
##  5       5 Big Ones                                     3
##  6       6 Jagged Little Pill                           4
##  7       7 Facelift                                     5
##  8       8 Warner 25 Anos                               6
##  9       9 Plays Metallica By Four Cellos               7
## 10      10 Audioslave                                   8
## # ... with more rows

untuk mengkombinasikan/menggabungkan beberapa tabel kita perlu variabel dengan isi yang sama (semacam id) yaitu menggunakan “ArtistID”

- inner_join()

menggabungkan tabel berdasarkan irisan baris yang memiliki nilai yang sama.

inner_join(artists, albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 4]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                 AlbumId Title                                
##       <int> <chr>                  <int> <chr>                                
##  1        1 AC/DC                      1 For Those About To Rock We Salute You
##  2        2 Accept                     2 Balls to the Wall                    
##  3        2 Accept                     3 Restless and Wild                    
##  4        1 AC/DC                      4 Let There Be Rock                    
##  5        3 Aerosmith                  5 Big Ones                             
##  6        4 Alanis Morissette          6 Jagged Little Pill                   
##  7        5 Alice In Chains            7 Facelift                             
##  8        6 Antônio Carlos Jobim       8 Warner 25 Anos                       
##  9        7 Apocalyptica               9 Plays Metallica By Four Cellos       
## 10        8 Audioslave                10 Audioslave                           
## # ... with more rows

dapat dilihat dari tabel hasil inner_join() diatas, tabel berisi semua kolom dari kedua tabel dan semua baris yang beririsan nilainya sehingga tidak memiliki nilai NA.

- left_join()

menggabungkan tabel dengan seluruh baris tabel1 ditampilkan namun baris tabel2 hanya ditampilkan yang beririsan nilai dengan tabel1 saja.

left_join(artists, albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 4]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                 AlbumId Title                                
##       <int> <chr>                  <int> <chr>                                
##  1        1 AC/DC                      1 For Those About To Rock We Salute You
##  2        1 AC/DC                      4 Let There Be Rock                    
##  3        2 Accept                     2 Balls to the Wall                    
##  4        2 Accept                     3 Restless and Wild                    
##  5        3 Aerosmith                  5 Big Ones                             
##  6        4 Alanis Morissette          6 Jagged Little Pill                   
##  7        5 Alice In Chains            7 Facelift                             
##  8        6 Antônio Carlos Jobim       8 Warner 25 Anos                       
##  9        6 Antônio Carlos Jobim      34 Chill: Brazil (Disc 2)               
## 10        7 Apocalyptica               9 Plays Metallica By Four Cellos       
## # ... with more rows

dapat dilihat dari tabel hasil left_join() diatas, tabel berisi semua kolom dari kedua tabel dan semua baris dari tabel1 serta beberapa baris dari tabel2 yang beririsan nilai dengan tabel1, sehingga terdapat nilai NA pada kolom yang berasal dari tabel2.

- right_join()

menggabungkan tabel dengan seluruh baris tabel2 ditampilkan namun baris tabel1 hanya ditampilkan yang beririsan nilai dengan tabel2 saja.

right_join(artists, albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 4]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                 AlbumId Title                                
##       <int> <chr>                  <int> <chr>                                
##  1        1 AC/DC                      1 For Those About To Rock We Salute You
##  2        2 Accept                     2 Balls to the Wall                    
##  3        2 Accept                     3 Restless and Wild                    
##  4        1 AC/DC                      4 Let There Be Rock                    
##  5        3 Aerosmith                  5 Big Ones                             
##  6        4 Alanis Morissette          6 Jagged Little Pill                   
##  7        5 Alice In Chains            7 Facelift                             
##  8        6 Antônio Carlos Jobim       8 Warner 25 Anos                       
##  9        7 Apocalyptica               9 Plays Metallica By Four Cellos       
## 10        8 Audioslave                10 Audioslave                           
## # ... with more rows

dapat dilihat dari tabel hasil right_join() diatas, tabel berisi semua kolom dari kedua tabel dan semua baris dari tabel2 serta beberapa baris dari tabel1 yang beririsan nilai dengan tabel2.

- full_join()

menggabungkan semua baris dan kolom dari tabel1 dan tabel2. Jika ada nilai yang tidak sama maka akan bernilai NA.

full_join(artists, albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 4]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                 AlbumId Title                                
##       <int> <chr>                  <int> <chr>                                
##  1        1 AC/DC                      1 For Those About To Rock We Salute You
##  2        1 AC/DC                      4 Let There Be Rock                    
##  3        2 Accept                     2 Balls to the Wall                    
##  4        2 Accept                     3 Restless and Wild                    
##  5        3 Aerosmith                  5 Big Ones                             
##  6        4 Alanis Morissette          6 Jagged Little Pill                   
##  7        5 Alice In Chains            7 Facelift                             
##  8        6 Antônio Carlos Jobim       8 Warner 25 Anos                       
##  9        6 Antônio Carlos Jobim      34 Chill: Brazil (Disc 2)               
## 10        7 Apocalyptica               9 Plays Metallica By Four Cellos       
## # ... with more rows

dapat dilihat dari tabel hasil full_join() diatas, tabel berisi semua kolom dari kedua tabel dan semua baris dari kedua tabel sehingga memiliki nilai NA.

- semi_join()

menggabungkan semua baris tabel2 yang memiliki kesamaan nilai dengan tabel1, dan semua kolom dari tabel1.

semi_join(artists, albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 2]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                
##       <int> <chr>               
##  1        1 AC/DC               
##  2        2 Accept              
##  3        3 Aerosmith           
##  4        4 Alanis Morissette   
##  5        5 Alice In Chains     
##  6        6 Antônio Carlos Jobim
##  7        7 Apocalyptica        
##  8        8 Audioslave          
##  9        9 BackBeat            
## 10       10 Billy Cobham        
## # ... with more rows

dapat dilihat dari tabel hasil semi_join() diatas, tabel berisi ArtistId dan name yang sudah menerbitkan album dan tercatat pada tabel albums.

- anti_join()

menggabungkan semua baris dari tabel1 yang tidak memiliki kesamaan dengan tabel2, dan semua kolom yang berasal dari tabel1.

anti_join(artists,albums)
## Joining, by = "ArtistId"
## # Source:   lazy query [?? x 2]
## # Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
##    ArtistId Name                      
##       <int> <chr>                     
##  1       25 Milton Nascimento & Bebeto
##  2       26 Azymuth                   
##  3       28 João Gilberto             
##  4       29 Bebel Gilberto            
##  5       30 Jorge Vercilo             
##  6       31 Baby Consuelo             
##  7       32 Ney Matogrosso            
##  8       33 Luiz Melodia              
##  9       34 Nando Reis                
## 10       35 Pedro Luís & A Parede     
## # ... with more rows

dapat dilihat dari tabel hasil anti_join() diatas, tabel berisi ArtistId dan name yang belum menerbitkan album atau albumnya belum tercatat pada tabel albums.

Tugas Praktikum 3.b

Buat satu Peta dari daerah Kota Bogor, menggunakan data kasus aktif COVID-19 di Kota Bogor. library yang digunakan

library(sf)
## Warning: package 'sf' was built under R version 4.0.5
## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(tigris)
## Warning: package 'tigris' was built under R version 4.0.5
## To enable 
## caching of data, set `options(tigris_use_cache = TRUE)` in your R script or .Rprofile.
library(ggplot2)
library(dplyr)

Input Data

input data SHP dengan syntax berikut.

admin <- "C:/Users/fahmi/Downloads/Admin3Kecamatan/idn_admbnda_adm3_bps_20200401.shp"
glimpse(admin)
##  chr "C:/Users/fahmi/Downloads/Admin3Kecamatan/idn_admbnda_adm3_bps_20200401.shp"

ubah file agar dapat terbaca dengan syntax berikut.

admin3 <- st_read(admin)
## Reading layer `idn_admbnda_adm3_bps_20200401' from data source 
##   `C:\Users\fahmi\Downloads\Admin3Kecamatan\idn_admbnda_adm3_bps_20200401.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 7069 features and 16 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
## Geodetic CRS:  WGS 84

lalu lihat kembali struktur data shape filenya

glimpse(admin3)
## Rows: 7,069
## Columns: 17
## $ Shape_Leng <dbl> 0.2798656, 0.7514001, 0.6900061, 0.6483629, 0.2437073, 1.35~
## $ Shape_Area <dbl> 0.003107633, 0.016925540, 0.024636382, 0.010761277, 0.00116~
## $ ADM3_EN    <chr> "2 X 11 Enam Lingkung", "2 X 11 Kayu Tanam", "Abab", "Abang~
## $ ADM3_PCODE <chr> "ID1306050", "ID1306052", "ID1612030", "ID5107050", "ID7471~
## $ ADM3_REF   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM3ALT1EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM3ALT2EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM2_EN    <chr> "Padang Pariaman", "Padang Pariaman", "Penukal Abab Lematan~
## $ ADM2_PCODE <chr> "ID1306", "ID1306", "ID1612", "ID5107", "ID7471", "ID9432",~
## $ ADM1_EN    <chr> "Sumatera Barat", "Sumatera Barat", "Sumatera Selatan", "Ba~
## $ ADM1_PCODE <chr> "ID13", "ID13", "ID16", "ID51", "ID74", "ID94", "ID94", "ID~
## $ ADM0_EN    <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indone~
## $ ADM0_PCODE <chr> "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID",~
## $ date       <date> 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20~
## $ validOn    <date> 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01~
## $ validTo    <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA~
## $ geometry   <MULTIPOLYGON [°]> MULTIPOLYGON (((100.2811 -0..., MULTIPOLYGON (~

input file csv yang berisi data yang ingin ditampilkan

Bogor <- read.csv("C:/Users/fahmi/Downloads/Book3.csv",
                      header=TRUE)

Merge Data

Menggabungkan data pada file SHP dan CSV

merged_bogor <- geo_join(spatial_data=admin3, 
                                  data_frame=Bogor, by_sp="ADM3_PCODE", 
                                  by_df="ADM3_PCODE", how = "inner")
## Warning: We recommend using the dplyr::*_join() family of functions instead.

Atur Warna

Mengatur warna yang akan digunakan untuk membedakan nilai amatan pada peta

mycol <- c("yellow", "orange", "red")

Menampilkan Plot Peta

Membuat Peta Sebaran Kasus Aktif COVID-19 di Kota Bogor dengan menggunakan ggplot sebagai berikut.

pDATA <- ggplot()+
  geom_sf(data=merged_bogor,aes(fill=DATA))+
  scale_fill_gradientn(colours=mycol)+
  labs(title="Sebaran Kasus Aktif COVID-19 di Kota Bogor")
pDATA

Dari peta di atas, terlihat sebaran kasus aktif COVID-19 di Kota Bogor. Wilayah domisili saya di Bogor Timur yang terlihat berwarna orange terang menurut pembagian indikator warna tersebut.