Midterm Exam Data Science Programming I

1 . Members


Octavia

Nama Lengkap

Octavia Maia Do Rego

NIM

52250077


Carol

Nama Lengkap

Carol Dupino Pereira

NIM

52250051


Nabil

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%).

Section B — Data Quality Audit Report

Dataset mentah terdiri dari 10.000 baris dan 22 kolom. Audit ini mencakup deteksi duplikat, identifikasi missing values, dan validasi tipe data.

Total Baris: 10.000 Duplikat: 5.628 (56.3%) ✔ Unik: 4.372 Kolom: 22
1. Statistik Dimensi & Missing Values
2. Audit Tipe Data
3. Temuan & Rekomendasi

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
Audit Kuantitas Data: Identifikasi Duplikasi Antar File
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
Daftar Detail Aktivitas Data Cleaning (Section C)
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)
Table 2.1: Tabel Rekapitulasi Perubahan Data: Before vs After Cleaning
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 dengan case_when() atau if_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, fungsi summarise() 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:

🛒 Platform Distribution
🏷️ Category Insights
📋 Order Health

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
  1. Mendemonstrasikan kemampuan scraping menggunakan library rvest.

  2. Menerapkan logika pemrograman (Looping & Conditional) dalam pembersihan data.

  3. 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:

  1. 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.

  1. 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:
  1. Section A (Scraping): Proses pengambilan data mentah.

  2. Section B (Handling): Analisis struktur awal data.

  3. Section C (Cleaning): Standarisasi teks, penanganan missing values, dan penghapusan duplikat.

  4. Section D (Logic): Pemberian status validitas data (data_status).

  5. 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.

  1. 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() dan html_table()digunakan untuk mengekstrak jadual dan menggabungkannya ke dalam satu dataframe yang besar menggunakan bind_rows().

  1. 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
Hockey Teams — Scraped Database
Total Tim: 550 Rata-rata Wins: 36.7 Tahun: 1990 – 2010 File: data_hockey_20260427.csv
✔ 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
Table 3.1: Metadata Dataset 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
Table 3.1: Pemeriksaan Kualitas Data Hockey
Check Result
Missing Values (Total) 224
Data Duplikat 0
Table 3.1: Identifikasi Masalah Data - Hockey Teams
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
Table 3.2: Metadata Dataset Oscar Yearly
Metric Value
Jumlah Baris 87
Jumlah Kolom 3
Nama Kolom Movie Title, Year, Category
Tipe Data character, integer, character
Table 3.2: Pemeriksaan Kualitas Data Oscar
Check Result
Missing Values (Total) 81
Data Duplikat 0
Table 3.2: Identifikasi Masalah Data - Oscar Yearly
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 seperti Wins atau Year mungkin 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 dan toTitleCase() 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 Category diisi dengan label "Nominee".
  • Looping & Kondisional: Digunakan untuk memproses setiap baris secara mendalam guna memastikan validitas data.

3.3.2 .CLEANING DATASET HOCKEY TEAMS


 DATA CLEANING: HOCKEY TEAMS
Table 3.3: Dokumentasi Pembersihan: 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

Table 3.4: Dokumentasi Pembersihan: 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:

  1. Default Applied: Jika selama proses cleaning, sistem harus memberikan nilai default (seperti “Unknown Team” atau “Untitled Movie”) karena data asli tidak ditemukan.

  2. Incomplete: Jika data kunci seperti angka kemenangan (Wins) atau tahun (Year) bernilai 0 atau hilang, meskipun nama subjeknya ada.

  3. 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:

Table 3.5: Perbandingan Pendekatan Web Scraping
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):

  1. Struktur Web Dinamis: Dunia web modern semakin meninggalkan struktur statis. Kemampuan menganalisis request AJAX/JSON menjadi skill wajib bagi seorang Data Scientist.

  2. Kualitas Data vs Kuantitas: Mengambil ribuan data (scraping) itu mudah, namun memastikan data tersebut valid dan bersih (cleaning) adalah tantangan yang sesungguhnya. Kolom data_status di Section D membuktikan bahwa tidak semua data mentah bisa langsung dipercaya.

  3. Efisiensi Looping: Penggunaan looping yang tepat untuk menangani banyak kolom dan baris sekaligus terbukti mempercepat waktu pengerjaan dibandingkan melakukan pembersihan manual.

B. Rekomendasi:

  1. Penerapan Error Handling: Untuk pengembangan selanjutnya, disarankan menggunakan fungsi tryCatch() di R agar jika terjadi kegagalan koneksi pada satu halaman, script tidak berhenti total.

  2. 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.