Bhyllabus l'énigme

Les pèlerins au-dessus des nuages

Belajar Analisis Data – Hari 3: Jenis Data dan Tipe Variabel

Gambar unggulan bertuliskan Belajar Analisis Data, Hari 3: Jenis Data dan Tipe Variabel, dengan dua kotak Kategorik (nominal, ordinal) dan Numerik (diskrit, kontinu)

Sebelum menghitung apa pun, analis perlu tahu jenis data yang sedang dipegang, karena jenis data menentukan operasi apa yang masuk akal. Rata-rata kode pos tidak punya makna, sedangkan rata-rata berat badan punya makna. Catatan hari ketiga ini membahas cara membedakan tipe variabel dan menuliskannya di SQL, pandas, dan R.

Tujuan belajar

  • Membedakan data kategorik dan numerik, serta empat skala pengukuran menurut Stevens (1946).
  • Memilih statistik yang sesuai untuk setiap tipe variabel.
  • Menuliskan tipe variabel dengan benar di SQL, pandas, dan R.

Konsep inti

Saat pertama mencoba analisis, saya mengira kolom yang berisi angka otomatis bisa dirata-ratakan. Ternyata nomor rekam medis dan kode pos juga tersimpan sebagai angka, tetapi fungsinya hanya sebagai label. Kesalahan ini kelihatan sepele, tetapi hasil statistik yang dihasilkannya bisa menyesatkan.

Diagram pohon jenis data: Data bercabang menjadi Kategorik (nominal, ordinal) dan Numerik (diskrit, kontinu), dengan contoh pada tiap cabang
Pohon sederhana untuk contoh ini: kategorik dibagi menjadi nominal dan ordinal, numerik dibagi menjadi diskrit dan kontinu.

Stevens (1946) memperkenalkan empat skala pengukuran. Urutannya dari yang paling sederhana sampai yang paling kaya operasi matematikanya adalah sebagai berikut.

  • Nominal: kategori tanpa urutan, misalnya golongan darah atau nama kota. Yang bisa dilakukan: menghitung frekuensi dan modus.
  • Ordinal: kategori dengan urutan, tetapi jarak antarurutan tidak diketahui sama, misalnya tingkat pendidikan (SD, SMP, SMA, sarjana). Yang bisa dilakukan: median dan persentil.
  • Interval: angka dengan jarak yang sama, tetapi tanpa nol mutlak, misalnya suhu dalam Celsius. Yang bisa dilakukan: selisih dan rata-rata.
  • Rasio: angka dengan jarak yang sama dan nol mutlak, misalnya berat badan, lama rawat inap, atau jumlah anak. Yang bisa dilakukan: semua operasi di atas, termasuk perbandingan dua kali lipat.
Empat skala pengukuran StevensEmpat kotak berurutan dari nominal, ordinal, interval, sampai rasio dengan panah di antaranya. Setiap langkah ke kanan menambah operasi matematika yang sah.NominalOrdinalIntervalRasioMakin ke kanan, makin banyak operasi matematika yang sah

Kategorik, numerik, diskrit, dan kontinu

Dua pembagian ini sering dipakai bersama, tetapi menjawab pertanyaan yang berbeda. Skala Stevens menjawab operasi apa yang boleh dilakukan pada sebuah variabel. Pembagian diskrit dan kontinu menjawab dari mana nilainya datang. Nilai diskrit dihitung, misalnya jumlah kunjungan (0, 1, 2, dan seterusnya). Nilai kontinu diukur dan bisa berada di antara dua bilangan, misalnya tinggi badan 165,2 cm. Gambar pohon di atas sengaja disederhanakan: interval dan rasio keduanya numerik, dan diskrit-kontinu adalah pembagian lain di dalam kelompok numerik.

Dari definisi ke kode

Contoh berikut memakai dataset penguins, yang tersedia sebagai dataset bawaan di seaborn dan paket palmerpenguins di R. Dataset ini berisi pengukuran penguin di Kepulauan Palmer, Antartika, bukan data manusia. Kolom species dan island adalah nominal, sedangkan body_mass_g adalah rasio dan kontinu. Versi SQL menghitung jumlah dan rata-rata massa per kelas massa. Versi pandas dan R menunjukkan cara menyatakan tipe variabel.

-- SQL (PostgreSQL): kelas massa ordinal dibuat dari variabel numerik
-- Ambang 3500 dan 4500 hanya contoh untuk latihan
SELECT
  species,                                  -- kategorik nominal
  CASE
    WHEN body_mass_g < 3500 THEN '1 ringan'
    WHEN body_mass_g < 4500 THEN '2 sedang'
    ELSE '3 berat'                          -- awalan angka menjaga urutan
  END AS kelas_massa,                       -- kategorik ordinal hasil dari numerik
  COUNT(*) AS jumlah,
  AVG(body_mass_g) AS rata_rata_massa       -- rata-rata hanya masuk akal untuk rasio
FROM penguins
WHERE body_mass_g IS NOT NULL
GROUP BY 1, 2
ORDER BY 1, 2;
# Python (pandas)
import seaborn as sns
import pandas as pd

