Penetapan Lingkup Proyek

Memilih dataset nyata dan merumuskan pertanyaan analitis.

Daftar isi

Seluruh alat pada jalur ini, mulai dari readr sampai ggplot2, baru menjadi bermanfaat ketika disusun dalam satu proyek yang lingkupnya terkendali. Topik ini membahas tahap persiapan pengerjaan proyek analisis data, yaitu memilih dataset, merumuskan pertanyaan analitis yang dapat diuji, memetakan pertanyaan ke alat kerja, dan menata struktur folder proyek. Seluruh tahapan diperagakan pada satu proyek latihan berupa rekap nilai ujian dua sekolah selama empat semester, dan proyek yang sama dikerjakan sampai tuntas pada topik Analisis Lengkap.

Memilih dataset untuk proyek pertama#

Dataset untuk proyek pertama dinilai dari tiga sisi, yaitu kesesuaian dengan pertanyaan, ukuran yang masih terbaca manusia, dan kualitas kolom. Kesesuaian berarti setiap variabel yang disebut pertanyaan tersedia sebagai kolom, sehingga analisis tidak berhenti karena data yang dibutuhkan ternyata tidak ada. Ukuran yang terbaca manusia berarti tabel masih dapat diperiksa sepintas, kira-kira ratusan hingga beberapa ribu baris, sehingga kesalahan pengisian data dapat ditemukan tanpa alat bantu. Kualitas kolom mencakup tipe yang konsisten, nilai hilang yang diketahui penyebabnya, dan nama kolom yang menjelaskan isinya.

Rekap nilai ujian sekolah memenuhi ketiga sisi tersebut. Kolomnya berisi sekolah, kelas, semester, dan nilai, sehingga pertanyaan tentang perbandingan atau tren nilai langsung dapat dijawab. Tabelnya berukuran 128 baris, cukup untuk memodelkan tren tetapi masih kecil untuk diperiksa baris demi baris. Tipe kolomnya juga sederhana, yaitu dua kolom teks dan dua kolom angka, sebagaimana diperlihatkan laporan impor pada bagian Menyiapkan data latihan.

Merumuskan pertanyaan analitis#

Pertanyaan analitis adalah pertanyaan yang jawabannya berupa angka yang dihitung dari kolom data, bukan pendapat yang dikemukakan atas data. Pertanyaan semacam ini memiliki tiga ciri, yaitu menyebut variabel yang tersedia di dalam data, berbentuk perbandingan, tren, atau hubungan, dan menghasilkan jawaban yang dapat dilaporkan dalam satu kalimat. Pertanyaan terbuka seperti bagaimana kondisi pembelajaran di sebuah sekolah tidak memenuhi ketiganya, karena tidak menyebut variabel apa pun dan tidak memiliki titik selesai, sehingga analisisnya mudah melebar ke mana-mana.

Proyek latihan ini memakai satu pertanyaan, yaitu apakah rata-rata nilai ujian meningkat dari semester ke semester dan seberapa besar kenaikannya. Pertanyaan tersebut menyebut dua variabel yang tersedia sebagai kolom, yaitu nilai dan semester. Bentuknya berupa tren antarsemester, dan jawabannya berupa angka kenaikan per semester yang dapat diestimasi dengan regresi linear. Satu pertanyaan yang tajam sudah cukup untuk proyek pertama, karena seluruh langkah analisis dapat diarahkan untuk menjawabnya dari awal sampai akhir.

Memetakan pertanyaan ke alat kerja#

Setiap tahap analisis dipetakan ke alat kerjanya agar pengerjaan berurutan dan setiap langkah memiliki keluaran yang jelas. Alur kerja tidyverse menyediakan pemetaan yang lazim, yaitu impor data dengan readr, perapian dan peringkasan dengan dplyr, visualisasi dengan ggplot2, pemodelan dengan fungsi lm(), dan komunikasi hasil melalui grafik atau dokumen Quarto. Tabel berikut menerapkan pemetaan itu pada pertanyaan proyek.

TahapTugas pada proyek iniKeluaran
ImporMembaca berkas CSV rekap nilai menjadi tibbleTabel data siap olah
Rapikan dan ringkasMenghitung rata-rata nilai per kelas per semesterTabel ringkasan 16 baris
VisualisasikanMenggambar tren rata-rata antarsemesterGrafik garis per sekolah
ModelkanMengestimasi kenaikan per semester dengan lm(nilai ~ semester)Koefisien model dan R-squared
KomunikasikanMenyimpan grafik dan menuliskan kesimpulanBerkas SVG dan ringkasan teks

