Tugas 3.a

Connection to a database

database yang digunakan adalah database chinook.db.

Chinook <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/db/chinook.db")
class(Chinook)
[1] "SQLiteConnection"
attr(,"package")
[1] "RSQLite"

digunakan fungsi dbListTables untuk melihat tabel yang ada didalam database.

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"         

sehingga diketahui terdapat 13 tabel pada database chinook. Akan diakses salah satu tabel dalam database

tracks <- dplyr::tbl(Chinook, "tracks")
class(tracks)
[1] "tbl_SQLiteConnection" "tbl_dbi"              "tbl_sql"             
[4] "tbl_lazy"             "tbl"                 

tracks merupakan object dengan class tbl yang dapat diperlakukan serupa dengan data.frame. Berikut adalah isi dari object tracks.

tracks
# Source:   table<tracks> [?? x 9]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
   TrackId Name     AlbumId MediaTypeId GenreId Composer     Milliseconds  Bytes
     <int> <chr>      <int>       <int>   <int> <chr>               <int>  <int>
 1       1 For Tho~       1           1       1 Angus Young~       343719 1.12e7
 2       2 Balls t~       2           2       1 <NA>               342562 5.51e6
 3       3 Fast As~       3           2       1 F. Baltes, ~       230619 3.99e6
 4       4 Restles~       3           2       1 F. Baltes, ~       252051 4.33e6
 5       5 Princes~       3           2       1 Deaffy & R.~       375418 6.29e6
 6       6 Put The~       1           1       1 Angus Young~       205662 6.71e6
 7       7 Let's G~       1           1       1 Angus Young~       233926 7.64e6
 8       8 Inject ~       1           1       1 Angus Young~       210834 6.85e6
 9       9 Snowbal~       1           1       1 Angus Young~       203102 6.60e6
10      10 Evil Wa~       1           1       1 Angus Young~       263497 8.61e6
# ... with more rows, and 1 more variable: UnitPrice <dbl>

mengakses tabel artists

artists <- dplyr::tbl(Chinook, "artists")
class(artists)
[1] "tbl_SQLiteConnection" "tbl_dbi"              "tbl_sql"             
[4] "tbl_lazy"             "tbl"                 

Combining Multiple Tables with dplyr in R

inner_join()

menghasilkan semua baris pada tabel x yang memiliki kesamaan nilai dengan table y, dan semua kolom dari x dan y.

inner_join(tracks, artists)
# Source:   lazy query [?? x 10]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
  TrackId Name          AlbumId MediaTypeId GenreId Composer Milliseconds  Bytes
    <int> <chr>           <int>       <int>   <int> <chr>           <int>  <int>
1     149 Black Sabbath      16           1       3 <NA>           382066 1.24e7
2     169 Body Count         18           1       4 <NA>           317936 1.05e7
3    1222 Iron Maiden        95           1       3 Steve H~       324623 5.20e6
4    1297 Iron Maiden       102           1       3 Harris         261955 6.29e6
5    1320 Iron Maiden       104           1       1 <NA>           494602 1.19e7
6    1366 Iron Maiden       109           1       1 Steve H~       351869 1.41e7
7    2148 Iron Maiden       177           1       1 Steve H~       235232 7.60e6
8    3278 Black Sabbath     256           2       1 <NA>           364180 5.86e6
# ... with 2 more variables: UnitPrice <dbl>, ArtistId <int>

diperoleh tabel tracks yang memuat kesamaan nilai dengan tabel artists dengan semua kolom dari masing-masing tabel.

left_join()

Menghasilkan semua baris dalam tabel x, semua kolom pada x dan y. Untuk baris pada x yang tidak memiliki kesamaan dengan y diisi dengan nilai NA pada kolom yang baru.

