Langkah 1 : Permasalahan

Pendahuluan

Source Image : Jakarta.go.id
Source Image : Jakarta.go.id

Transjakarta adalah salah satu moda transportasi umum milik pemerintah Provinsi DKI Jakarta. Beroperasi hampir kurang lebih selama 20 tahun, Transjakarta melayani masyarakat Jakarta. Tidak hanya daerah pusat kota, namun Transjakarta mampu menjangkau ke seluruh wilayah DKI Jakarta. Pembanguan koridor dengan trayek baru terus direncanakan pemerintah. Disamping itu Transjakarta terus berinovasi tidak hanya menyediakan tipe kendaraan bus (BRT) namun juga mobil berukuran kecil seperti Mikrotrans dan Angkutan.

Salah satu keuntungan dari ketersedian variasi jenis kendaraan adalah semakin banyaknya penumpang yang merasakan fasilitas yang disediakan pemerintah daerah tersebut. Banyaknya penumpang yang menggunakan fasilitas ini terekam dengan baik di website Open Data DKI Jakarta. Project ini adalah melakukan ekplorasi data dari website pemerintah https://data.jakarta.go.id/ dan menampilkan hasil visualisasi menggunakan Bahasa Pemrograman R sehigga diharapkan memberikan pemahaman kepada para pembaca lebih mudah dan lebih cepat terkait data tersebut.

Permasalahan

  1. Berapa jumlah penumpang Bus BRT Transjakarta dibandingkan jenis lainnya ?
  2. Jika BRT menjadi yang paling banyak digunakan, Apa yang menjadi penyebabnya ?
  3. Dari 14 Trayek bus BRT Transjakarta, trayek mana yang banyak melayani penumpang ?
  4. Bagaimana Trend Jumlah Penumpang pada Rute Blok M - Kota tiap bulannya ?

Langkah 2 : Persiapan Data

Dataset

Tentang Data
Semua data ini adalah data yang dapat diakses secara bebas melalui data.jakarta.go.id dari Dinas Perhubungan Provinsi DKI Jakarta

Variabel
tahun : waktu pelaksanaan pengambilan data
bulan : bulan pengambilan data
jenis : jenis angkutan
kode_trayek : kode trayek
trayek : rute perjalanan angkutan/kendaraan
jumlah_penumpang : jumlah Penumpang

Langkah 3 : Pengolahan Data

Mengatur Enviroment >

Packages

1. Mengunduh the Packages

Terdapat 2 packages yang digunakan dalam project ini :
dplyr : untuk memanipulasi dataframe
ggplot2 : untuk visualisasi data

# install.packages('dplyr') 
# install.packages('ggplot')
# install.packages('lubridate')

2. Mengaktifkan the Packages

Setelah di install, pastikan library yang sudah di install di aktifkan.

library (dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)


options(scipen=999) # to switch scientific notation

Pengumpulan Data >

1. Membaca File CSV

Membaca CSV File yang sudah di download di web open data. Kemudian menggunakan fungsi read.csv, dan pastikan letak .csv file sesuai dengan working directory yang digunakan.

transjakarta <- read.csv('transjakarta 2021 all.csv', stringsAsFactors = T)

insight : file csv yang sudah dibaca dimasukan ke dalam variable transjakarta, penggunaan stringAsFactors untuk menjadikan tipe data char menjadi factor, dimana hal tersebut memungkinkan kita melihat level data yang ada

2. Melihat 3 Data Teratas

Melihat 3 data teratas menggunakan fungsi head(), untuk mengetahui dan memahami data setiap barisnya. Sebagaimana yang diketahui pada data dibawah ini merupakan data penumpang pada bulan januari.

head(transjakarta, n=3)
##   tahun bulan      jenis kode_trayek                               trayek
## 1  2021     1 Mikrotrans      JAK.88 Terminal Tanjung Priok - Ancol Barat
## 2  2021     1 Mikrotrans      JAK.85             Bintara - Cipinang Indah
## 3  2021     1 Mikrotrans      JAK.84 Terminal Kampung Melayu - Kapin Raya
##   jumlah_penumpang
## 1             1473
## 2            20280
## 3            28779

insight: Pada baris pertama diketahui bahwa dataframe ini adalah data jumlah penumpang Mikrotrans bulan Januari Tahun 2021 untuk trayek Terminal Tanjung Priok - Ancol Barat yang memiliki kode JAK.88

3. Periksa Struktur Data

Memeriksa struktur data berguna untuk mengetahui seberapa banyak kolom dan baris pada data tersebut serta tipe data yang digunakan. Diharapkan setelah melihat struktur data, dapat diketahui apakah variabel tersebut memiliki tipe data yang sesuai, memiliki karakteristik khusus dll, sehingga dapat dilakukan perubahan data atau penghapusan kolom disesuaikan dengan permasalahnya. Untuk periksa struktur data dapat dilakukan dengan menggunakan fungsi str() menggunakan R-Base atau menggunakan fungsi glimpse() yang berasal dari library dplyr, library yang biasa digunakan untuk memanipulasi dataframe. Untuk Project ini menggunakan glimpse karena memiliki tampilan yang lebih rapi.