Pemetaan tersebut sekaligus menjadi daftar periksa pengerjaan. Kemajuan proyek dapat dinilai dari banyaknya tahap yang keluarannya sudah ada, tanpa perlu membaca seluruh kodenya. Apabila satu tahap ternyata membutuhkan data lain, lingkup pertanyaan ditinjau ulang sebelum kode ditulis, bukan sesudah analisis setengah jadi. Urutan tahap juga boleh berulang, karena grafik pertama sering menyingkap perapian data yang belum selesai.

Struktur folder proyek#

Struktur folder proyek memisahkan data mentah, skrip, dan hasil analisis agar pekerjaan dapat diulang tanpa kebingungan. Struktur minimal proyek ini terdiri atas folder data/ untuk berkas data, folder output/ untuk grafik dan laporan, serta skrip R pada folder akarnya. Kerangkanya dibuat dengan dir.create(), sedangkan file.path() merangkai nama folder menjadi jalur yang benar pada semua sistem operasi.

r Membuat kerangka folder proyek
dir.create("proyek-nilai", showWarnings = FALSE)
dir.create(file.path("proyek-nilai", "data"), showWarnings = FALSE)
dir.create(file.path("proyek-nilai", "output"), showWarnings = FALSE)
list.dirs("proyek-nilai", recursive = TRUE)
text Keluaran
[1] "proyek-nilai"        "proyek-nilai/data"   "proyek-nilai/output"

Fungsi dir.create() berasal dari base R, sehingga tidak memerlukan pemuatan paket apa pun, dan argumen showWarnings = FALSE membuat pemanggilan ulang tidak menimbulkan pesan error ketika folder sudah ada. Daftar hasil list.dirs() menegaskan hierarki yang terbentuk, yaitu folder proyek-nilai berisi data/ dan output/. Pemisahan ini bukan sekadar kerapian, melainkan dasar dari reprodusibilitas (reproducibility), yaitu kepastian bahwa menjalankan ulang skrip pada data mentah yang sama selalu menghasilkan angka dan grafik yang sama. Berkas pada folder data/ berperan sebagai sumber kebenaran yang tidak pernah disunting langsung, sedangkan seluruh berkas pada output/ bersifat regeneratif dan boleh dihapus kapan saja karena skrip membuatnya kembali.

Menyiapkan data latihan#

Data latihan proyek dibuat sintetis agar setiap pembaca bekerja pada angka yang persis sama. Pembuatannya dimulai dari penugasan seed melalui set.seed(), dilanjutkan penyusunan tabel dengan expand_grid() yang mengombinasikan dua sekolah, dua kelas, empat semester, dan delapan siswa menjadi 128 baris. Nilai setiap siswa ditiru dari nilai pangkal sekolah dan kelasnya, ditambah tren kenaikan dua poin per semester serta variasi acak yang menyerupai perbedaan antarsiswa, kemudian ditulis ke berkas CSV dengan write_csv().

r Memuat tidyverse
library(tidyverse)
text Keluaran
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.1     ✔ readr     2.2.0
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.3     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
r Menulis berkas data rekap nilai ujian
set.seed(23)
rekap <- expand_grid(
  sekolah  = c("SMP Harapan", "SMP Nusantara"),
  kelas    = c("7A", "7B"),
  semester = 1:4,
  siswa    = 1:8
) |>
  mutate(
    pangkal = if_else(sekolah == "SMP Harapan", 76, 72) +
              if_else(kelas == "7B", 1.5, 0),
    nilai   = round(pangkal + 2.0 * (semester - 1) +
                      rnorm(n(), mean = 0, sd = 6), 1)
  ) |>
  select(sekolah, kelas, semester, nilai)
write_csv(rekap, file.path("proyek-nilai", "data", "rekap-nilai.csv"))
rekap
text Keluaran
# A tibble: 128 × 4
   sekolah     kelas semester nilai
   <chr>       <chr>    <int> <dbl>
 1 SMP Harapan 7A           1  77.2
 2 SMP Harapan 7A           1  73.4
 3 SMP Harapan 7A           1  81.5
 4 SMP Harapan 7A           1  86.8
 5 SMP Harapan 7A           1  82  
 6 SMP Harapan 7A           1  82.6
 7 SMP Harapan 7A           1  74.3
 8 SMP Harapan 7A           1  82.1
 9 SMP Harapan 7A           2  78.3