invoices <- dplyr::tbl(Chinook, "invoices")
customers <- dplyr::tbl(Chinook, "customers")
left_join(invoices, customers)
# Source:   lazy query [?? x 21]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
   InvoiceId CustomerId InvoiceDate    BillingAddress   BillingCity BillingState
       <int>      <int> <chr>          <chr>            <chr>       <chr>       
 1         1          2 2009-01-01 00~ Theodor-Heuss-S~ Stuttgart   <NA>        
 2         2          4 2009-01-02 00~ Ullevålsveien 14 Oslo        <NA>        
 3         3          8 2009-01-03 00~ Grétrystraat 63  Brussels    <NA>        
 4         4         14 2009-01-06 00~ 8210 111 ST NW   Edmonton    AB          
 5         5         23 2009-01-11 00~ 69 Salem Street  Boston      MA          
 6         6         37 2009-01-19 00~ Berger Straße 10 Frankfurt   <NA>        
 7         7         38 2009-02-01 00~ Barbarossastraß~ Berlin      <NA>        
 8         8         40 2009-02-01 00~ 8, Rue Hanovre   Paris       <NA>        
 9         9         42 2009-02-02 00~ 9, Place Louis ~ Bordeaux    <NA>        
10        10         46 2009-02-03 00~ 3 Chatham Street Dublin      Dublin      
# ... with more rows, and 15 more variables: BillingCountry <chr>,
#   BillingPostalCode <chr>, Total <dbl>, FirstName <chr>, LastName <chr>,
#   Company <chr>, Address <chr>, City <chr>, State <chr>, Country <chr>,
#   PostalCode <chr>, Phone <chr>, Fax <chr>, Email <chr>, SupportRepId <int>

diperoleh semua baris pada tabel invoices dengan semua kolom tabel invoices dan customers, baris pada invoices yang tidak memiliki kesamaan dengan customers diisi dengan nilai NA pada kolom yang baru.

right_join()

menghasilkan semua baris pada tabel y, dan semua kolom pada x dan y, namun baris pada y yang tidak memiliki kesamaan dengan x akan diisi dengan nilai NA pada kolom yang baru.

genres <- dplyr::tbl(Chinook, "genres")
right_join(tracks, genres)
# Source:   lazy query [?? x 9]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
   TrackId Name          AlbumId MediaTypeId GenreId Composer Milliseconds Bytes
     <int> <chr>           <int>       <int>   <int> <chr>           <int> <int>
 1      NA Rock               NA          NA       1 <NA>               NA    NA
 2      NA Jazz               NA          NA       2 <NA>               NA    NA
 3      NA Metal              NA          NA       3 <NA>               NA    NA
 4      NA Alternative ~      NA          NA       4 <NA>               NA    NA
 5      NA Rock And Roll      NA          NA       5 <NA>               NA    NA
 6      NA Blues              NA          NA       6 <NA>               NA    NA
 7      NA Latin              NA          NA       7 <NA>               NA    NA
 8      NA Reggae             NA          NA       8 <NA>               NA    NA
 9      NA Pop                NA          NA       9 <NA>               NA    NA
10      NA Soundtrack         NA          NA      10 <NA>               NA    NA
# ... with more rows, and 1 more variable: UnitPrice <dbl>

diperoleh semua baris pada tabel genres dengan semua kolom tabel tracks dan genres, baris pada genres yang tidak memiliki kesamaan dengan tracks diisi dengan nilai NA pada kolom yang baru.

full_join()

menghasilkan semua baris dan kolom dari x dan y. Jika terdapat nilai yang tidak sama (match) antara x dan y maka akan bernilai NA.

playlist_track <- dplyr::tbl(Chinook, "playlist_track")
full_join(tracks, playlist_track)
# Source:   lazy query [?? x 10]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
   TrackId Name      AlbumId MediaTypeId GenreId Composer    Milliseconds  Bytes
     <int> <chr>       <int>       <int>   <int> <chr>              <int>  <int>
 1       1 For Thos~       1           1       1 Angus Youn~       343719 1.12e7
 2       1 For Thos~       1           1       1 Angus Youn~       343719 1.12e7
 3       1 For Thos~       1           1       1 Angus Youn~       343719 1.12e7
 4       2 Balls to~       2           2       1 <NA>              342562 5.51e6
 5       2 Balls to~       2           2       1 <NA>              342562 5.51e6
 6       2 Balls to~       2           2       1 <NA>              342562 5.51e6
 7       3 Fast As ~       3           2       1 F. Baltes,~       230619 3.99e6
 8       3 Fast As ~       3           2       1 F. Baltes,~       230619 3.99e6
 9       3 Fast As ~       3           2       1 F. Baltes,~       230619 3.99e6
