Midterm Exam Data Science Programming I
1 . Members
Nama Lengkap
Octavia Maia Do Rego
NIM
52250077
Nama Lengkap
Carol Dupino Pereira
NIM
52250051
Nama Lengkap
Muhammad Nabil Khairil Anam
NIM
52250062
2 .Mini Project: CASE STUDY E-Commerce
2.1 .SECTION A – DATA COLLECTION USING PROGRAMMING
Tahap ini bertujuan untuk mengotomatisasi proses pengambilan data dari berbagai format file seperti:
- CSV:
pd.read_csv() - Excel:
pd.read_excel() - JSON:
pd.read_json() - TXT:
pd.read_table() atau open().read() - XML:
pd.read_xml()
Dan menggabungkannya ke dalam satu repositori data yang konsisten menggunakan bahasa pemrograman R. Proses pengolahan data dilakukan dengan menerapkan tiga prinsip utama pemrograman:
- Otomatisasi dengan Mekanisme Looping (for loop)
Sistem dirancang untuk membaca minimal 5 file berbeda (CSV, Excel, JSON, TXT, dan XML) secara otomatis.
Fungsi: Menggunakan iterasi untuk memproses daftar file tanpa perlu menulis kode manual untuk setiap file.
Kelebihan: Mengurangi risiko human error dan meningkatkan efisiensi waktu pemrosesan metadata (jumlah baris, kolom, dan nama kolom) secara real-time.
- Kontrol Kualitas dengan Logika Percabangan (if-else) Sebelum penggabungan dilakukan, sistem menjalankan fungsi audit struktur untuk menjaga integritas data.
Pengecekan Struktur: Sistem membandingkan susunan kolom setiap file baru terhadap file acuan (base reference).
Klasifikasi Status:
Ready to merge: Diberikan jika struktur kolom identik secara urutan dan nama, sehingga aman untuk digabungkan.
Need adjustment: Diberikan jika ditemukan perbedaan struktur, bertujuan untuk mencegah terjadinya error atau data yang tidak sejajar (misaligned) pada dataset utama.
- Sinkronisasi dan Penggabungan Data Data yang telah dinyatakan valid kemudian dikumpulkan ke dalam sebuah list objek dan disatukan menggunakan fungsi penggabungan baris.
Penyeragaman Tipe: Seluruh kolom dikonversi menjadi tipe character sementara untuk memastikan proses penggabungan tidak terhambat oleh perbedaan format data mentah.
- Implementasi Logika Kode
| Fungsi / Logika | Deskripsi Implementasi |
for (file in file_list) |
Melakukan iterasi otomatis pada setiap sumber data yang tersedia. |
tryCatch() |
Menangani kesalahan pembacaan file secara aman tanpa menghentikan seluruh program. |
identical() |
Memvalidasi kesamaan struktur kolom antar file secara presisi. |
if-else |
Menentukan alur eksekusi berdasarkan kecocokan struktur data. |
bind_rows() |
Menggabungkan seluruh sub-dataset menjadi satu kesatuan data yang utuh. |
2.2 .SECTION B – DATA HANDLING
Tahap ini bertujuan untuk melakukan audit menyeluruh terhadap kesehatan dataset setelah proses penggabungan dari berbagai format file. Berikut adalah hasil identifikasi kualitas data:
Dimensi Dataset & Tipe Data Langkah awal adalah memahami profil dasar dataset gabungan.
Jumlah Baris & Kolom: Dataset memiliki 10.000 baris mentah dengan 22 kolom.
Tipe Data: Melalui audit tipe data, ditemukan bahwa seluruh kolom (100%) bertipe character. Secara teknis, ini terjadi karena penggabungan paksa (string coercion) agar berbagai format file (JSON, XML, CSV) dapat bersatu tanpa error. Namun, secara fungsional, kolom numerik dan tanggal perlu diperbaiki di tahap selanjutnya.
Identifikasi Masalah Utama (Missing Values & Duplicates) Melalui dashboard audit, ditemukan anomali sebagai berikut:
Duplicate Rows: Terdeteksi 5.628 baris duplikat (56.3%).
Analisis: Tingginya angka ini disebabkan oleh redundansi sumber data (5 file dengan isi serupa yang digabung). Namun, hasil audit mendalam menunjukkan adanya 45 duplikat transaksi murni yang merupakan anomali input asli.
Missing Values:
customer_rating: 2.030 data kosong (20.3%).ship_date: 1.000 data kosong (10%).priority_flag: 940 data kosong (9.4%).
Dataset mentah terdiri dari 10.000 baris dan 22 kolom. Audit ini mencakup deteksi duplikat, identifikasi missing values, dan validasi tipe data.
2.3 .SECTION C – DATA CLEANING
| No | Langkah Pembersihan | Deskripsi Singkat |
| 1 | Deduplikasi | Menghapus redundansi teknis dari penggabungan 5 sumber file menggunakan fungsi distinct(). |
| 2 | Normalisasi Teks | Melakukan trimming spasi dan menyeragamkan kapitalisasi (Proper Case) pada kolom Platform, Kategori, dan Status. |
| 3 | Pembersihan Numerik | Menghapus simbol ‘Rp’ dan titik ribuan agar kolom keuangan dapat dikonversi menjadi tipe Numeric. |
| 4 | Handling Missing Values | Mengisi data kosong (imputasi) dengan nilai default (contoh: Rating diisi 5.0 dan Status menjadi Unknown). |
| 5 | Casting Tipe Data | Mengubah tipe data kolom dari Character menjadi Numeric atau Date untuk kebutuhan analisis statistik. |
| 6 | Penyelarasan Label | Menggabungkan variasi penulisan yang serupa (seperti “tokped” menjadi “Tokopedia”) agar data konsisten. |
=== MEMULAI PROSES PEMBERSIHAN DATA ===
✔ Selesai. Total baris unik: 2571 | Kolom: 22
| Keterangan | Jumlah_Data |
|---|---|
| Total Baris Setelah Penggabungan (5 File x 2000) | 10000 |
| Total Baris Unik Setelah Cleaning (De-duplication) | 2571 |
| Jumlah Baris Duplikat yang Dibuang | 7429 |
| No | Kolom_Target | Masalah_Ditemukan | Logika_Pembersihan |
|---|---|---|---|
| 1 | Platform | Inkonsistensi nama (tokped, shopee, bibli, blibli) & huruf kecil | Standardisasi ke ‘Tokopedia’, ‘Shopee’, ‘Blibli’ menggunakan IF |
| 2 | Category | Huruf pertama kategori masih huruf kecil (e.g., home living) | Transformasi huruf pertama menjadi Kapital (Proper Case) |
| 3 | Discount Value | Terdapat simbol ‘Rp’, titik ribuan, dan nilai negatif | Regex untuk hapus Rp/titik, ubah ke numerik, & IF untuk nilai < 0 menjadi 0 |
| 4 | Payment Method | Ada data kosong (NA/NULL) dan penulisan ‘cod’ huruf kecil | IF kosong diubah ke ‘Unknown’, IF ‘cod’ diubah ke ‘COD’ (Caps) |
| 5 | Order Status | Status tidak seragam (delivered, completed, cancel) | Standardisasi menjadi ‘Completed’ dan ‘Cancelled’ |
| 6 | Customer Rating | Terdapat data kosong (Missing Values) | Pengisian nilai default 5.0 (Asumsi kepuasan pelanggan standar) |
| Aspek Audit | Kondisi Sebelum (Mentah) | Kondisi Sesudah (Bersih) |
|---|---|---|
| Jumlah Baris (Rows) | 10.000 | 2.571 |
| Status Duplikasi | 5.628 Baris Terdeteksi (Redundansi File) | 0 Duplikat (Clean & Unique) |
| Kondisi Tipe Data | Semua Kolom ‘Character’ | Terstruktur (Numeric/Date/Char) |
| Missing Values (Rating) | 2.030 Data Kosong (NA) | 0 (Imputasi Nilai Default 5.0) |
| Format Nama Platform | Bervariasi (tokped, shopee, dll) | Standard (Tokopedia, Shopee, dll) |
2.4 .SECTION D – CONDITIONAL LOGIC
Tahap ini bertujuan untuk mentransformasi dataset yang telah bersih menjadi informasi strategis melalui penerapan logika pemrograman dan teknik agregasi. Berikut adalah tahapan manipulasi data yang dilakukan:
Penerapan Conditional Logic : Menggunakan fungsi
mutate()yang dikombinasikan dengancase_when()atauif_else(), dibuat kolom indikator baru untuk memberikan label pada data berdasarkan kriteria tertentu. Secara teknis, logika ini mengubah variabel kuantitatif (angka) menjadi variabel kualitatif (kategori), seperti mengklasifikasikan transaksi ke dalam kategori “High Revenue” atau “Low Revenue”. Hal ini memudahkan identifikasi performa secara instan tanpa harus menganalisis angka satu per satu.Agregasi Data : Melalui fungsi
group_by(), data dikelompokkan berdasarkan dimensi strategis seperti Platform dan Category. Selanjutnya, fungsisummarise()digunakan untuk menghitung nilai agregat seperti total pendapatan (sum) dan volume transaksi (n). Proses ini berhasil meringkas ribuan baris data unik menjadi tabel ringkasan (summary table) yang padat informasi dan siap untuk dipresentasikan.Optimasi Pengurutan : Menggunakan fungsi
arrange(desc()), data diurutkan berdasarkan kontributor pendapatan terbesar. Pengurutan ini berfungsi untuk menyoroti entitas yang memiliki dampak paling signifikan terhadap bisnis (Pareto Principle), sehingga fokus analisis langsung tertuju pada platform atau produk yang memberikan nilai ekonomi tertinggi.Transformasi Skala Data: Dilakukan penambahan kolom perhitungan persentase atau rasio menggunakan fungsi
mutate()untuk melihat proporsi kontribusi setiap kategori terhadap total keseluruhan. Langkah ini memberikan perspektif perbandingan yang lebih adil (fair comparison) antar platform yang memiliki skala transaksi berbeda.
✔ Kolom logika bisnis berhasil ditambahkan ke 2571 baris data.
2.5 .SECTION E – ANALYTICAL THINKING
Tahap akhir ini merupakan fase interpretasi mendalam terhadap hasil olahan data serta evaluasi kritis mengenai metodologi pengumpulan data mentah. Berikut adalah poin-poin analisis utama:
2.5.1 . Platform Dominan
Dari seluruh data transaksi yang tersedia, Shopee tampil sebagai platform paling unggul dengan mencatatkan 2.080 transaksi. Angka ini membuktikan bahwa Shopee menjadi saluran penjualan utama yang paling banyak digunakan dibandingkan platform-platform lainnya.
2.5.2 . Kategori Terpopuler
Produk dengan kategori Fashion mendominasi transaksi dengan kemunculan sebanyak 2.100 kali. Tingginya angka ini mengindikasikan bahwa barang-barang fashion paling banyak diminati dan dibeli oleh para pelanggan. Meski kategori “Home_living” turut hadir sebagai kompetitor, Fashion tetap menempati posisi teratas secara mutlak.
2.5.3 . Status Transaksi Terbanyak
Sebagian besar transaksi berstatus Completed, yakni sebanyak 7.900 transaksi. Capaian ini mencerminkan performa operasional yang solid, di mana hampir seluruh pesanan berhasil diproses dan diselesaikan dengan baik hingga akhir.
3 . Web Scraping & Data Programming Process
Proyek ini merupakan implementasi teknik Web Scraping dan Data Cleaning menggunakan bahasa pemrograman R. Fokus utama dari tugas ini adalah mengambil data dari dunia nyata (web) dan mengubahnya menjadi dataset yang siap untuk dianalisis.
- Tujuan Proyek
Mendemonstrasikan kemampuan scraping menggunakan library rvest.
Menerapkan logika pemrograman (Looping & Conditional) dalam pembersihan data.
Mengelola berbagai format data dari website dengan struktur yang berbeda (Statis & Dinamis).
- Website Target
Dalam tugas ini, saya memilih dua website dengan karakteristik teknis yang berbeda untuk menunjukkan variasi pendekatan:
- Website 1: Hockey Teams (Scrapethissite) Karakteristik: Menggunakan metode Pagination.
Tujuan: Mengambil data statistik tim hockey dari berbagai tahun. Website ini memerlukan teknik looping melalui parameter URL untuk berpindah dari satu halaman ke halaman lainnya.
- Website 2: Oscar Yearly Winners (AJAX/JSON) Karakteristik: Menggunakan metode AJAX/Dinamis.
Tujuan: Mengambil daftar film pemenang dan nominasi Oscar. Website ini menantang karena datanya tidak muncul secara langsung di HTML utama, melainkan dimuat di latar belakang melalui request khusus.
- Laporan ini disusun menjadi beberapa tahapan utama:
Section A (Scraping): Proses pengambilan data mentah.
Section B (Handling): Analisis struktur awal data.
Section C (Cleaning): Standarisasi teks, penanganan missing values, dan penghapusan duplikat.
Section D (Logic): Pemberian status validitas data (data_status).
Section E (Thinking): Analisis kritis terhadap proses yang telah dilakukan.
3.1 .SECTION A – DATA COLLECTION USING PROGRAMMING
Pada fasa ini, pengambilan data dilakukan daripada dua sumber yang mempunyai struktur teknikal yang berbeza. Fokus utama adalah untuk menunjukkan fleksibiliti penggunaan library rvest dalam menangani pelbagai senario web.
- Website: Hockey Teams
Penerangan: Laman web ini memaparkan data statistik pasukan hoki dalam format jadual. Cabaran utama di sini adalah data tersebut dipecahkan kepada banyak halaman (pagination).
Pendekatan Teknikal:
Analisis URL: URL laman web ini menggunakan parameter yang konsisten, contohnya
?page_num=1,?page_num=2, dan seterusnya.Looping: Saya menggunakan fungsi looping untuk menjana URL secara automatik bagi setiap halaman.
Scraping: Dalam setiap pusingan loop, fungsi
read_html()danhtml_table()digunakan untuk mengekstrak jadual dan menggabungkannya ke dalam satu dataframe yang besar menggunakanbind_rows().
- Website: Oscar Yearly Winners
Penerangan: Berbeda dengan laman web pertama, laman web Oscar menggunakan teknologi AJAX. Ini bermakna data tidak tertanam secara langsung dalam kod HTML asal yang kita lihat. Data hanya akan dimuatkan apabila pengguna berinteraksi dengan laman web atau melalui permintaan (request) latar belakang.
Pendekatan Teknikal:
Network Analysis: Melalui alat Inspect Element di bahagian Network Tab, saya mengenal pasti endpoint atau URL rahsia yang menghantar data tersebut.
AJAX Request Simulation: Scraping dilakukan dengan terus mensasarkan URL endpoint tersebut yang biasanya mengembalikan data dalam format yang lebih bersih atau terstruktur.
Handling: Kerana struktur data ini mungkin berbeza setiap tahun, kod direka untuk menyisir setiap tahun pemenang dan menyimpannya ke dalam senarai sebelum digabungkan untuk pembersihan.
3.1.1 . Hockey Teams.
▶ Halaman 1 | +25 baris | Kumulatif: 25 baris
▶ Halaman 2 | +25 baris | Kumulatif: 50 baris
▶ Halaman 3 | +25 baris | Kumulatif: 75 baris
▶ Halaman 4 | +25 baris | Kumulatif: 100 baris
▶ Halaman 5 | +25 baris | Kumulatif: 125 baris
▶ Halaman 6 | +25 baris | Kumulatif: 150 baris
▶ Halaman 7 | +25 baris | Kumulatif: 175 baris
▶ Halaman 8 | +25 baris | Kumulatif: 200 baris
▶ Halaman 9 | +25 baris | Kumulatif: 225 baris
▶ Halaman 10 | +25 baris | Kumulatif: 250 baris
▶ Halaman 11 | +25 baris | Kumulatif: 275 baris
▶ Halaman 12 | +25 baris | Kumulatif: 300 baris
▶ Halaman 13 | +25 baris | Kumulatif: 325 baris
▶ Halaman 14 | +25 baris | Kumulatif: 350 baris
▶ Halaman 15 | +25 baris | Kumulatif: 375 baris
▶ Halaman 16 | +25 baris | Kumulatif: 400 baris
▶ Halaman 17 | +25 baris | Kumulatif: 425 baris
▶ Halaman 18 | +25 baris | Kumulatif: 450 baris
▶ Halaman 19 | +25 baris | Kumulatif: 475 baris
▶ Halaman 20 | +25 baris | Kumulatif: 500 baris
▶ Halaman 21 | +25 baris | Kumulatif: 525 baris
▶ Halaman 22 | +25 baris | Kumulatif: 550 baris
✖ Halaman 23 tidak dapat diakses. Scraping dihentikan.
✔ Data disimpan → Hasil_Scraping_Hockey_Teams/data_hockey_20260427.csv
✔ Total baris bersih : 550
✔ Rentang tahun : 1990 – 2010
✔ Sinkronisasi selesai. df_final_clean = 550 baris
3.1.2 . Oscar Yearly Winners
Memulai scraping dan penyimpanan data… Tahun 2010 selesai diproses dan disimpan.Tahun 2011 selesai diproses dan disimpan.Tahun 2012 selesai diproses dan disimpan.Tahun 2013 selesai diproses dan disimpan.Tahun 2014 selesai diproses dan disimpan.Tahun 2015 selesai diproses dan disimpan.
Menampilkan Tabel Tahun: 2010
Menampilkan Tabel Tahun: 2011
Menampilkan Tabel Tahun: 2012
Menampilkan Tabel Tahun: 2013
Menampilkan Tabel Tahun: 2014
Menampilkan Tabel Tahun: 2015
3.2 .SECTION B – DATA HANDLING
Tujuan dari tahap ini adalah untuk melakukan inspeksi awal terhadap struktur data hasil scraping. Dengan memahami kualitas data mentah, kita dapat menentukan strategi pembersihan yang tepat pada tahap berikutnya.
3.2.1 .DATASET HOCKEY TEAMS
3.2.2 1. Metadata & Kualitas Data: Hockey Teams
Penjelasan: Data Hockey yang diambil melalui metode pagination seringkali memiliki tantangan pada konsistensi jumlah baris per halaman dan kemungkinan adanya tim yang tidak memiliki data statistik lengkap pada tahun tertentu.
1. Struktur Data & Kualitas: Hockey Teams
| Metric | Value |
|---|---|
| Jumlah Baris | 550 |
| Jumlah Kolom | 8 |
| Nama Kolom | Team Name, Year, Wins, Losses, OT Losses, Points %, Win Rate, Era |
| Tipe Data | character, integer, integer, integer, integer, numeric, numeric, character |
| Check | Result |
|---|---|
| Missing Values (Total) | 224 |
| Data Duplikat | 0 |
| No | Issue | Deskripsi |
|---|---|---|
| 1 | Tipe Data Numerik Terbaca String | Kolom seperti Wins/Losses sering terbaca sebagai karakter karena format HTML. |
| 2 | Missing Values pada Statistik Tertentu | Beberapa tim lama tidak memiliki data statistik Gol yang lengkap. |
3.2.3 .DATASET OSCAR YEARLY
3.2.4 2. Metadata & Kualitas Data: Oscar Yearly
Penjelasan: Data Oscar yang diambil via AJAX memiliki karakteristik unik di mana kolom Category biasanya hanya berisi data untuk pemenang (Winner), sedangkan baris lainnya bernilai kosong atau NA. Ini adalah hal yang akan divalidasi di tahap ini.
2. Struktur Data & Kualitas: Oscar Yearly
| Metric | Value |
|---|---|
| Jumlah Baris | 87 |
| Jumlah Kolom | 3 |
| Nama Kolom | Movie Title, Year, Category |
| Tipe Data | character, integer, character |
| Check | Result |
|---|---|
| Missing Values (Total) | 81 |
| Data Duplikat | 0 |
| No | Issue | Deskripsi |
|---|---|---|
| 1 | Class Imbalance | Jumlah Nominee jauh lebih banyak dibanding Winner, menyebabkan data tidak seimbang. |
| 2 | Redundansi Informasi Tahun | Kolom tahun berulang untuk setiap entri film, memerlukan normalisasi data. |
3.2.5 Poin Penting:
Inspeksi
str(): Fungsi ini penting untuk menunjukkan bahwa kolom sepertiWinsatauYearmungkin masih terbaca sebagai Character (teks), yang mana ini menjadi alasan kuat kenapa kita butuh Section C (Cleaning) nanti.Identifikasi Masalah: Di tabel Oscar, kita sengaja menghitung
Missing Category. Kamu bisa jelaskan bahwa “Banyaknya missing value pada kolom Category bukan berarti data rusak, melainkan karena website hanya menandai pemenang saja.”
3.3 .SECTION C – DATA CLEANING
Membersihkan dataset dari inkonsistensi teks, menangani nilai yang hilang (missing values), memastikan tipe data yang tepat, dan menghapus duplikasi data.
3.3.1 1. Strategi Pembersihan :
Standardisasi Teks: Menggunakan
trimws()untuk menghapus spasi liar dantoTitleCase()agar format teks konsisten (Proper Case).Penanganan Missing Value: Pada Hockey, nilai numerik yang hilang diisi dengan
0(asumsi tidak ada skor/kemenangan).- Pada Oscar, baris yang kosong pada kolom
Categorydiisi dengan label"Nominee".
- Pada Oscar, baris yang kosong pada kolom
Looping & Kondisional: Digunakan untuk memproses setiap baris secara mendalam guna memastikan validitas data.
3.3.2 .CLEANING DATASET HOCKEY TEAMS
DATA CLEANING: HOCKEY TEAMS
| Aspek | Tindakan |
|---|---|
| Standardisasi Teks | Trim & Title Case |
| Penanganan Missing Value | Diisi 0 (Default) |
| Tipe Data | Converted to Numeric |
| Duplikat | Dihapus via distinct() |
Tabel Data Hockey Teams (Cleaned)
3.3.3 .CLEANING DATASET: OSCAR YEARLY
| Aspek | Tindakan |
|---|---|
| Standardisasi Teks | Trim Spasi |
| Penanganan Missing Value | Diisi ‘Nominee’ (Default) |
| Tipe Data | Converted to Integer |
| Duplikat | Dihapus via distinct() |
3.4 .SECTION D – CONDITIONAL LOGIC
3.4.1 . CONDITIONAL LOGIC : HOCKEY TEAMS
Mengimplementasikan logika pengambilan keputusan (Conditional Logic) untuk menilai kualitas data hasil scraping dan cleaning.
Kriteria Penilaian Status:
Default Applied: Jika selama proses cleaning, sistem harus memberikan nilai default (seperti “Unknown Team” atau “Untitled Movie”) karena data asli tidak ditemukan.
Incomplete: Jika data kunci seperti angka kemenangan (
Wins) atau tahun (Year) bernilai 0 atau hilang, meskipun nama subjeknya ada.Complete: Jika semua elemen data (Nama, Angka, Tahun) tersedia, valid, dan bukan merupakan nilai default.
CONDITIONAL LOGIC: HOCKEY TEAMS
3.4.2 .CONDITIONAL LOGIC : OSCAR YEARLY
CONDITIONAL LOGIC: OSCAR YEARLY
3.5 SECTION E – ANALYTICAL THINKING
Melakukan evaluasi kritis terhadap metodologi pengumpulan data dan teknologi web yang dihadapi selama pengerjaan proyek.
1. Evaluasi Tingkat Kesulitan Website
| Pertanyaan | Jawaban | Alasan Teknis |
| Website Paling Mudah? | Hockey Teams | Strukturnya bersifat statis dan pola halamannya (pagination) sangat mudah terbaca melalui parameter URL. |
| Website Paling Sulit? | Oscar Yearly | Menggunakan teknologi AJAX yang memuat data secara dinamis. Data tidak terlihat di Source Code awal, sehingga perlu analisis Network Traffic. |
2. Perbandingan Pendekatan Scraping
Berikut adalah rangkuman perbedaan pendekatan yang diimplementasikan dalam proyek ini:
| Pendekatan | Mekanisme_Utama | Kelebihan | Tantangan |
|---|---|---|---|
| Static Scraping | Mengambil data langsung dari source code HTML saat pertama kali dimuat. | Sangat cepat, hemat resource, dan kode simpel (rvest). | Tidak bisa mengambil data interaktif (klik/scroll). |
| Pagination | Navigasi otomatis melalui urutan halaman menggunakan looping pada parameter URL. | Memungkinkan pengambilan Big Data secara terstruktur. | Harus teliti menentukan pola URL agar loop tidak crash. |
| AJAX | Data dimuat secara asinkron di latar belakang tanpa refresh halaman. | Data seringkali lebih bersih karena berasal dari API internal (JSON). | Sulit ditemukan, harus analisis Network Traffic di Inspect Element. |
| iFrame | Data ditampilkan melalui dokumen HTML lain yang tertanam di dalam halaman utama. | Memisahkan konten utama dengan modul eksternal secara rapi. | URL utama tidak berisi data; harus mencari Source URL asli iFrame. |
3. Insights & Rekomendasi
A. Insights (Temuan Penting):
Struktur Web Dinamis: Dunia web modern semakin meninggalkan struktur statis. Kemampuan menganalisis request AJAX/JSON menjadi skill wajib bagi seorang Data Scientist.
Kualitas Data vs Kuantitas: Mengambil ribuan data (scraping) itu mudah, namun memastikan data tersebut valid dan bersih (cleaning) adalah tantangan yang sesungguhnya. Kolom
data_statusdi Section D membuktikan bahwa tidak semua data mentah bisa langsung dipercaya.Efisiensi Looping: Penggunaan looping yang tepat untuk menangani banyak kolom dan baris sekaligus terbukti mempercepat waktu pengerjaan dibandingkan melakukan pembersihan manual.
B. Rekomendasi:
Penerapan Error Handling: Untuk pengembangan selanjutnya, disarankan menggunakan fungsi
tryCatch()di R agar jika terjadi kegagalan koneksi pada satu halaman, script tidak berhenti total.Etika Data (Rate Limiting): Selalu gunakan jeda waktu (
Sys.sleep()) saat melakukan scraping massal agar tidak membebani server target dan menghindari pemblokiran alamat IP.
3.6 .FINAL REPORT: RINGKASAN PROYEK
Sebagai penutup dari seluruh rangkaian proses scraping dan cleaning data, berikut adalah ringkasan teknis dan manajerial dari proyek ini:
3.6.1 . Metode Scraping yang Digunakan
Dalam proyek ini, saya mengimplementasikan dua metode utama:
Automated Pagination: Digunakan pada dataset Hockey untuk menyisir puluhan halaman secara otomatis melalui manipulasi parameter URL.
AJAX Endpoint Traversal: Digunakan pada dataset Oscar untuk mengambil data dinamis yang tersembunyi di balik lalu lintas jaringan (Network Traffic), memastikan data tetap bisa diambil meskipun tidak terlihat di HTML statis.
3.6.2 . Implementasi Logika (If-Else & Looping)
Logika pemrograman menjadi tulang punggung dalam pemrosesan data ini:
Looping: Digunakan secara efisien untuk melakukan scraping antar halaman (Loop Baris) dan membersihkan banyak kolom sekaligus (Loop Kolom).
If-Else: Digunakan sebagai filter validasi. Logika ini memastikan bahwa setiap data yang kosong diberikan nilai default yang masuk akal dan setiap baris diberikan label status (
Complete/Incomplete) berdasarkan kriteria kualitas tertentu.
3.6.3 . Kendala yang Dihadapi
Data Latency: Pada website Oscar, data tidak langsung muncul, sehingga memerlukan waktu tambahan untuk menganalisis XHR/Fetch requests.
Inkonsistensi Format: Ditemukannya spasi liar dan perbedaan penggunaan huruf kapital pada data mentah yang cukup masif, yang jika tidak ditangani dengan looping pembersihan akan merusak hasil visualisasi nantinya.
3.6.4 . Insight Utama
Scraping adalah Langkah Awal: Keberhasilan sebuah proyek data bukan terletak pada seberapa banyak data yang diambil, melainkan pada seberapa bersih data tersebut setelah diproses.
Adaptabilitas Kode: Kode yang dibangun dengan looping dan if-else jauh lebih tangguh menghadapi perubahan struktur data dibandingkan pembersihan manual.
Pentingnya Audit Data: Penambahan kolom status kualitas data memberikan transparansi bagi pengguna data mengenai bagian mana yang bisa diandalkan dan bagian mana yang memerlukan pengecekan manual.