Penentuan Lingkup Proyek

Memilih dataset dan pertanyaan analisis nyata sebagai dasar proyek data.

Daftar isi

Proyek penutup jalur ini adalah laporan kualitas lingkungan tiga ruangan yang disusun dari log sensor, dan seluruh topik pada modul Pengerjaan Proyek mengerjakannya sebagai satu kesatuan. Topik Penentuan Lingkup Proyek menetapkan fondasinya, yaitu dataset yang diproses dan pertanyaan analisis yang harus dijawab sebelum pemrosesan ditulis. Pada akhir topik, skrip lingkup.py sudah dapat dibuat dan dijalankan untuk membangun dataset beserta bukti kekotorannya, sehingga setiap pertanyaan analisis berpijak pada angka yang terukur, bukan pada dugaan.

Dataset proyek: log sensor tiga ruangan#

Dataset proyek ini adalah log pengukuran suhu dan kelembapan tiga ruangan, yaitu Lab A, Lab B, dan Ruang Arsip, dengan lima kolom bernama waktu, ruang, suhu_c, lembap_pct, dan status_sensor. Setiap baris berupa satu pembacaan, dan pembacaan dijadwalkan setiap 15 menit sejak pukul 07.00 pada tanggal 2026-01-05, sehingga 96 baris membentuk satu hari pengamatan. Dataset ini adalah dataset kontrak jalur yang sudah diperkenalkan pada topik Penyiapan Lingkungan, tetapi versi proyek sengaja diberi kekotoran tambahan agar pekerjaannya menyerupai data nyata.

Tiga kekotoran ditambahkan secara deterministik, yaitu sebagian kecil sel suhu_c dan lembap_pct menjadi NaN, empat baris dengan penulisan nama ruang yang tidak konsisten seperti "lab a" dan "LAB B", serta tiga baris yang digandakan. Seluruh angka acaknya dibangkitkan dari seed yang tetap, sehingga dataset yang sama dapat dibangun ulang kapan pun dan oleh siapa pun. Kekotoran seperti ini memang tidak diinginkan pada laporan sungguhan, tetapi justru menjadi bahan latihan utama proyek karena seluruh tahap pembersihan pada jalur ini akhirnya dipraktikkan pada data yang sama.

Tiga pertanyaan analisis proyek#

Lingkup analisis ditetapkan sebagai tiga pertanyaan yang masing-masing dapat dijawab dengan satu perhitungan pandas. Ketiganya menjadi tolok ukur keberhasilan proyek karena topik Analisis dan Visualisasi harus mengembalikan jawabannya dalam bentuk angka dan nama ruang.

  • Pertanyaan a, ruang mana yang suhunya paling tidak stabil, dijawab dengan simpangan baku suhu per ruang.
  • Pertanyaan b, berapa banyak bacaan suhu yang hilang per ruang, dijawab dengan penghitungan NaN per grup.
  • Pertanyaan c, ruang mana yang memiliki bacaan berstatus rusak terbanyak, dijawab dengan tabulasi silang ruang terhadap status_sensor.

Ketiga rumusan di atas masih perlu diuji kelayakannya, dan ujiannya menggunakan tiga kriteria pada bagian berikut. Pertanyaan yang lolos ujian menjadi janji proyek, sedangkan pertanyaan yang gagal akan membebani tahap analisis dengan perhitungan yang tidak pernah selesai.

Ketiga pertanyaan dijawab dari log yang sama, sehingga satu kali pembersihan melayani semuanya. Pertanyaan a menghitung kolom suhu_c per ruang, pertanyaan b menghitung sel yang hilang pada suhu_c, sedangkan pertanyaan c menghitung kolom status_sensor per ruang. Rincian bahan semacam ini dicatat sejak awal karena lingkup yang baik menyebut data yang digunakan, bukan hanya pertanyaannya. Catatan itu juga menjaga arah tahap analisis ketika tabel sudah berlipat melalui agregasi dan penggabungan.

Kriteria pertanyaan analisis yang baik#

Pertanyaan analisis yang layak masuk proyek memenuhi tiga kriteria sekaligus, yaitu terukur, dijawab oleh data yang tersedia, dan menghasilkan tindakan yang jelas. Pertanyaan a menunjukkan cara kerja kriteria pertama. Frasa “paling tidak stabil” tidak dapat dihitung apa adanya, sehingga rumusannya diterjemahkan menjadi simpangan baku suhu per ruang, yaitu ukuran sebaran yang sudah tersedia pada pandas. Setelah penerjemahan itu, pertanyaan berubah menjadi perhitungan yang pasti, yaitu mencari grup dengan simpangan baku tertinggi, dan dua rumusan lain diperlakukan sama.

Kriteria kedua memeriksa ketersediaan data. Pertanyaan hanya layak bila kolom yang dibutuhkan benar-benar ada pada dataset, dan ketiga pertanyaan proyek ini lolos karena log memuat suhu_c sekaligus status_sensor. Sebagai pembanding, pertanyaan tentang biaya energi ruangan tidak dapat dimasukkan ke lingkup karena tidak ada kolom konsumsi listrik pada log, apa pun menariknya bagi pembaca laporan.

Kriteria ketiga mengaitkan jawaban dengan tindakan. Ruang dengan simpangan baku tertinggi menjadi kandidat pemeriksaan sistem pendinginnya, sedangkan ruang dengan bacaan rusak terbanyak menjadi prioritas perbaikan sensor. Laporan yang tidak mengubah keputusan apa pun hanya menambah panjang berkas, sehingga kriteria ini membedakan analisis dari sekadar perhitungan.