glimpse(transjakarta)
## Rows: 1,473
## Columns: 6
## $ tahun            <fct> "2021", "2021", "2021", "2021", "2021", "2021", "2021…
## $ bulan            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ jenis            <fct> Mikrotrans, Mikrotrans, Mikrotrans, Mikrotrans, Mikro…
## $ kode_trayek      <fct> JAK.88, JAK.85, JAK.84, JAK.80, JA.77, JAK.75, JAK.74…
## $ trayek           <fct> Terminal Tanjung Priok - Ancol Barat, Bintara - Cipin…
## $ jumlah_penumpang <int> 1473, 20280, 28779, 54998, 60284, 48220, 38572, 65087…

insight :
- Dari data diatas diketahui dataframe terdiri dari 1,473 baris dan 6 kolom.
- Varibel tahun dapat diubah datanya karena dataset ini dilakukan pengambilan data selama satu tahun = tidak ada nilai unique
- Variabel bulan dapat diubah dari tipe data numeric menjadi tipe data factor
- variabel factor diatas apakah sudah tepat ? cek nilai unique

Lakukan cek nilai unique untuk memastikan tipe data tersebut cocok menjadi factor. Cek nilai unique dapat memanfaatkan fungsi n_distict yang disediakan oleh library dplyr

sapply(transjakarta, n_distinct)
##            tahun            bulan            jenis      kode_trayek 
##               13               13                4              135 
##           trayek jumlah_penumpang 
##              136             1409

Insight :
1. variable tahun dapat dihapus karena tidak sesuai
2. variable bulan kurang tepat dijadikan int seharusnya factor dan ada 13, seharusnya 12
3. variable kode trayek dan trayek kurang tepat dijadikan data factor karena memiliki nilai unique yang banyak dibandingkan jumlah data
4. variable jumlah_penumpang sudah tepat

Pembersihan Data

Insight yang diperoleh pada langkah sebelumnya, dilanjutkan pada tahapan ini

1. Ubah Tipe Data dan Deskripsi

transjakarta_clean <- transjakarta |> 
  select( #menggunakan fungsi select untuk menghapus kolom
    -tahun # kolom dihapus karena tidak bervariasi, seluruh data ini diambil dalam kurun periode tahun yang sama
  ) |> 
  filter(bulan != 'NA') |> #Menghapus nilai NA pada variable bulan, karena tidak representatif
  
  mutate(
    
    #mengubah variable bulan menjadi lebih representatif
    nama_bulan = case_when(
      bulan == 1 ~ 'Januari',
      bulan == 2 ~ 'Februari',
      bulan == 3 ~ 'Maret',
      bulan == 4 ~ 'April',
      bulan == 5 ~ 'Mei',
      bulan == 6 ~ 'Juni',
      bulan == 7 ~ 'Juli',
      bulan == 8 ~ 'Agustus',
      bulan == 9 ~ 'September',
      bulan == 10 ~ 'Oktober',
      bulan == 11 ~ 'November',
      bulan == 12 ~ 'Desember'
    ),
    
    #mengubah tipe data variable bulan yang sebelumnya numeric menjadi faktor dengan level
    nama_bulan = factor ( x= nama_bulan,
                        levels= c('Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember'))) |> 
    
    #mengubah tipe data variable kode_trayek dan trayek dari factor menjadi char
    mutate_at(
      
      vars(kode_trayek, trayek), as.character
      
    ) 

insight :
- telah dilakukan penghapusan kolom tahun karena tidak variatif
- filter digunakan untuk menghapus nilai NA pada variable bulan, pada tahap sebelumnya variable bulan berjumlah 13
- mengubah tipe data bulan, kode trayek dan trayek
- menyimpan kedalam variable baru yaitu transjakarta_clean

2. Menghapus Kolom

Dari 6 variable kolom, tidak semuanya digunakan. terdapat variable yang sama yaitu variable bulan dan nama_bulan. Kita dapat menghapus variable bulan dan menggunakan variable nama_bulan karena lebih representatif

transjakarta_clean <- transjakarta_clean |> 
  select(-bulan)

3. Menghapus Missing Value

Gunakan fungsi anyNA() untuk menghapus missing value. nilai missing value dihapus karena akan mempekecil variasi data, tidak mewakili apapun(tidak representatif) sehingga akan mengurangi kualitas data.

transjakarta_clean |> 
  anyNA()
## [1] FALSE

4. Memeriksa Data bernilai 0

