Dataset baru biasanya diterima tanpa keterangan yang lengkap, sehingga langkah pertama sebelum analisis adalah inspeksi bentuk, tipe, dan isi datanya. Topik ini menggunakan dataset contoh berupa log sensor suhu dan kelembapan tiga ruangan, yaitu Lab A, Lab B, dan Ruang Arsip, untuk membahas head, tail, info, describe, shape, dtypes, sample, dan isna sebagai rangkaian pemeriksaan pertama. Skrip inspeksi.py menjalankan seluruh rangkaian itu sekali jalan, dan setiap bagian kemudian membaca bagian keluarannya.
Rangkaian pemeriksaan pertama#
Urutan pemeriksaan yang efektif bergerak dari bentuk menuju isi, yaitu ukuran tabel, ujung-ujung barisnya, tipe tiap kolom, statistik ringkas, dan hitungan kekosongan. Skrip berikut membangun dataset log sensor 96 baris dari seed yang tetap, lalu menjalankan seluruh pemeriksaan itu berurutan. Jalankan skripnya dan bandingkan keluarannya baris demi baris dengan pembahasan di bawah.
import numpy as np
import pandas as pd
# Generator dataset kontrak: log sensor suhu dan kelembapan tiga ruangan
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]),
})
# kekotoran deterministik: sebagian kecil suhu menjadi NaN
df.loc[rng.random(n) < 0.05, "suhu_c"] = np.nan
print(df.shape)
print(df.head())
print(df.tail(3))
print(df.dtypes)
df.info(memory_usage="deep")
print(df[["suhu_c", "lembap_pct"]].describe())
print(df.sample(n=5, random_state=42))
print(df.isna().sum())# jalankan rangkaian inspeksi pada dataset log sensor
python3 inspeksi.py(96, 5)
waktu ruang suhu_c lembap_pct status_sensor
0 2026-01-05 07:00:00 Ruang Arsip NaN 68.6 normal
1 2026-01-05 07:15:00 Lab B 21.8 59.1 normal
2 2026-01-05 07:30:00 Ruang Arsip 22.0 58.1 normal
3 2026-01-05 07:45:00 Lab B 22.5 67.3 normal
4 2026-01-05 08:00:00 Lab A 24.6 54.5 normal
waktu ruang suhu_c lembap_pct status_sensor
93 2026-01-06 06:15:00 Lab A 22.2 62.3 normal
94 2026-01-06 06:30:00 Lab A 21.9 54.4 normal
95 2026-01-06 06:45:00 Lab B 26.5 57.6 normal
waktu datetime64[us]
ruang str
suhu_c float64
lembap_pct float64
status_sensor str
dtype: object
<class 'pandas.DataFrame'>
RangeIndex: 96 entries, 0 to 95
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 waktu 96 non-null datetime64[us]
1 ruang 96 non-null str
2 suhu_c 89 non-null float64
3 lembap_pct 96 non-null float64
4 status_sensor 96 non-null str
dtypes: datetime64[us](1), float64(2), str(2)
memory usage: 5.1 KB
suhu_c lembap_pct
count 89.000000 96.000000
mean 23.913483 59.863542
std 1.525405 5.119583
min 20.800000 49.300000
25% 22.600000 56.350000
50% 23.800000 59.250000
75% 24.700000 62.325000
max 28.400000 74.500000
waktu ruang suhu_c lembap_pct status_sensor
80 2026-01-06 03:00:00 Lab B 22.1 56.4 normal
77 2026-01-06 02:15:00 Lab B 24.7 61.8 normal
73 2026-01-06 01:15:00 Lab A 24.6 57.2 normal
94 2026-01-06 06:30:00 Lab A 21.9 54.4 normal
33 2026-01-05 15:15:00 Lab A 22.2 54.6 normal
waktu 0
ruang 0
suhu_c 7
lembap_pct 0
status_sensor 0
dtype: int64Setiap blok pada skrip menyumbang satu bagian keluaran, dan urutannya mengikuti urutan pemanggilan. Atribut shape membuka pemeriksaan karena ukuran yang salah adalah tanda pertama data yang terpotong. Metode head dan tail memperlihatkan ujung data, dtypes dan info menyatakan tipe, describe menghitung statistik, sample mengambil contoh baris, dan isna().sum() menghitung kekosongan per kolom.
Membaca ujung data, bentuk, dan tipe#
Keluaran pertama (96, 5) menyatakan 96 baris dan 5 kolom, dan angka ini menjadi acuan untuk semua pemeriksaan berikutnya. Lima baris pertama pada df.head() mencakup pukul 07:00 sampai 08:00 pada tanggal 5 Januari 2026, dengan baris 0 langsung memperlihatkan NaN pada suhu_c yang menandakan data tidak sepenuhnya terisi. Tiga baris terakhir pada df.tail(3) beralih ke tanggal 6 Januari pukul 06:15 sampai 06:45, sehingga rentang waktunya membentang dua hari penuh dengan interval 15 menit. Nomor index 93 sampai 95 pada tail mengonfirmasi tidak ada baris yang hilang di tengah karena indexnya berlanjut tanpa lompatan.
Keluaran df.dtypes menyatakan tipe kelima kolom, yaitu waktu bertipe datetime, ruang dan status_sensor bertipe str, serta suhu_c dan lembap_pct bertipe float64. Tipe ini menentukan operasi yang sah pada tiap kolom, misalnya perhitungan rata-rata hanya tepat pada kolom numerik. Keluaran datetime64[us] adalah tipe waktu pandas dengan resolusi mikrodetik, dan label str pada pandas 3.x menandai dtype string khusus untuk kolom teks.
Membaca keluaran info#
Metode info() mencetak ringkasan struktur yang tidak mungkin dilihat dari head saja, yaitu tipe index, jumlah entri, daftar kolom, dan penggunaan memori. Baris RangeIndex: 96 entries, 0 to 95 menyatakan label baris berjalan dari 0 sampai 95 tanpa lompatan, sedangkan baris Data columns (total 5 columns) membuka tabel kolom beserta atributnya.
Kolom Non-Null Count adalah bagian yang paling sering menyingkap masalah, karena setiap barisnya menyatakan jumlah nilai yang terisi. Kolom waktu, ruang, lembap_pct, dan status_sensor terisi 96 dari 96, sedangkan suhu_c hanya terisi 89, sehingga 7 baris bertipe NaN dapat dipastikan sebelum pembersihan dimulai. Kolom Dtype pada tabel yang sama mengulang informasi dtypes dalam satu tampilan. Baris terakhir memory usage: 5.1 KB diperoleh karena argumen memory_usage="deep" menghitung memori kolom teks secara menyeluruh, bukan sekadar ukuran penunjuknya. Metode ini mencetak langsung ke keluaran dan mengembalikan None, sehingga pemanggilannya tidak perlu dibungkus print untuk melihat hasilnya.
Membaca keluaran describe#
Metode describe() menghitung statistik deskriptif kolom numerik, dan pada skrip ini dipanggil atas dua kolom pengukuran yang dipilih eksplisit agar keluarannya fokus. Kolom bertipe string seperti ruang dan status_sensor tidak dihitung secara default karena rata-rata dan persentil tidak bermakna untuk teks.
Baris count menyatakan banyaknya nilai yang terisi, yaitu 89 untuk suhu_c dan 96 untuk lembap_pct, dan angka 89 yang lebih kecil dari jumlah baris mengulang temuan info dari arah yang berbeda. Baris mean dan std menyatakan rata-rata serta simpangan baku, yaitu suhu 23.91 dengan simpangan 1.53 dan kelembapan 59.86 dengan simpangan 5.12. Baris min dan max menampilkan rentangnya, yaitu 20.8 sampai 28.4 derajat dan 49.3 sampai 74.5 persen. Baris 25%, 50%, dan 75% adalah kuartil yang membantu mendeteksi nilai ekstrem, misalnya selisih antara kuartil ketiga dan nilai maksimum suhu yang cukup lebar pada data ini.
Sampel acak dan hitungan kekosongan#
Metode sample(n=5, random_state=42) mengambil lima baris secara acak yang dapat direproduksi, dan argumen random_state menetapkan seed pembangkit acaknya. Baris 80, 77, 73, 94, dan 33 pada keluaran selalu sama setiap skrip dijalankan, sehingga contoh yang dikutip dalam laporan tidak berubah-ubah. Tanpa argumen itu, setiap eksekusi mengambil baris berbeda dan pemeriksaan sulit dibandingkan antar waktu.
Terakhir, isna().sum() menghitung NaN per kolom dan menegaskan temuan sebelumnya secara eksak, yaitu suhu_c 7, waktu 0, ruang 0, lembap_pct 0, dan status_sensor 0. Rangkaian kecil ini menjadi pemeriksaan wajib setelah data baru dimuat, karena satu baris keluarannya sudah menyatakan kolom mana yang perlu dibersihkan. Langkah penanganan yang menyusul dibahas pada topik Deteksi Data Hilang.
Ringkasan#
shapedandtypesmenegaskan ukuran serta tipe tiap kolom sebelum analisis dimulai, dan pada pandas 3.x kolom teks bertipe str.headdantailmemperlihatkan ujung data beserta kesinambungan indexnya, sedangkaninfo()merangkum baris, kolom, jumlah nilai terisi, dan memori.describe()menghitung count, mean, std, dan kuartil kolom numerik, dan count yang lebih kecil dari jumlah baris menandai kolom dengan NaN.sample(n, random_state=42)mengambil baris acak yang dapat direproduksi, sedangkanisna().sum()menghitung NaN per kolom secara eksak.
Referensi#
- pandas.DataFrame.info — pandas documentation — Dokumentasi metode info beserta parameter memory_usage dan show_counts.
- pandas.DataFrame.describe — pandas documentation — Dokumentasi statistik deskriptif yang dihitung metode describe.