Pandas – Sampel

Pemilihan sampel adalah kita! Dalam keseharian kita tidak lepas dari proses memilih sampel bahkan pada kegiatan yang paling sederhana seperti saat mengomentari jualan orang, “kok modelnya lama-lama, gan?” Pertanyaan itu tentu timbul setelah melihat sebagian (sampel) barang jualan yang dipajang.

Kode Lima Detik

import pandas as pd

pd.options.display.float_format = '{:,.2f}'.format
sales = pd.read_csv('https://github.com/aansubarkah/basangdata_pandas/raw/master/AW/Sales.SalesOrderHeader.csv', sep='\t', parse_dates=True)

sales['OrderDate'] = pd.to_datetime(sales['OrderDate'])
data2012 = sales[sales['OrderDate'].dt.year == 2012]

# Simple Random Sample
data2012.sample(n=3, random_state=1)

# Stratified Random Sample
banyaksampel = 3
data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))

Latar Belakang

Pengambilan sampel merupakan salah satu bagian penting dalam proses pembuatan keputusan, seperti contoh di atas, salah mengambil sampel menyebabkan komentar (keputusan) kita menjadi tidak ramah (salah) dan berakhir dengan diblokirnya akun sosial media kita.

Teknologi kekiniyan memungkinkan kita untuk lebih mudah mengambil sampel secara obyektif. Pandas secara built-in telah memiliki fungsi sample yang dapat digunakan untuk itu.


Langkah Kerja

Kita akan mengambil sampel dari data penjualan milik AdventureWorks. Data pada tabel Sales.SalesOrderHeader diambil hanya untuk transaksi pada tahun 2012.

Import library dan load data

import pandas as pd

pd.options.display.float_format = '{:,.2f}'.format
sales = pd.read_csv('https://github.com/aansubarkah/basangdata_pandas/raw/master/AW/Sales.SalesOrderHeader.csv', sep='\t', parse_dates=True)

Gunakan hanya data tahun 2012

sales['OrderDate'] = pd.to_datetime(sales['OrderDate'])
data2012 = sales[sales['OrderDate'].dt.year == 2012]

Pada tahun 2012 terdapat 3.915 transaksi dengan data kurang lebih seperti ini.

Sampel

Simple Random Sample

Pengambilan sampel sederhana sebanyak 3 data dapat menggunakan sebaris kode ini.

data2012.sample(n=3, random_state=1).T

Fungsi sample digunakan untuk mendapatkan 3 (n=3) sampel dari data penjualan tahun 2012. Parameter random_state digunakan untuk menjamin reproducibility (alias jika kode dijalankan ulang akan mengeluarkan hasil yang sama).

Huruf T di akhir kode merupakan fungsi transpose untuk membalik kolom menjadi baris, digunakan semata untuk kemudahan melihat data.

Stratified Random Sample

Data dapat dikelompokkan lalu diambil sampel dari masing-masing kelompok, misal kita kelompokkan data per bulan.

banyaksampel = 1
data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))

Kita menggunakan fungsi groupby untuk mengelompokkan data berdasarkan bulan pada kolom OrderDate. Kemudian fungsi apply digunakan untuk menggunakan lambda (fungsi anonim pada Python).

Lambda di atas berisi perintah untuk mengambil sampel sebanyak 1 (sesuai nilai variabel banyaksampel = 1). Jika sampel per bulan ingin diubah, misalnya menjadi 3 sampel per bulan, cukup ganti variabel banyaksampel menjadi 3.

banyaksampel = 3
data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))

Referensi


Cover Image by Ernesto Eslava from Pixabay

One Reply to “Pandas – Sampel”

  1. Pingback: Pandas Baca HTML

Leave a Reply

Your email address will not be published. Required fields are marked *