Memisahkan Data Numerik menjadi Data Waktu (Timestamps) dengan Regular Expression (NLP) R

Natural Language Processing dengan Regex R

Pada bahasan mengenai regular expression (REGEX) sebelumnya, semoga pembaca mulai terbiasa melakukan ekstraksi dari data teks yang notabene merupakan data tidak terstruktur menjadi data terstruktur. Sebagai lanjutan yang masih sama pokok bahasannya, pada kesempatan ini kita akan melakukan praktikum bagaimana membentuk sebuah variabel baru dari hasil ekstraksi teks.

Tujuan pembentukan variabel kali ini adalah untuk memunculkan insight soal waktu dari sejumlah data numerik yang belum ketemu maksudnya. Bisa dibilang, kasus ini cukup jarang kita temui. Namun, ada kebolehjadian, suatu saat, kita akan dihadapkan pada suatu data yang kompleks dan menimbulkan pertanyaan: bagaimana mengubah data tersebut sehingga mempunyai insight?

Era Big Data seperti pada ulasan sebelumnya, selain memerlukan keahlian dasar matematik dan statistik, juga perlu keahlian lain, yaitu penerapan Natural Language Processing (NLP). Keahlian NLP ini mungkin bagi sebagian orang merupakan hal remeh, padahal NLP menjadi salah satu peletak dasar pembentukan Artificial Intelligence (AI) yang sedang tren saat ini, yaitu ChatGPT dan disusul oleh Bard AI Google.

Data yang akan kita gunakan kali ini adalah data dummy berupa data numerik tercampur. Data ini sebenarnya adalah sebuah kode, id, atau bisa dikatakan sebagai data serial number obyek tertentu. Target penggunaan NLP Regex R nantinya adalah membuat data numerik tersebut menjadi data waktu (time) sehingga lebih bermakna. Berikut langkah-langkah praktis dalam penerapan NLP Regex R:

#Generate data numerik
#4 angka pertama adalah kode id
#3 angka berikutnya adalah jenis obyek
#4 angka berikutnya adalah tahun
#3 angka berikutnya adalah bulan
#2 angka terakhir adalah tanggal

x <- "1406107202302141"
x
## [1] "1406107202302141"
#Memisahkan angka menjadi sebuah nomor seri dengan pemisah strip (-)
gsub("(^\\d{4})(\\d{3})(\\d{4})(\\d{2})(\\d{2})(\\d{1})", "\\1-\\2-\\3-\\4-\\5", x)
## [1] "1406-107-2023-02-14"
#Import Data
seriku
## # A tibble: 10 x 1
##    kib             
##    <chr>           
##  1 1406107202302141
##  2 3374999202302131
##  3 3374101202302131
##  4 3374999202302111
##  5 3315999202302111
##  6 3374999202302101
##  7 3374105202302091
##  8 3374999202302091
##  9 3513101202302091
## 10 3513101202302092
#Penerapan pemisahan dataframe angka menjadi nomor seri
seriku$kib <- lapply(seriku$kib, function(x)
gsub("(^\\d{4})(\\d{3})(\\d{4})(\\d{2})(\\d{2})(\\d{1})", "\\1-\\2-\\3-\\4-\\5", x))
seriku$kib <- unlist(seriku$kib)
seriku
## # A tibble: 10 x 1
##    kib                
##    <chr>              
##  1 1406-107-2023-02-14
##  2 3374-999-2023-02-13
##  3 3374-101-2023-02-13
##  4 3374-999-2023-02-11
##  5 3315-999-2023-02-11
##  6 3374-999-2023-02-10
##  7 3374-105-2023-02-09
##  8 3374-999-2023-02-09
##  9 3513-101-2023-02-09
## 10 3513-101-2023-02-09
#Mengubah tipe menjadi karakter
seriku$kib <- as.character(seriku$kib)
#Ekstraksi tahun, bulan, dan tanggalnya saja
#Membuat variabel baru bernama "time"
library(dplyr)
seriku <- seriku %>%
  mutate(time = str_extract_all(kib, "2023.*"))
seriku
## # A tibble: 10 x 2
##    kib                 time     
##    <chr>               <list>   
##  1 1406-107-2023-02-14 <chr [1]>
##  2 3374-999-2023-02-13 <chr [1]>
##  3 3374-101-2023-02-13 <chr [1]>
##  4 3374-999-2023-02-11 <chr [1]>
##  5 3315-999-2023-02-11 <chr [1]>
##  6 3374-999-2023-02-10 <chr [1]>
##  7 3374-105-2023-02-09 <chr [1]>
##  8 3374-999-2023-02-09 <chr [1]>
##  9 3513-101-2023-02-09 <chr [1]>
## 10 3513-101-2023-02-09 <chr [1]>

Adapun hasil dari ekstraksi serta pembentukan variabel baru terlihat sebagai berikut:

Hasil ekstraksi dan pembentukan variabel time

Demikian sedikit sharing kita kali ini. Jangan lupa untuk terus mengikuti dan menyimak unggahan-unggahan terbaru dan menarik lainnya di blog sederhana ini. Semoga sedikit banyak bisa membantu memberi pengetahuan dan pengalaman praktis bagi seluruh pengunjung dan pembaca. Selamat memahami dan mempraktikkan!

Add Comments


EmoticonEmoticon