# Dataset bawaan seaborn; sumber asli: Horst, Hill, & Gorman (2020)
penguins = sns.load_dataset("penguins")

# Periksa tipe setiap kolom
print(penguins.dtypes)

# species: nominal, cukup tipe category tanpa urutan
penguins["species"] = penguins["species"].astype("category")

# Ordinal perlu urutan eksplisit agar 'ringan' < 'sedang' < 'berat'
ukuran = pd.Categorical(["sedang", "ringan", "berat"],
                        categories=["ringan", "sedang", "berat"],
                        ordered=True)
print(ukuran.min())   # 'ringan', karena urutannya sudah ditetapkan

# body_mass_g: rasio, sehingga describe() dan rata-rata masuk akal
print(penguins["body_mass_g"].describe())
# R (tidyverse)
library(tidyverse)
library(palmerpenguins)   # dataset penguins, Horst, Hill, & Gorman (2020)

# Nominal: hitung frekuensi per species
penguins |>
  count(species)

# Ordinal: di R disimpan sebagai factor dengan urutan eksplisit
ukuran <- factor(c("sedang", "ringan", "berat"),
                 levels = c("ringan", "sedang", "berat"),
                 ordered = TRUE)
ukuran[1] > ukuran[2]   # TRUE: 'sedang' lebih tinggi daripada 'ringan'

# Rasio: rata-rata dan selisih masuk akal
penguins |>
  summarise(rata_massa = mean(body_mass_g, na.rm = TRUE))

Contoh kecil

Contoh kecil. Sebuah klinik ingin melaporkan kepuasan layanan dengan skor 1 sampai 5, dari sangat tidak puas sampai sangat puas. Skor ini terlihat seperti angka, tetapi jarak antara 1 dan 2 belum tentu sama dengan jarak antara 4 dan 5. Saya memperlakukannya sebagai ordinal: laporan memakai median dan distribusi frekuensi, bukan rata-rata. Jika tim tetap ingin rata-rata, asumsi itu harus ditulis di laporan.

Kesalahan yang sering terjadi

Waspadai empat hal ini:

  • Menghitung rata-rata kolom kode pos, ID pelanggan, atau nomor urut. Kolom ini nominal meskipun berisi angka.
  • Menyimpan kategori sebagai angka 1, 2, 3 tanpa kamus data, lalu lupa arti setiap kodenya.
  • Menganggap skala Likert 1 sampai 5 sebagai interval tanpa menuliskannya sebagai asumsi.
  • Mengubah variabel kontinu menjadi kategori tanpa alasan yang jelas, sehingga informasi ikut hilang.

Latihan

  1. Tentukan skala Stevens untuk nomor rekam medis, lama rawat inap dalam hari, dan tingkat pendidikan (SD, SMP, SMA, sarjana).
  2. Suhu ruangan dapat dinyatakan dalam Celsius atau Kelvin. Mana yang termasuk rasio, dan mengapa?

Kunci jawaban singkat: (1) Nomor rekam medis adalah nominal, karena hanya label identitas. Lama rawat inap adalah rasio dan diskrit, karena dihitung dalam hari dan nol berarti tidak ada rawat inap. Tingkat pendidikan adalah ordinal, karena ada urutan tetapi jarak antarjenjang tidak diukur. (2) Kelvin adalah rasio, karena nol Kelvin adalah nol mutlak. Celsius adalah interval, karena nol Celsius hanya titik acuan air membeku dan tidak berarti tanpa suhu.

Ringkasan

Tipe variabel menentukan statistik yang boleh dihitung, jadi pertanyaan tentang jenis data sebaiknya dijawab sebelum query pertama dijalankan. Besok kita membahas statistik deskriptif, yaitu mean, median, dan modus, yang hanya bermakna setelah tipe variabel jelas.

Sumber bacaan

Horst, A. M., Hill, A. P., & Gorman, K. B. (2020). palmerpenguins: Palmer Archipelago (Antarctica) penguin data. https://doi.org/10.5281/zenodo.3960218

pandas documentation. “Categorical data”. https://pandas.pydata.org/docs/user_guide/categorical.html

Stevens, S. S. (1946). On the theory of scales of measurement. Science, 103(2684), 677–680.

Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for Data Science (2nd ed.). O’Reilly Media. https://r4ds.hadley.nz/

Navigasi seri Belajar Analisis Data

Commenting 101: “Be kind, and respect each other” // Bersikaplah baik, dan saling menghormati (Indonesian) // Soyez gentils et respectez-vous les uns les autres (French) // Sean amables y respétense mutuamente (Spanish) // 待人友善,互相尊重 (Chinese) // كونوا لطفاء واحترموا بعضكم البعض (Arabic) // Будьте добры и уважайте друг друга (Russian) // Seid freundlich und respektiert einander (German) // 親切にし、お互いを尊重し合いましょう (Japanese) // दयालु बनें, और एक दूसरे का सम्मान करें (Hindi) // Siate gentili e rispettatevi a vicenda (Italian)

Tinggalkan Balasan