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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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)))
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)))
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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)
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)
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sales['OrderDate'] = pd.to_datetime(sales['OrderDate'])
data2012 = sales[sales['OrderDate'].dt.year == 2012]
sales['OrderDate'] = pd.to_datetime(sales['OrderDate']) data2012 = sales[sales['OrderDate'].dt.year == 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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
data2012.sample(n=3, random_state=1).T
data2012.sample(n=3, random_state=1).T
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
banyaksampel = 1
data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))
banyaksampel = 1 data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
banyaksampel = 3
data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))
banyaksampel = 3 data2012.groupby(data2012['OrderDate'].dt.month, group_keys=False).apply(lambda x: x.sample(min(len(x), banyaksampel)))
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 *