Serupa dengan missing value, umumnya nilai 0 dihapus karena memperkecil data. Namun hal ini tak berlaku dalam kondisi tertentu.

transjakarta_clean <- transjakarta_clean |> 
  filter(jumlah_penumpang != 0)

5. Menghapus Data Kembar

Jika ada data kembar maka sebaiknya pilih salah satu karena semakin banyak nilai sama, variasi data semakin kecil.

transjakarta_clean <- transjakarta_clean |> 
  distinct()

6. Memastikan Data sudah Bersih

Data dianggap bersih jika seluruh data tidak ada missing value, redudansi dan data yang tidak masuk akal

glimpse(transjakarta_clean)
## Rows: 1,414
## Columns: 5
## $ jenis            <fct> Mikrotrans, Mikrotrans, Mikrotrans, Mikrotrans, Mikro…
## $ kode_trayek      <chr> "JAK.88", "JAK.85", "JAK.84", "JAK.80", "JA.77", "JAK…
## $ trayek           <chr> "Terminal Tanjung Priok - Ancol Barat", "Bintara - Ci…
## $ jumlah_penumpang <int> 1473, 20280, 28779, 54998, 60284, 48220, 38572, 65087…
## $ nama_bulan       <fct> Januari, Januari, Januari, Januari, Januari, Januari,…
summary(transjakarta_clean)
##                      jenis     kode_trayek           trayek         
##                         :  0   Length:1414        Length:1414       
##  Angkutan Umum Integrasi:422   Class :character   Class :character  
##  BRT                    :156   Mode  :character   Mode  :character  
##  Mikrotrans             :836                                        
##                                                                     
##                                                                     
##                                                                     
##  jumlah_penumpang     nama_bulan 
##  Min.   :      1   Juli    :125  
##  1st Qu.:  27978   November:125  
##  Median :  50433   Mei     :124  
##  Mean   :  84206   Maret   :123  
##  3rd Qu.:  75241   Juni    :121  
##  Max.   :1131439   Januari :119  
##                    (Other) :677

Langkah 4 : Analisis dan Visualisasi Data

1. Pertanyaan : Berapa Jumlah Penumpang Bus Transjakarta (BRT) dibandingkan Jenis lainnya

Untuk menjawab ini, gunakan variable jenis dan jumlah_penumpang, data tersebut kemudian dikelompokan berdasarkan jenis dan dihitung secara statistik variable jumlah_penumpang

transjakarta_penumpang <- transjakarta_clean |> 
  group_by(jenis) |> 
  summarise(jumlah= sum(jumlah_penumpang)) |> 
  arrange(-jumlah)

Visualisasi

ggplot(data = transjakarta_penumpang,
       mapping = aes(x = jumlah/1000000)) +
  geom_col(aes(y = reorder(jenis,jumlah)), position = 'dodge')+
   labs( title = 'Distribusi Jumlah Penumpang tiap Jenis Transjakarta',
         x = 'Jumlah Penumpang (Dalam Juta)',
         y = NULL
         ) +
   theme_minimal() +
   theme(legend.position = "none",
             plot.title = element_text(hjust = 0.5),
         axis.title.x = element_text(vjust = 1))

insight : dari grafik diatas diketahui bahwa penumpang BRT atau Bus Transjakarta mencapai 60 juta orang, melampaui jenis kendaraan Transjakarta lainnya

2. Jika BRT menjadi yang paling banyak digunakan, apa yang menjadi penyebabnya ?

transjakarta_total_trayek <- transjakarta_clean |> 
  group_by(jenis, trayek ) |> 
  summarise(jumlah = n()) |> 
  arrange(-jumlah) |> 
  group_by(jenis) |> 
  summarise(n=n())
## `summarise()` has grouped output by 'jenis'. You can override using the
## `.groups` argument.
transjakarta_total_trayek
## # A tibble: 3 × 2
##   jenis                       n
##   <fct>                   <int>
## 1 Angkutan Umum Integrasi    48
## 2 BRT                        14
## 3 Mikrotrans                 74

Visualisasi

ggplot(data = transjakarta_total_trayek,
       mapping = aes(x = n)) +
  geom_col(aes(y = reorder(jenis,n)), position = 'dodge')+
   labs( title = 'Distribusi Jumlah Trayek per Jenis Transjakarta',
         x = 'Total Trayek',
         y = NULL
         ) +
   theme_minimal() +
   theme(legend.position = "none",
             plot.title = element_text(hjust = 0.5),
         axis.title.x = element_text(vjust = 1))

Insight : Jika dilihat dari total trayek, BRT memiliki trayek yang paling sedikit dibandingkan jenis lain. Ini menunjukan bahwa jumlah rute tidak mempengaruhi jumlah penumpang ada hal eksternal diluar dataset dari variable dataset ini, seperti ukuran kendaraan dalam menampung penumpang dimana ukuran bus BRT mampu menampung hingga 5 kali lebih banyak dari Miktrotrans dan Angkutan Umum Integrasi, letak rute dimana rute yang digunakan BRT adalah rute strategis warga DKI Jakarta dalam beraktivitas dll.

