Inspeksi pertama

Ritual inspeksi pertama dengan head, describe, dtypes, dan shape sebelum analisis dimulai.

Daftar isi

Inspeksi pertama adalah rangkaian pemeriksaan singkat yang dijalankan segera setelah data dimuat. Topik ini memperkenalkan empat perintah yang membentuk ritme baku tersebut, yaitu head untuk cuplikan, describe untuk statistik ringkas, dtypes untuk tipe kolom, dan shape untuk ukuran data. Keempatnya menjawab pertanyaan dasar tentang isi dan bentuk data sebelum keputusan pembersihan atau analisis diambil. Setelah topik ini, data yang baru dimuat dapat dinilai kewajarannya dalam beberapa panggilan singkat, dan kolom yang bermasalah sudah tertandai.

Melihat cuplikan dengan head dan tail#

Perintah head menampilkan lima baris pertama secara default, sedangkan tail menampilkan baris terakhir. Keduanya menjadi pemeriksaan paling awal untuk memastikan data terlihat seperti yang diharapkan. Yang diperiksa pada tahap ini bukan statistiknya, melainkan bentuknya, misalnya apakah nama kolom sudah benar, apakah nilai terlihat wajar, dan apakah ada baris yang tampak aneh di awal atau akhir data.

Contoh pada topik ini menggunakan catatan pembacaan sensor suhu ruangan, yaitu DataFrame dengan delapan baris dan empat kolom yang dibangun dari literal Python. Potongan-potongan berikutnya mengulang definisi yang sama agar setiap potongan dapat dijalankan sendiri.

python Menampilkan seluruh DataFrame sensor
import pandas as pd

suhu = pd.DataFrame({
    "sensor": ["R-01", "R-01", "R-02", "R-02", "R-03", "R-03", "R-01", "R-02"],
    "jam": [8, 9, 8, 9, 8, 9, 10, 10],
    "suhu_c": [24.5, 24.8, 23.9, 24.1, 25.2, 25.0, 25.1, 23.7],
    "kelembapan": [62, 63, 58, 59, 66, 65, 61, 60],
})

print(suhu)
text Keluaran
  sensor  jam  suhu_c  kelembapan
0   R-01    8    24.5          62
1   R-01    9    24.8          63
2   R-02    8    23.9          58
3   R-02    9    24.1          59
4   R-03    8    25.2          66
5   R-03    9    25.0          65
6   R-01   10    25.1          61
7   R-02   10    23.7          60
python Menampilkan lima baris pertama dan dua baris terakhir
import pandas as pd

suhu = pd.DataFrame({
    "sensor": ["R-01", "R-01", "R-02", "R-02", "R-03", "R-03", "R-01", "R-02"],
    "jam": [8, 9, 8, 9, 8, 9, 10, 10],
    "suhu_c": [24.5, 24.8, 23.9, 24.1, 25.2, 25.0, 25.1, 23.7],
    "kelembapan": [62, 63, 58, 59, 66, 65, 61, 60],
})

print(suhu.head())
print()
print(suhu.tail(2))
text Keluaran
  sensor  jam  suhu_c  kelembapan
0   R-01    8    24.5          62
1   R-01    9    24.8          63
2   R-02    8    23.9          58
3   R-02    9    24.1          59
4   R-03    8    25.2          66

  sensor  jam  suhu_c  kelembapan
6   R-01   10    25.1          61
7   R-02   10    23.7          60

Panggilan head() tanpa argumen menampilkan lima baris pertama, sedangkan tail(2) menampilkan dua baris terakhir. Angka di kolom paling kiri memudahkan pemeriksaan urutan baris. Pada data sensor ini, urutan jam naik dari 8 ke 10 dan tidak ada nilai yang mencurigakan pada cuplikan yang terlihat. Apabila data dimuat dari berkas yang besar, head menjadi cara tercepat mengonfirmasi bahwa pemisah kolom dan baris pertama sudah terbaca dengan benar.

Statistik ringkas dengan describe#

Perintah describe merangkum setiap kolom numerik dengan delapan statistik sekaligus, yaitu count, mean, std, min, kuartil pertama, median, kuartil ketiga, dan max. Statistik inilah bahan pertama untuk menilai kewajaran data. Yang diperiksa umumnya empat hal, yaitu apakah count sama dengan jumlah baris, apakah min dan max masuk akal, apakah rata-rata berdekatan dengan median, dan apakah ada lompatan yang janggal antarkuartil.

python Merangkum kolom numerik dengan describe
import pandas as pd

suhu = pd.DataFrame({
    "sensor": ["R-01", "R-01", "R-02", "R-02", "R-03", "R-03", "R-01", "R-02"],
    "jam": [8, 9, 8, 9, 8, 9, 10, 10],
    "suhu_c": [24.5, 24.8, 23.9, 24.1, 25.2, 25.0, 25.1, 23.7],
    "kelembapan": [62, 63, 58, 59, 66, 65, 61, 60],
})

print(suhu.describe())
text Keluaran
             jam    suhu_c  kelembapan
count   8.000000   8.00000    8.000000
mean    8.875000  24.53750   61.750000
std     0.834523   0.57802    2.815772
min     8.000000  23.70000   58.000000
25%     8.000000  24.05000   59.750000
50%     9.000000  24.65000   61.500000
75%     9.250000  25.02500   63.500000
max    10.000000  25.20000   66.000000

