반응형

05-05. 샘플 추출 (sample)

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)

 

개요


sample 메서드는 DataFrame이나 Series에서 무작위로 몇개의 값(레이블)을 출력하는 메서드입니다.

 

사용법


기본 사용법
df.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)
n : 추출할 갯수 입니다. replace가 False면 n의 최댓값은 레이블의 갯수를 넘을수 없습니다.
frac : 추출할 비율입니다. 1보다 작은값으로 설정하며(예 : 0.3 이면 30%), n과 동시에 사용할 수 없습니다.
replace : 중복추출의 허용 여부 입니다. True로 하면 중복추출이 가능하며 n의 최댓값이 레이블의 갯수보다 커도 됩니다.
weight : 가중치입니다. 즉 레이블마다 추출될 확률을 지정할 수 있습니다. 합계가 1(100%)이 아닐경우 자동으로 1로 연산합니다.
random_state : 랜덤 추출한 값에 시드를 설정할 수 있습니다. 원하는 값을 설정하면, 항상 같은 결과를 출력합니다.
axis : {0 : index / 1 : columns} 추출할 레이블입니다.
ignore_index : index의 무시 여부입니다. True일경우 출력시 index를 무시하고 숫자로 출력합니다.

반응형

 

예시


먼저 간단한 5x3짜리 데이터를 만들어보겠습니다.

col  = ['col1','col2','col3']
row  = ['row1','row2','row3','row4','row5']
data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
df = pd.DataFrame(data,row,col)
print(df)
>>
      col1  col2  col3
row1     1     2     3
row2     4     5     6
row3     7     8     9
row4    10    11    12
row5    13    14    15

n의 사용과 replcae의 사용
n을 설정함으로써 원하는 갯수의 추출이 가능합니다. n을 2로 설정함으로써 2개의 행이 추출된것을 볼 수 있습니다.

print(df.sample(2))
>>
      col1  col2  col3
row1     1     2     3
row4    10    11    12

행이 5이지만 replace=True로 설정하여 중복 추출을 허용한다면, n이 5보다 커도 됩니다.

print(df.sample(10,replace=True))
>>
      col1  col2  col3
row2     4     5     6
row3     7     8     9
row5    13    14    15
row1     1     2     3
row4    10    11    12
row2     4     5     6
row3     7     8     9


frac를 사용하는경우
frac을 통해 전체에대한 추출 비율을 정할 수 있습니다. frac을 0.4로 설정하므로써, 전체에서 40%인 2개를 추출해보겠습니다.

 print(df.sample(frac=0.4))
 >>
      col1  col2  col3
row1     1     2     3
row5    13    14    15


weights를 통한 가중치의 사용
먼저 가중치를 적용하기위해 5짜리 Series를 하나 만들어보겠습니다.

s = pd.Series(data=[10,10,3,3,1],index=row)
print(s)
>>
row1    10
row2    10
row3     3
row4     3
row5     1
dtype: int64

이제 이 Series s를 weights에 적용시켜보겠습니다. 가장 가중치가 높은 row1row2가 추출된 것을 확인할 수 있습니다.
물론 가중치가 적더라도 확률적으로 추출될 가능성이 존재합니다.

print(df.sample(2,weights=s))
>>
      col1  col2  col3
row2     4     5     6
row1     1     2     3


random_state를 통한 동일값 재출력 허용
random_state에 원하는 값을 설정하므로써 출력 결과를 동일하게 다시 출력하는것이 가능합니다.

print(df.sample(5,random_state=7))
>>
      col1  col2  col3
row1     1     2     3
row4    10    11    12
row3     7     8     9
row2     4     5     6
row5    13    14    15

위 과정을 통해 row1row2row3row4row5가 출력되고 random_state에 7을 부여했습니다.
동일한 내용으로 다시 출력하면 같은 값이 아래와 같이 재현됨을 알 수 있습니다.

print(df.sample(5,random_state=7))
>>
      col1  col2  col3
row1     1     2     3
row4    10    11    12
row3     7     8     9
row2     4     5     6
row5    13    14    15


ignore_index의 사용
ignore_index를 True로 하면 index는 사라지고 순서대로 번호가 부여됩니다.

print(df.sample(3,ignore_index=True))
>>
   col1  col2  col3
0    10    11    12
1     7     8     9
2    13    14    15
반응형

+ 최근 글