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.
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
Open Data Jakarta : https://data.jakarta.go.id/dataset/data-penumpang-bus-transjakarta-januari-2021
Packages
1. Mengunduh the Packages
Terdapat 2 packages yang digunakan dalam project ini :
dplyr : untuk memanipulasi dataframe
ggplot2 : untuk visualisasi data
2. Mengaktifkan the Packages
Setelah di install, pastikan library yang sudah di install di aktifkan.
##
## 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
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.
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.
## 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.
## 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
## 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
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
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.
## [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.
5. Menghapus Data Kembar
Jika ada data kembar maka sebaiknya pilih salah satu karena semakin banyak nilai sama, variasi data semakin kecil.
6. Memastikan Data sudah Bersih
Data dianggap bersih jika seluruh data tidak ada missing value, redudansi dan data yang tidak masuk akal
## 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,…
## 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
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
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.
## # 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.
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.
## # 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.
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.
Dari dataset yang telah dilakukan ekplorasi dapat diketahui
bahwa,