10       3 Fast As ~       3           2       1 F. Baltes,~       230619 3.99e6
# ... with more rows, and 2 more variables: UnitPrice <dbl>, PlaylistId <int>

diperoleh seluruh baris dan kolom dari kedua tabel playlist_track dan tracks

semi_join()

menghasilkan semua baris pada tabel x yang memiliki kesamaan nilai dengan tabel y, dan semua kolom dari x. serupa dengan inner_join(), perbedaannya inner_join() mengembalikan semua kolom dari x dan y.

semi_join(tracks, artists)
# Source:   lazy query [?? x 9]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
  TrackId Name          AlbumId MediaTypeId GenreId Composer Milliseconds  Bytes
    <int> <chr>           <int>       <int>   <int> <chr>           <int>  <int>
1     149 Black Sabbath      16           1       3 <NA>           382066 1.24e7
2     169 Body Count         18           1       4 <NA>           317936 1.05e7
3    1222 Iron Maiden        95           1       3 Steve H~       324623 5.20e6
4    1297 Iron Maiden       102           1       3 Harris         261955 6.29e6
5    1320 Iron Maiden       104           1       1 <NA>           494602 1.19e7
6    1366 Iron Maiden       109           1       1 Steve H~       351869 1.41e7
7    2148 Iron Maiden       177           1       1 Steve H~       235232 7.60e6
8    3278 Black Sabbath     256           2       1 <NA>           364180 5.86e6
# ... with 1 more variable: UnitPrice <dbl>

diperoleh gabungan tracks dan artists dan mengembalikan semua kolom dari tracks dan artists.

anti_join()

menghasilkan semua baris dari x yang tidak memiliki kesamaan dengan y, dan semua kolom yang berasal dari x.

albums <- dplyr::tbl(Chinook, "albums")
anti_join(artists, albums)
# 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

diperoleh baris dari tabel artists yang tidak memiliki kesamaan dengan tabel albums.

Menggabungkan tiga tabel menggunakan inner_join()

inner_join(tracks, albums) %>%
    inner_join(., artists)
# Source:   lazy query [?? x 11]
# Database: sqlite 3.36.0 [C:\sqlite\db\chinook.db]
  TrackId Name          AlbumId MediaTypeId GenreId Composer Milliseconds  Bytes
    <int> <chr>           <int>       <int>   <int> <chr>           <int>  <int>
1     149 Black Sabbath      16           1       3 <NA>           382066 1.24e7
2     169 Body Count         18           1       4 <NA>           317936 1.05e7
3    1222 Iron Maiden        95           1       3 Steve H~       324623 5.20e6
4    1297 Iron Maiden       102           1       3 Harris         261955 6.29e6
5    1320 Iron Maiden       104           1       1 <NA>           494602 1.19e7
6    1366 Iron Maiden       109           1       1 Steve H~       351869 1.41e7
# ... with 3 more variables: UnitPrice <dbl>, Title <chr>, ArtistId <int>

diperoleh semua baris tabel tracks yang memiliki kesamaan nilai dengan tabel albums, dan semua kolom dari tracks dan album yang kemudian hasil inner_join() tersebut diaplikasikan ulang dengan tabel artists.

Tugas 3.b

Percobaan pertama Kecamatan di seluruh Kota dan Kabupaten Bekasi

mengakses file SHP

Admin3Kecamatan <- "C:/Users/nafis/Documents/Pascasarjana Nafisa/Semester 1/file kuliah/Sains Data/week 5/Admin3Kecamatan/idn_admbnda_adm3_bps_20200401.shp"

untuk mengetahui isi file SHP digunakan fungsi glimpse dari package dplyr

glimpse(Admin3Kecamatan)
 chr "C:/Users/nafis/Documents/Pascasarjana Nafisa/Semester 1/file kuliah/Sains Data/week 5/Admin3Kecamatan/idn_admbn"| __truncated__

akan dirubah melalui fungsi st_read dari package sf

Admin3 <- st_read(Admin3Kecamatan)
Reading layer `idn_admbnda_adm3_bps_20200401' from data source 
  `C:\Users\nafis\Documents\Pascasarjana Nafisa\Semester 1\file kuliah\Sains Data\week 5\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