Kolom sensor tidak muncul karena isinya teks, dan describe hanya mengolah kolom numerik secara default. Hasilnya menunjukkan delapan pembacaan untuk setiap kolom numerik, sehingga tidak ada baris yang kosong. Suhu berkisar di sekitar 24 derajat Celsius dan kelembapan di sekitar 60 persen, keduanya masuk akal untuk ruangan kerja. Kolom jam ikut dirangkum sebagai bilangan dengan rata-rata di atas 8, dan hal itu menjadi pengingat bahwa kolom yang isinya label pun ikut dihitung bila bertipe numerik.

Tipe kolom dengan dtypes#

Atribut dtypes menampilkan tipe data setiap kolom. Tipe ini menentukan operasi apa saja yang sah untuk kolom tersebut, misalnya penjumlahan untuk bilangan dan penggabungan untuk teks. Tipe yang paling sering ditemui ada tiga, yaitu int64 untuk bilangan bulat, float64 untuk bilangan desimal, dan object untuk teks.

python Memeriksa tipe setiap kolom
import pandas as pd

suhu = pd.DataFrame({
    "sensor": ["R-01", "R-01", "R-02", "R-02", "R-03", "R-03", "R-01", "R-02"],
    "jam": [8, 9, 8, 9, 8, 9, 10, 10],
    "suhu_c": [24.5, 24.8, 23.9, 24.1, 25.2, 25.0, 25.1, 23.7],
    "kelembapan": [62, 63, 58, 59, 66, 65, 61, 60],
})

print(suhu.dtypes)
text Keluaran
sensor         object
jam             int64
suhu_c        float64
kelembapan      int64
dtype: object

Setiap kolom pada data contoh ini bertipe sesuai isinya. Pada data nyata, pemeriksaan dtypes sering menemukan masalah, misalnya kolom nilai yang seharusnya numerik terbaca sebagai object karena satu barisnya berisi teks seperti kata kosong atau tanda baca. Kolom semacam itu tidak dapat dijumlahkan sebelum diperbaiki. Karena itu, dtypes dijalankan bukan sekadar untuk diketahui, melainkan untuk menandai kolom yang tipe datanya perlu diperbaiki sehingga masuk daftar pekerjaan pembersihan.

Ukuran data dengan shape#

Atribut shape menyatakan ukuran DataFrame sebagai pasangan angka, yaitu jumlah baris dan jumlah kolom. Nilainya berguna untuk memastikan tidak ada baris yang hilang saat dimuat. Apabila sumber diketahui berisi 1000 baris dan shape menampilkan 987, ada 13 baris yang tidak terbaca, dan perbedaan itu perlu diselidiki sebelum analisis dimulai.

python Memeriksa ukuran DataFrame
import pandas as pd

suhu = pd.DataFrame({
    "sensor": ["R-01", "R-01", "R-02", "R-02", "R-03", "R-03", "R-01", "R-02"],
    "jam": [8, 9, 8, 9, 8, 9, 10, 10],
    "suhu_c": [24.5, 24.8, 23.9, 24.1, 25.2, 25.0, 25.1, 23.7],
    "kelembapan": [62, 63, 58, 59, 66, 65, 61, 60],
})

print(suhu.shape)
text Keluaran
(8, 4)

Keluaran (8, 4) menyatakan delapan baris dan empat kolom, sesuai dengan data yang didefinisikan di awal topik. shape adalah atribut, bukan fungsi, sehingga diakses tanpa tanda kurung. Penambahan tanda kurung yang tidak perlu memunculkan pesan TypeError berisi tuple object is not callable, dan pesan tersebut umumnya berarti ada atribut yang dipanggil seperti fungsi. Ukuran ini juga menjadi pembanding setelah langkah pembersihan, karena data yang semula delapan baris dapat berubah setelah baris kosong dibuang, dan selisihnya mencatat akibat keputusan pembersihan tersebut.

Kesalahan umum#

Kesalahan pertama adalah menilai seluruh data dari lima baris pertama saja. head hanya memperlihatkan ujung data, sedangkan baris yang aneh sering berada di tengah, terutama pada data yang terurut. Pelengkap yang berguna adalah sample(5), yaitu cuplikan lima baris acak, karena baris acak lebih mewakili keragaman data daripada baris pertama.

Kesalahan kedua adalah menganggap describe sebagai akhir pemeriksaan. Statistik yang ditampilkan bersifat permukaan, misalnya max yang jauh dari kuartil ketiga belum memberitahu penyebabnya dan hanya menandai kecurigaan pencilan. Pemeriksaan lanjutan tetap diperlukan sebelum kesimpulan diambil.

Kesalahan ketiga adalah membiarkan kolom bertipe numerik padahal maknanya kategori, seperti kolom jam pada data contoh. Kolom semacam itu ikut dihitung oleh describe dan ikut dirata-rata, padahal angka 8 pada jam hanya menandai urutan waktu dan tidak bermakna lebih kecil daripada angka 9. Keputusan mengonversi kolom seperti ini ke tipe kategori dicatat sebagai bagian dari pembersihan.

Ringkasan#

  • head dan tail menampilkan cuplikan untuk memeriksa bentuk data, sedangkan describe merangkum kolom numerik dengan count, mean, std, min, max, dan kuartil.
  • dtypes menandai kolom dengan tipe yang tidak sesuai isinya sebelum operasi numerik gagal di tengah analisis.
  • shape menyatakan jumlah baris dan kolom sebagai atribut tanpa tanda kurung, dan nilainya menjadi pembanding sebelum serta sesudah pembersihan.

Referensi#