Parsing teks menjadi Serial ID dan datetime dengan Regular Expression (Regex) R |
Jumpa lagi teman-teman pembaca dan penyimak setia. Sepertinya, agak lama blog ini belum saya isi artikel. Kali ini kita akan coba belajar bersama bagaimana melakukan parsing dengan memanfaatkan bahasa pemrograman R.
Mungkin sebagian dari kita ada yang telah paham mengenai istilah parsing. Parsing adalah suatu aktivitas memecah atau membagi-bagi sesuatu menjadi beberapa bagian atau terpisah-pisah. Dalam dunia data science, data mining, dan big data, ada istilah parsing data.
Parsing data merupakan aktivitas mengubah suatu format dari sebuah data menjadi data dengan format yang baru, baik bentuknya atau formatnya. Sebagai contoh kasus, misalkan kita ingin memecah suatu data teks Nomor Induk Siswa (NIS) dari format "1991122825" menjadi "1991-11-28-25", atau dalam kasus yang kita angkat kali ini, yakni dari teks nomor id kejadian bencana yang terjadi di suatu wilayah tertentu, misalnya "3514106202307181" menjadi "2023-07-18" atau biasa diistilahkan datetime.
Pada dasarnya, dalam proses parsing kasus seperti ini, teman-teman bisa mempelajari sejumlah unggahan artikel sebelumnya ([1], [2], [3], [4], [5]). Intinya, kita perlu mempelajari bagaimana ilmu mengekstraksi teks menggunakan regular expression (regex).
Dalam praktiknya menggunakan R, penerapan regex sendiri bisa dilakukan dengan fungsi gsub(), str_extract() dan sebagainya. Namun dalam praktik kali ini, kita akan mencoba memakai kedua fungsi tersebut untuk mengubah dari data teks nomor id menjadi datetime. Untuk lebih mudahnya, langkah-langkah parsing teks menjadi datetime adalah sebagai berikut:
# Import data dari excel
library(readxl)
dataku <- read_excel("C:/Users/Joko Ade/Downloads/id_kejadian.xlsx")
# Sekilas melihat data
dataku
## # A tibble: 4 x 1
## kib
## <chr>
## 1 3514106202307181
## 2 3513102202301141
## 3 3525101202212012
## 4 3512999202207181
# Melihat tipe dataku
str(dataku)
## tibble [4 x 1] (S3: tbl_df/tbl/data.frame)
## $ kib: chr [1:4] "3514106202307181" "3513102202301141" "3525101202212012" "3512999202207181"
# Melakukan ekstraksi variabel kib dari karakter angka
# menjadi id serial yang menunjukkan kode wilayah-kode desa-tahun-bulan-tanggal-indeks
# kode wilayah 4 digit
# kode desa 3 digit
# kode tahun 4 digit
# kode bulan 2 digit
dataku$kib <- lapply(dataku$kib, function(x) gsub("(^\\d{4})(\\d{3})(\\d{4})(\\d{2})(\\d{2})(\\d{1})", "\\1-\\2-\\3-\\4-\\5", x))
# Mengubah list menjadi unlist
dataku$kib <- unlist(dataku$kib)
# Melihat hasilnya
dataku
## # A tibble: 4 x 1
## kib
## <chr>
## 1 3514-106-2023-07-18
## 2 3513-102-2023-01-14
## 3 3525-101-2022-12-01
## 4 3512-999-2022-07-18
# Memperoleh informasi waktu, yakni tahun-bulan-tanggal
library(stringr)
library(dplyr)
dataku %>%
mutate(time = str_extract_all(kib, "20\\d{2}.*")) -> dataku2
# unlist
dataku2$time <- unlist(dataku2$time)
#Melihat hasil
dataku2
## # A tibble: 4 x 2
## kib time
## <chr> <chr>
## 1 3514-106-2023-07-18 2023-07-18
## 2 3513-102-2023-01-14 2023-01-14
## 3 3525-101-2022-12-01 2022-12-01
## 4 3512-999-2022-07-18 2022-07-18
# Mengubah format tanggal
library(lubridate)
dataku2$time <- as.Date(ymd(dataku2$time))
dataku2$time <- as.Date(dataku2$time, format = c("%Y/%m/%d"))
# Melihat hasilnya
dataku2
## # A tibble: 4 x 2
## kib time
## <chr> <date>
## 1 3514-106-2023-07-18 2023-07-18
## 2 3513-102-2023-01-14 2023-01-14
## 3 3525-101-2022-12-01 2022-12-01
## 4 3512-999-2022-07-18 2022-07-18
Demikian sedikit sharing kita kali ini, semoga meski sedikit, setidaknya bisa menambah pengetahuan sekaligus pengalaman berharga dan berguna bagi teman-teman. Selamat membaca, memahami, dan mempraktikan!