10 SMP Harapan 7A           2  87.5
# ℹ 118 more rows

Tabel hasilnya berukuran 128 baris dan empat kolom, sesuai perhitungan 2 × 2 × 4 × 8. Sepuluh baris pertamanya cukup dibaca sekilas untuk memastikan kolom sekolah dan kelas terisi benar. Suku 2.0 * (semester - 1) di dalam formula adalah tren yang sengaja ditanamkan, sehingga estimasi model pada topik Analisis Lengkap dapat dibandingkan dengan nilai aslinya.

Berkas yang baru ditulis dibaca kembali dengan read_csv(), persis sebagaimana data sungguhan akan diimpor. Laporan spesifikasi kolom menunjukkan dua kolom teks dan dua kolom double, sedangkan glimpse() menegaskan ukuran tabel beserta contoh nilai tiap kolomnya. Pada titik ini kualitas kolom dapat dinilai, yaitu tidak ada nilai hilang pada cuplikan, tipe kolom konsisten, dan nama kolom menjelaskan isinya.

r Mengimpor kembali dan menginspeksi berkas data
rekap_impor <- read_csv(file.path("proyek-nilai", "data", "rekap-nilai.csv"))
glimpse(rekap_impor)
text Keluaran
Rows: 128 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): sekolah, kelas
dbl (2): semester, nilai

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 128
Columns: 4
$ sekolah  <chr> "SMP Harapan", "SMP Harapan", "SMP Harapan", "SMP Harapan", "…
$ kelas    <chr> "7A", "7A", "7A", "7A", "7A", "7A", "7A", "7A", "7A", "7A", "…
$ semester <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3…
$ nilai    <dbl> 77.2, 73.4, 81.5, 86.8, 82.0, 82.6, 74.3, 82.1, 78.3, 87.5, 7…

Isi folder proyek diperiksa dengan list.files(). Keluarannya hanya berisi satu berkas karena folder output/ memang belum diisi apa pun, sesuai rancangan. Struktur folder dan berkas data kini siap, sehingga bagian yang tersisa hanyalah skrip analisis yang melengkapi proyek tersebut.

r Menampilkan isi folder proyek
list.files("proyek-nilai", recursive = TRUE)
text Keluaran
[1] "data/rekap-nilai.csv"

Kesalahan umum#

Pola kesalahan berikut paling sering muncul pada tahap penetapan lingkup proyek.

  1. Pertanyaan terbuka dipakai sebagai dasar proyek. Pertanyaan seperti bagaimana kondisi pembelajaran tidak menyebut variabel dan tidak punya titik selesai, sehingga analisis berhenti di tengah tanpa kesimpulan. Perbaikannya adalah merumuskan ulang pertanyaan tersebut hingga menyebut kolom data dan bentuk ujinya, misalnya tren atau perbandingan.
  2. Berkas data mentah disunting langsung karena ada nilai yang tampak salah. Skrip yang dijalankan ulang kemudian menghasilkan angka berbeda dari laporan yang sudah tersebar. Perbaikannya adalah membiarkan folder data/ tetap utuh dan melakukan semua perbaikan di dalam skrip.
  3. Seluruh berkas dikeroyok ke dalam satu folder. Data mentah, grafik, dan skrip bercampur sehingga sulit dibedakan mana sumber dan mana keluaran. Perbaikannya adalah menerapkan pemisahan folder data/ dan output/ sejak hari pertama, sebelum berkasnya bertambah banyak.

Ringkasan#

  • Dataset proyek pertama dinilai dari kesesuaiannya dengan pertanyaan, ukuran yang masih terbaca manusia, dan kualitas kolomnya.
  • Pertanyaan analitis menyebut variabel yang tersedia di dalam data, berbentuk perbandingan, tren, atau hubungan, dan jawabannya berupa angka.
  • Alur kerja impor, perapian, visualisasi, pemodelan, dan komunikasi memetakan setiap tahap analisis ke alat yang tepat.
  • Pemisahan folder data/ dan output/ menjadikan reprodusibilitas sebagai standar kerja, yaitu skrip yang dijalankan ulang selalu menghasilkan keluaran yang sama.

Referensi#