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.
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
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.html
- https://stackoverflow.com/questions/44114463/stratified-sampling-in-pandas
Cover Image by Ernesto Eslava from Pixabay
One Reply to “Pandas – Sampel”