[python] 데이터 샘플링(Sampling) 방법

데이터 샘플링은 대규모 데이터셋에서 일부 데이터를 추출하는 과정입니다. 이는 데이터 분석, 머신러닝 모델 학습 등 다양한 분야에서 중요한 작업입니다.

파이썬에서는 데이터 샘플링을 수행하기 위해 다양한 방법을 제공합니다.

1. 무작위 샘플링(Random Sampling)

무작위 샘플링은 데이터셋에서 무작위로 일부 데이터를 선택하는 방법입니다. 이는 모집단에 대한 임의성을 보장하며, 샘플링 오차를 줄일 수 있습니다.

import random

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample_size = 5

sample = random.sample(data, sample_size)
print(sample)

위의 코드에서는 random.sample() 함수를 사용하여 data 리스트에서 sample_size 개수만큼의 무작위로 선택된 데이터를 추출합니다.

2. 계층 샘플링(Stratified Sampling)

계층 샘플링은 데이터셋을 여러 계층으로 나눈 후, 각 계층에서 일부 데이터를 추출하는 방법입니다. 이는 각 계층의 특성을 보존하면서 샘플링을 수행할 수 있습니다.

import pandas as pd

data = pd.DataFrame({'class': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                     'score': [90, 85, 95, 70, 75, 80, 60, 65, 75]})

sample = data.groupby('class').apply(lambda x: x.sample(frac=0.5))
print(sample)

위의 코드에서는 pandas 라이브러리를 사용하여 데이터를 계층화한 후, groupby() 함수와 sample() 함수를 사용하여 각 계층에서 일정 비율(여기서는 50%)의 데이터를 추출합니다.

3. 군집 샘플링(Cluster Sampling)

군집 샘플링은 데이터셋을 여러 군집으로 나눈 후, 일부 군집을 선택하여 해당 군집에 속한 모든 데이터를 추출하는 방법입니다. 이는 데이터의 공간적 구조를 고려할 수 있으며, 계층 샘플링과 유사한 효과를 가질 수 있습니다.

import numpy as np

np.random.seed(0)
n_clusters = 3
cluster_size = 100

data = np.random.randn(n_clusters * cluster_size, 2)
clusters = np.repeat(np.arange(n_clusters), cluster_size)

selected_clusters = np.random.choice(np.arange(n_clusters), size=2, replace=False)
sample = data[np.isin(clusters, selected_clusters)]
print(sample)

위의 코드에서는 numpy 라이브러리를 사용하여 군집화된 데이터를 생성하고, 선택된 군집에 속한 모든 데이터를 추출합니다. np.isin() 함수를 사용하여 군집 선택 여부를 확인합니다.

참고 자료