akan dilihat kembali setelah dirubah

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 (~

Memasukan data via file CSV

File dbf disimpan dalam format csv melalui microsoft excel. File csv yang akan digunakan adalah sebagai berikut

Kotabekasi <- read.csv("/Users/nafis/Desktop/Bekasi.csv", header = TRUE, sep = ";")

Merge Data

Merge Data dilakukan dengan membandingkan primary key antara Spatial Data (adminthree hasil import file SHP) dan Data Frame (Kotabekasi hasil Import File CSV) menggunakan fungsi geo_join() dari package tigris

merged_bekasi <- geo_join(spatial_data = Admin3, data_frame = Kotabekasi, by_sp = "ADM3_PCODE",
    by_df = "ADM3_PCODE", how = "inner")

Mengatur Warna

mengatur warna untuk pewarnaan daerah

mycol1 <- c("lightblue1", "lightblue2", "lightblue3", "lightblue4")

Menampilkan Plot Peta Choropleth

pDATA <- ggplot() + geom_sf(data = merged_bekasi, aes(fill = DATA)) + scale_fill_gradientn(colours = mycol1,
    name = "Jumlah Penduduk") + labs(title = "Peta Kota dan Kabupaten Bekasi")
pDATA

Percobaan kedua Kabupaten dan Kota Bekasi serta Provinsi Jawa Barat

Mengakses file melalui csv

Kotabekasi1 <- read.csv("/Users/nafis/Desktop/tes.csv", header = TRUE, sep = ";")

Merge Data

merged_bekasicity <- geo_join(spatial_data = Admin3, data_frame = Kotabekasi1, by_sp = "ADM3_PCODE",
    by_df = "ADM3_PCODE", how = "inner")

Set warna

mycol <- c("red", "green", "blue", "yellow")

Menampilkan Plot Peta Choropleth

pDATA <- ggplot() + geom_sf(data = merged_bekasicity, aes(fill = DATA)) + scale_fill_gradientn(colours = mycol,
    name = "Jumlah Penduduk") + labs(title = "Kota dan Kabupaten Bekasi serta Provinsi Jawa Barat")
pDATA

Percobaan ketiga Kecamatan Bekasi Timur dan Kota serta Kabupaten Bekasi

Mengakses file

Kotabekasi2 <- read.csv("/Users/nafis/Desktop/kecamatan.csv", header = TRUE, sep = ";")

Merge Data

merged_bekasicity1 <- geo_join(spatial_data = Admin3, data_frame = Kotabekasi2, by_sp = "ADM3_PCODE",
    by_df = "ADM3_PCODE", how = "inner")

Set warna

mycol2 <- c("indianred")

Menampilkan Plot Peta Choropleth

pDATA2 <- ggplot() + geom_sf(data = merged_bekasicity1, aes(fill = DATA)) + scale_fill_gradientn(colours = mycol2,
    name = "Jumlah Penduduk") + labs(title = "Kecamatan Bekasi Timur dalam Kota dan Kabupaten Bekasi")
pDATA2

Perbedaan ketiga percobaan

Perbedaan dari ketiga percobaan terdapat file csv yang digunakan, yaitu file Kotabekasi, Kotabekasi1, Kotabekasi2.

Dimensi data

dim(Kotabekasi)
[1] 35  8
dim(Kotabekasi1)
[1] 630   7
dim(Kotabekasi2)
[1] 35  7

Rincian data

head(Kotabekasi)
     Shape_Leng    Shape_Area        ADM3_EN ADM3_PCODE ADM2_EN ADM2_PCODE
1 0,58719641835 0,00538877381        Babelan  ID3216090  Bekasi     ID3216
2 0,50154897847 0,00432079619    Bojongmangu  ID3216031  Bekasi     ID3216
3 0,40661875817 0,00404601403   Cabangbungin  ID3216140  Bekasi     ID3216
4 0,35133764809 0,00328619657      Cibarusah  ID3216030  Bekasi     ID3216
5 0,47480409668 0,00360369315       Cibitung  ID3216070  Bekasi     ID3216
6 0,49153411236 0,00441389566 Cikarang Barat  ID3216071  Bekasi     ID3216
    DATA  X
1 297645 NA
2  27363 NA
3  49018 NA
4  92168 NA
5 281824 NA
6 278237 NA
head(Kotabekasi1)
     Shape_Leng    Shape_Area        ADM3_EN ADM3_PCODE ADM2_EN ADM2_PCODE
1 0,58719641835 0,00538877381        Babelan  ID3216090  Bekasi     ID3216
2 0,50154897847 0,00432079619    Bojongmangu  ID3216031  Bekasi     ID3216
3 0,40661875817 0,00404601403   Cabangbungin  ID3216140  Bekasi     ID3216
4 0,35133764809 0,00328619657      Cibarusah  ID3216030  Bekasi     ID3216
5 0,47480409668 0,00360369315       Cibitung  ID3216070  Bekasi     ID3216
6 0,49153411236 0,00441389566 Cikarang Barat  ID3216071  Bekasi     ID3216
    DATA
1 297645
2  27363
3  49018
4  92168
5 281824
6 278237
head(Kotabekasi2)
   Shape_Leng  Shape_Area        ADM3_EN ADM3_PCODE ADM2_EN ADM2_PCODE DATA
1 0,587196418 0,005388774        Babelan  ID3216090  Bekasi     ID3216   NA
2 0,501548978 0,004320796    Bojongmangu  ID3216031  Bekasi     ID3216   NA
3 0,406618758 0,004046014   Cabangbungin  ID3216140  Bekasi     ID3216   NA
4 0,351337648 0,003286197      Cibarusah  ID3216030  Bekasi     ID3216   NA
5 0,474804097 0,003603693       Cibitung  ID3216070  Bekasi     ID3216   NA
6 0,491534112 0,004413896 Cikarang Barat  ID3216071  Bekasi     ID3216   NA

Menggunakan syntax glimpse

glimpse(Kotabekasi)
Rows: 35
Columns: 8
$ Shape_Leng <chr> "0,58719641835", "0,50154897847", "0,40661875817", "0,35133~
$ Shape_Area <chr> "0,00538877381", "0,00432079619", "0,00404601403", "0,00328~
$ ADM3_EN    <chr> "Babelan", "Bojongmangu", "Cabangbungin", "Cibarusah", "Cib~
$ ADM3_PCODE <chr> "ID3216090", "ID3216031", "ID3216140", "ID3216030", "ID3216~
$ ADM2_EN    <chr> "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi",~
$ ADM2_PCODE <chr> "ID3216", "ID3216", "ID3216", "ID3216", "ID3216", "ID3216",~
$ DATA       <int> 297645, 27363, 49018, 92168, 281824, 278237, 100714, 278476~
$ X          <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
glimpse(Kotabekasi1)
Rows: 630
Columns: 7
$ Shape_Leng <chr> "0,58719641835", "0,50154897847", "0,40661875817", "0,35133~
$ Shape_Area <chr> "0,00538877381", "0,00432079619", "0,00404601403", "0,00328~
$ ADM3_EN    <chr> "Babelan", "Bojongmangu", "Cabangbungin", "Cibarusah", "Cib~
$ ADM3_PCODE <chr> "ID3216090", "ID3216031", "ID3216140", "ID3216030", "ID3216~
$ ADM2_EN    <chr> "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi",~
$ ADM2_PCODE <chr> "ID3216", "ID3216", "ID3216", "ID3216", "ID3216", "ID3216",~
$ DATA       <int> 297645, 27363, 49018, 92168, 281824, 278237, 100714, 278476~
glimpse(Kotabekasi2)
Rows: 35
Columns: 7
$ Shape_Leng <chr> "0,587196418", "0,501548978", "0,406618758", "0,351337648",~
$ Shape_Area <chr> "0,005388774", "0,004320796", "0,004046014", "0,003286197",~
$ ADM3_EN    <chr> "Babelan", "Bojongmangu", "Cabangbungin", "Cibarusah", "Cib~
$ ADM3_PCODE <chr> "ID3216090", "ID3216031", "ID3216140", "ID3216030", "ID3216~
$ ADM2_EN    <chr> "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi", "Bekasi",~
$ ADM2_PCODE <chr> "ID3216", "ID3216", "ID3216", "ID3216", "ID3216", "ID3216",~
$ DATA       <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~