Skrip lingkup.py: mengukur dataset sebelum pemrosesan#

Langkah terakhir topik ini adalah skrip lingkup.py yang membangun dataset dan mengukurnya sebelum satu pun pembersihan dilakukan. Fungsi bangun_log() menampung generator beserta ketiga kekotorannya, sedangkan bagian bawah skrip mencetak empat hal, yaitu bentuk tabel melalui shape, daftar kolom, jumlah NaN per kolom melalui isna().sum(), dan distribusi status_sensor melalui value_counts(). Simpan berkas berikut pada folder kerja, lalu jalankan perintah pada blok bash di bawahnya. Skrip ini tidak menulis berkas apa pun, karena penyimpanan CSV menjadi tugas tahap ingest pada topik Pembangunan Pipeline.

python lingkup.py
# lingkup.py: membangun dataset proyek dan mengukurnya untuk penetapan lingkup.
import numpy as np
import pandas as pd

def bangun_log() -> pd.DataFrame:
    """Membangun log sensor 96 bacaan dengan kotoran deterministik."""
    rng = np.random.default_rng(42)
    n = 96
    df = pd.DataFrame({
        "waktu": pd.date_range("2026-01-05 07:00", periods=n, freq="15min"),
        "ruang": rng.choice(["Lab A", "Lab B", "Ruang Arsip"], n, p=[0.4, 0.35, 0.25]),
        "suhu_c": np.round(rng.normal(24, 1.5, n), 1),
        "lembap_pct": np.round(rng.normal(60, 5, n), 1),
        "status_sensor": rng.choice(["normal", "kalibrasi", "rusak"], n, p=[0.85, 0.10, 0.05]),
    })
    # kotoran 1: sebagian kecil sel suhu dan kelembapan menjadi NaN
    df.loc[rng.random(n) < 0.05, "suhu_c"] = np.nan
    df.loc[rng.random(n) < 0.05, "lembap_pct"] = np.nan
    # kotoran 2: nama ruang tidak konsisten pada empat baris
    df.loc[7, "ruang"] = "lab a"
    df.loc[23, "ruang"] = "LAB B"
    df.loc[41, "ruang"] = "ruang arsip"
    df.loc[67, "ruang"] = " Lab A "
    # kotoran 3: tiga baris digandakan
    return pd.concat([df, df.sample(3, random_state=42)], ignore_index=True)

log = bangun_log()
print(log.shape)
print(list(log.columns))
print(log.isna().sum())
print(log["status_sensor"].value_counts())
bash
# menjalankan skrip penetapan lingkup proyek
python3 lingkup.py
text Keluaran
(99, 5)
['waktu', 'ruang', 'suhu_c', 'lembap_pct', 'status_sensor']
waktu            0
ruang            0
suhu_c           7
lembap_pct       3
status_sensor    0
dtype: int64
status_sensor
normal       85
kalibrasi    11
rusak         3
Name: count, dtype: int64

Keluarannya memuat empat fakta yang menjadi pegangan sisa proyek. Bentuk tabel berupa (99, 5), dan angka 99 sudah menjadi bukti kekotoran karena pola datanya 96 baris, yaitu tiga baris duplikat ikut terhitung. Jumlah NaN menunjukkan tujuh sel suhu_c dan tiga sel lembap_pct hilang, sedangkan kolom lain lengkap. Distribusi status pada 99 baris kotor menunjukkan 85 bacaan normal, sebelas kalibrasi, dan tiga rusak. Angka-angka inilah pembanding wajib setelah pembersihan pada topik Pembangunan Pipeline, yaitu jumlah baris harus turun tepat tiga dan NaN pada suhu_c harus mencapai nol.

Kesalahan umum#

  • Pertanyaan dibiarkan abstrak, misalnya “apakah lingkungan ruangan sudah baik”. Rumusan semacam ini tidak dapat diterjemahkan menjadi perhitungan, sehingga proyek tidak pernah sampai pada jawaban. Perbaikinya dengan menetapkan ukurannya lebih dahulu, misalnya simpangan baku suhu untuk kestabilan.
  • Lingkup ditetapkan tanpa memeriksa data lebih dahulu. Pertanyaan bisa merujuk kolom yang tidak ada atau mengabaikan kekotoran yang nyata. Perbaikinya dengan menjalankan lingkup.py sebelum rumusan pertanyaan dikunci.
  • Kekotoran dianggap sudah tidak ada ketika pertanyaan dirumuskan. Keluaran lingkup.py menunjukkan sebaliknya, yaitu tujuh sel suhu hilang dan tiga baris duplikat. Perbaikinya dengan menjadikan angka pembanding tersebut bagian dari lingkup, sehingga keberhasilan pembersihan diukur, bukan diasumsikan.

Ringkasan#

  • Lingkup proyek dinyatakan sebagai dataset dan pertanyaan terukur, sehingga keberhasilannya dapat diperiksa dengan angka.
  • Kelayakan pertanyaan diuji dengan tiga kriteria, yaitu terukur, dijawab oleh data yang tersedia, dan menghasilkan tindakan.
  • Skrip lingkup.py mengukur dataset sebelum pemrosesan, dan angkanya, yaitu 99 baris serta tujuh NaN suhu, menjadi pembanding hasil pembersihan.

Referensi#