3. Dari 14 Trayek BRT yang beroperasi, Trayek mana yang paling banyak melayani penumpang ?

brt <- transjakarta_clean |> 
  filter(jenis == 'BRT') |> 
  group_by(trayek, jumlah_penumpang) |> 
  summarise(n = n()) |> 
  group_by(trayek) |> 
  summarise(n = sum(jumlah_penumpang))
## `summarise()` has grouped output by 'trayek'. You can override using the
## `.groups` argument.
brt
## # A tibble: 14 × 2
##    trayek                                      n
##    <chr>                                   <int>
##  1 Blok M - Kota                        10079752
##  2 Ciledug - Tendean                     3337261
##  3 Kalideres - Pasar Baru                5250726
##  4 Kampung Melayu - Ancol                4902814
##  5 Kampung Rambutan - Kampung Melayu     4372447
##  6 Lebak Bulus - Harmoni                 5122397
##  7 Penjaringan - Sunter Bouleverd Barat  1620307
##  8 Pinang Ranti - Pluit                  7694406
##  9 Pulo Gadung 1 - Harmoni               3836531
## 10 Pulo Gadung 2 - Tosari                2256043
## 11 Pulo Gebang - Kampung Melayu          1603385
## 12 Pulo Ggadung 2 - Tosari                776411
## 13 Ragunan - Dukuh Atas 2                3996604
## 14 Tanjung Priok - PGC 2                 4262272

Visualisasi

ggplot(data = brt,
       mapping = aes(x = n/1000000, 
                     y = reorder(trayek, n)))+
  geom_col(aes(fill = n))+
  scale_fill_gradient(low = 'red', high = 'black')+
  labs( title = 'Distribusi Penumpang per Trayek BRT',
         x = 'Jumlah Penumpang (dalam Juta)',
         y = NULL
         ) +
   theme_minimal() +
   theme(legend.position = "none",
             plot.title = element_text(hjust = 0),
         axis.title.x = element_text(vjust = 1))

Insight : Trayek Blok M-Kota menjadi trayek yang paling diminati masyarakat DKI Jakarta dengan lebih dari 10 juta jiwa pengguna per tahun.

4. Bagaimana Trend Jumlah Penumpang pada Rute Blok M - Kota tiap bulannya ?

brt_blok_m <- transjakarta_clean |> 
  filter(jenis== 'BRT' & trayek == 'Blok M - Kota') |> 
  group_by(nama_bulan) |> 
  select(nama_bulan,jumlah_penumpang)

Visualisasi

ggplot(data = brt_blok_m,
       mapping = aes(x = nama_bulan)) +
  geom_col(aes(y = jumlah_penumpang), position = 'dodge')+
   labs( title = 'Distribusi Jumlah Penumpang pada Trayek Blok M - Kota',
         x = NULL,
         y = 'Jumlah Penumpang'
         ) +
   theme_minimal() +
   theme(legend.position = "none",
             plot.title = element_text(hjust = 0.5),
         axis.title.x = element_text(vjust = 2),
         axis.title.x.bottom = element_text(hjust = 2))

Insight : Dari grafik distribusi diatas diketahui bahwa pada bulan Juli 2021 mengalami penurunan drastis untuk jumlah penumpang BRT di trayek Blok M- Kota, hal tersebut disebabkan oleh Kebijakan PSBB yang pemerintah lakukan secara ketat akibat melonjaknya kasus Positif dan kematian karena Pandemi Covid-19. Hal tersebut menjadikan masyarakat untuk tidak beraktivitas di luar rumah termasuk menggunakan BRT Transjakarta.

Langkah 5 : Kesimpulan

Dari dataset yang telah dilakukan ekplorasi dapat diketahui bahwa,

  1. Bus BRT Transjakarta menjadi moda transportasi yang paling banyak digunakan dibandingkan dengan Mikrotrans dan Angkutan Umum
  2. Secara Internal, jumlah rute tidak berpengaruh dalam banyaknya penumpang. Ada faktor eksternal yang mempengaruhi banyaknya jumlah penumpang BRT Transjakarta dibandingkan dengan Mikrotrans dan Angkutan Umum. Untuk itu diperlukan variable eksternal dalam dataset ini untuk menjawab pertanyaan ini
  3. Trayek terbanyak berada pada trayek Blok M - Kota, dengan total penumpang 10 juta di tahun 2021
  4. Efek pandemi mampu mempengaruhi jumlah pengguna BRT Transjakarta, dimana terjadi penurunan jumlah penumpang per bulan khususnya di bulan juli ketika PSBB diberlakukan pemerintah