pandas에 sample()이라는 함수가 있다. random sample을 뽑아주는 함수 이다. 각 인자들이 의미하는 바를 알아보고, 사용법을 알아보자.
DataFrame.sample(n=None, frac=None, replace=False,
weights=None, random_state=None,
axis=None, ignore_index=False)
들어가는 인자는 아래와 같다.
n / frac: 리턴되는 개수(/비율)를 정한다
replace (bool) : 중복 허용 여부를 정한다
weights : 원소 별 추출 확률을 정한다
random state: seed for random number generator
axis : 0 or 'index' / 1 or 'columns'
ignore_index
df = pd.DataFrame({'num_lengs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8],
index=['falcon', 'dog', 'spider', 'fish'])
파이토치 홈페이지에서 가져온 예시이다. 이걸 가지고 요렇게 저렇게 바꿔보면서 각 인자가 무엇을 의미하는 지 확실히 살펴보자.
위 데이터프레임에서 하나의 컬럼만 가져와서 Series
에서 sample을 다루는 법을 알아보자.
우선 'num_lengs'라는 컬럼은 아래와 같이 생겼다.
df['num_lengs']
이걸 찍어보면 아래와 같이 크기가 4인 시리즈인 것을 알 수 있다.
falcon 2
dog 4
spider 8
fish 0
Name: num_lengs, dtype: int64
이 시리즈에 3개의 샘플 n=3
을 무작위로 가져오라고 하면 이렇게 된다.
df['num_lengs'].sample(n=3)
이렇게 spider, fish, dog, falcon 중 랜덤하게 세 개가 뽑혀 나온다.
spider 8
fish 0
dog 4
Name: num_lengs, dtype: int64
위에서 n
과 유사한 기능을 하고, 그래서 n
과는 같이 쓸 수 없는 것으로 frac
이 있다고 했다. 그럼 frac
은 어떻게 동작하는 지 살펴보자
아래와 같이 총 4개 중 절반 (frac=0.5)만 가져오라고 해봤다.
df['num_lengs'].sample(frac=0.5)
결과는 아래와 같다
fish 0
falcon 2
Name: num_lengs, dtype: int64
즉, n
과 frac
은 기본적으로 '몇 개의 샘플을 리턴할거야?' 라는 같은 질문에 답하지만, 방식이 다르다. n
은 개수를 지정해주고, frac
은 비율을 지정해주는 방식이다.
이 n
과 frac
을 dataframe
에서 사용해보자. dataframe
에서 달라지는 점이 있다면 axis
를 0, 1로 지정해줄 수 있다는 점이다.
axis = 0
은 index에 대해서 n개의 샘플을 가져온다.
axis = 'index'
라고 해도 되고, default
도 axis = 0
이다.
df.sample(num=2, axis=0)
num_lengs num_wings num_specimen_seen
falcon 2 2 10
spider 8 0 1
axis = 1
은 column에 대해서 n개의 샘플을 가져온다.
axis = 'colunms'
라고 해도 된다.
df.sample(n=2, axis=1)
num_specimen_seen num_lengs
falcon 10 2
dog 2 4
spider 1 8
fish 8 0
random state
는 임의의 숫자를 파라미터로 넣어줌으로써 샘플링의 재현을 가능하게 한다.
즉, 같은 random state
파라미터에 대해서는 계속 같은 모양의 sample이 나온다.
중복을 허용해서 sampling할 것인가에 대한 인자이다. default
는 False
이고 True
일 경우 중복 허용이다.
df.sample(frac=0.5, replace=True)
아래 처럼 fish가 중복되어 나온 것을 알 수 있다.
num_lengs num_wings num_specimen_seen
fish 0 0 8
fish 0 0 8