Regular Expression
Ekspresi Reguler
Jika Anda belum membaca tentang web scraping disarankan Anda membaca terlebih dahulu artikel terkait web scraping disini
Idea dasar dari ekspresi reguler adalah kita mendefinisikan pola (ekspresi reguler atau “regex”) yang ingin kita cocokkan dalam sebuah string teks dan kemudian mencari dalam string untuk mengembalikan kecocokan. Beberapa pola ini terlihat agak aneh karena mereka mengandung konten yang ingin kita cocokkan dan karakter khusus yang mengubah cara pola diinterpretasikan. Ekspresi reguler sering muncul saat memecah informasi string dan merupakan alat penting yang perlu dipelajari setidaknya pada tingkat dasar!
Ada 3 informasi yang perlu kita ekstrak dari tabel teks:
- The names of the presidents
- The names of the colleges
- The salaries
Pertama, mari kita ekstrak nama. Dalam ekspresi reguler ini, saya memanfaatkan fakta bahwa setiap nama berada di awal baris dan diakhiri dengan koma. Kode di bawah ini membuat pola ekspresi reguler, kemudian mencari melalui string untuk menemukan semua kejadian pola tersebut:
# Create a pattern to match names
name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
# Find all occurrences of the pattern
names = name_pattern.findall(content)
Seperti yang saya katakan, polanya cukup kompleks, tetapi ia melakukan persis apa yang kita inginkan! Jangan khawatir tentang rincian pola, tetapi pikirkan tentang proses umumnya: pertama, tentukan pola, dan kemudian cari string untuk menemukan pola tersebut.
Kita mengulangi prosedur ini dengan perguruan tinggi dan gaji:
# Make school patttern and extract schools
school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
# Pattern to match the salaries
salary_pattern = re.compile(r'\$.+')
salaries = salary_pattern.findall(content)
Sayangnya, gaji ditulis dalam format yang tidak bisa dimengerti sebagai angka oleh komputer. Untungnya, ini memberi kita kesempatan untuk berlatih menggunakan list comprehension Python untuk mengubah gaji-gaji dalam bentuk string menjadi angka. Kode berikut ini mengilustrasikan bagaimana menggunakan string slicing, split, dan join, semua dalam satu list comprehension untuk mencapai hasil yang kita inginkan:
# Messy salaries
salaries = ['$876,001', '$543,903', '$2453,896']
# Convert salaries to numbers in a list comprehension
[int(''.join(s[1:].split(','))) for s in salaries]
[876001, 543903, 2453896]
Kita menerapkan transformasi ini pada gaji-gaji kami dan akhirnya mendapatkan semua informasi yang kita inginkan. Mari masukkan semua ini ke dalam dataframe pandas. Pada titik ini, saya secara manual memasukkan informasi untuk perguruan tinggi saya (CWRU) karena tidak ada dalam tabel utama. Penting untuk mengetahui kapan lebih efisien melakukan sesuatu secara manual daripada menulis program yang rumit (walaupun seluruh artikel ini agak melawan pandangan ini!).
Pingback: Web Scraping, Ekspresi Reguler, dan Visualisasi Data – Roniwahyu.com