
Data Engineering Chalenge with Python (CT Corp X DQLab)
Project ini merupakan kerja sama antara DQLab Academy dengan Perusahaan CT Corp Digital (Konglomerat konsumen terbesar dan berkembang pesat di Indonesia)
27 October, 2022
4
4
0
Contributors
Project ini merupakan kerja sama antara DQLab Academy dengan Perusahaan CT Corp Digital.
Perusahaan CT Corp Digital adalah konglomerat konsumen terbesar dan berkembang pesat di Indonesia dengan bisnis utama di perbankan, jasa keuangan, media, gaya hidup, hiburan, sumber daya alam, dan F&B.
CT Corp telah mendirikan perusahaan yang kuat di pasar konsumen seperti:
Bank Mega, Bank Mega Syariah, Mega Life, DetikNetwork, TRANSMEDIA (Trans TV, Trans 7, TV CNN Indonesia, CNNIndonesia.com, CNBC TV, (CNBCIndonesia.com), Trans Fashion, Transmart (Carrefour), and F&B (Baskin Robins, Coffee Bean, Wendy’s)
Data Engineer Coding Challenge
Sebagai seorang Data Engineer, kami diminta untuk menggali informasi dari Wikipedia dan membuat fungsi menggunakan Regular Expression dengan bahasa pemrograman Python.
1.
Web Scrapping (Mengumpulkan data terstruktur dari sebuah web secara otomatis atau ekstraksi.)
2.
Function and Regular Expression (membuat script yang memiliki fungsi mendefinisikan sebuah pola pencarian sehingga dapat membantu kita untuk melakukan matching (pencocokan), locate (pencarian), dan manipulasi teks.)
Chalenge 1 (Web Scrapping)
Sebagai seorang Data Engineer, Anda diminta untuk menggali informasi dari https://id.wikipedia.org/wiki/Demografi_Indonesia menggunakan bahasa pemrograman Python. Buatlah suatu script Python untuk menyimpan tabel "Jumlah Penduduk menurut Provinsi" dari web tersebut dengan format CSV. File CSV menggunakan format double-apostrophe quoting ('…') dan disimpan dengan nama 'Indonesia_Demography_by_Province.csv'. Kolom yang perlu Anda ambil adalah sebagai berikut :
1. Nama provinsi
2. Luas (km2)
3. Populasi (2010)
4. Populasi (2020)
Dataframe yang akan kamu buat diassign dengan nama variabel df.
SOLUSI
Web Scraping adalah salah satu metode yang bisa kita gunakan dalam mengumpulkan data dari internet. Scraping kita lakukan seandainya ingin melakukan ekstraksi informasi dari sebuah situs web secara langsung dengan menggunakan protokol http.
Web Scraping bisa menjadi solusi dalam mendapatkan informasi dari sebuah situs web jika situs tersebut tidak menyediakan API untuk pengambilan informasi. Berikut langkah-langkah yang dapat dilakukan dalam Web Scraping.
Library yang kita butuh kan :
1.
Pandas, biasanya digunakan untuk melakukan pengolahan data statistik yang fleksibel, ekspresif dan cepat. Kali ini saya gunakan untuk mengekstrak data menjadi dalam bentuk tabel atau data frame, sehingga data tersebut dapat mempermudah proses analisis.
2.
Requests, digunakan untuk mengirim berbagai request HTTP dan mengembalikan Objek Respons
3.
BeautifulSoup, berfungsi sebagai parser untuk memisahkan komponen-komponen HTML menjadi rangkain elemen yang mudah dibaca.
Langkah selanjutnya, Request ke Situs yang telah ditentukan. Kita akan mengambil seluruh data dalam sebuah tabel di Wikipedia.
Berikut penampakkan saat saya melakukan pemanggilan variable soup

Source Code Page
Kemudian, saya mengambil tabel dengan class ‘wikitable sortable’ dengan menggunakan fungsi soup.find() dan menyimpannya ke dalam variabel “my_table”.
saat saya memanggil variable “my_table”, tampilan nya seperti di bawah ini:

Source Code Table
td merupakan kredensial dari table data. Saya menggunakan fungsi findAll() untuk mengekstrak daftar objek Tag yang cocok dengan kriteria yang diberikan (td), mengantonginya ke dlam Variabel "links" dan melakukan pemanggilan Variabel.

Source Code td (Table Data)
Proses Scrapping Selesai. Next, saya akan menyimpannya ke dalam File CSV seperti yang sudah ditentukan pada Chalenge. Namun, sebelum kesitu saya akan melakukan pengumpulan Nilai yang kemudian kita sebut Elemen List agar nantinya nilai tersebut dapat tersimpan berdasarkan urutan tertentu (sequence).
Untuk memasukkan data HTML ke dalam list, saya menggunakan fungsi enumerate() untuk iterasi sebagai langkah pertama. Fungsi enumerate() mengembalikan objek iterable yang tiap itemnya berpasangan dengan indeks. Selanjutnya, menggunakan Fungsi append() untuk mengisi data list kosong lalu memanggil method get.text() untuk menyerap data yang berisi text.
Terakhir, membuat data frame dan menyimpan ke dalam file CSV dengan menggunakan fungsi pd.DataFrame() untuk membuat dataframe-nya.

Tampilan data frame dengan df.head()
Chalenge 2 (Function and Regular Expression)
Sebagai seorang Data Engineer, Anda diminta untuk membuat suatu fungsi yang bernama “email_check” untuk menyaring beberapa email menggunakan dalam bahasa pemrograman Python. Fungsi ini akan menerima suatu parameter yang bernama “input” yang mana merupakan email dan -nya akan berupa “Pass” atau “NotPass”. Fungsinya harus memenuhi pola berikut :

Solusi
Pada kasus ini saya menggunakan library Regular Expression alias re. Regular expression (regex) adalah serangkaian karakter yang mendefinisikan sebuah pola pencarian. Pola tersebut biasanya digunakan oleh algoritme pencarian string untuk melakukan operasi "cari" atau "cari dan ganti" pada string, atau untuk memeriksa string masukan. Mungkin saya tidak perlu menjelaskan regex lebih dalam karena dapat membuat Shows ini panjang. Untuk mengetahui Regex dari dasar, silahkan googling atau cari di sumber lain yang lebih lengkap. Mari kita analisa Data tersebut.
Email pertama, my-name@someemail.com output nya “Not Pass”. Dari 9 email yang ditampilkan, hanya email pertama ini yang menggunakan tanda strip “-”. Saya berhipotesa bahwa email yang mengandung karakter “-” akan menghasilkan output “Not Pass”. Dan ini Polanya:
Legenda;
- ( ?!….. ) = menentukan posisi menggunakan Negasi Pola.
- ( ?!- ). = menentukan posisi dimana semua karakter cocok kecuali mengandung “-”.
- ((?!-).)* = Pola tersebut boleh mengalami perulangan atau tidak sama sekali.
- ^((?!-).)*$ = Tambahkan ^ dan $ untuk memulai dan mengakhiri pola.
- (?=^((?!-).)*$) = Tambahkan (?=…) untuk menentukan posisi awal.
Lanjut, perhatikan email ke 8 dan 9. 201903myname@someemail.com dan 201903.myname@someemail.com. Kedua email ini punya output “Not Pass”. Persamaan email ini adalah sama-sama di awali oleh angka. Hipotesa, email yang di awali oleh angka akan menghasilkan output “Not Pass”. Polanya,
Legenda;
- ^\D = cocok dengan karakter apa pun selain angka.
Lanjut, perhatikan email ke 5 dan email ke 6 yang mengeluarkan output “Not Pass” my.name.2019@someemail.com dan somename.201903@someemail.com. Kedua email tersebut mengandung karakter “.” dan diikuti dengan angka. Ternyata email ke 7 my_name.201903@someemail.com yang outpunya “Pass” juga memiliki karakter dengan pola “.” diikuti angka. Namun terdapat perbedaan yaitu hanya email ke 7 mengandung karakter “_”.
Maka kita bisa menggunakan logika dimana pola nya tidak cocok untuk email yang mengandung karakter “.” diikuti angka atau cocok dengan email yang mengandung karakter “.” diikuti angka dan mengandung karakter “_”. Polanya;
•
^((?!.\d).)*$) = Pola yang tidak mengandung karakter “.” diikuti angka.
•
| = “atau”
•
(?=.*) = Pola yang mengandung karakter “.”
Setelah mendapatkan polanya, gunakan fungsi looping,
Sertifikat
