파이썬 랜덤값 생성, random 모듈 알아보기!

2019. 11. 4. 06:56

코딩을 하다보면 random값이 필요할 때가 있다. 무작위로 뽑는다는 것은 통계에서 아주 중요한 의미를 가지고 있다. 특정 변수와 상관관계가 없기 때문에, sample을 뽑거나 테스트를 할 때도 유용하게 쓰인다. 그래도 다른 모듈보다 가끔 사용하다보니 잘 기억이 나지 않는다.

오늘은 파이썬에서 random 모듈을 사용하는 방법에 대해서 알아보도록 하겠다.


random



random은 파이썬에 기본으로 포함된 모듈이다. 별도의 설치과정없이 import해서 사용할 수 있다. random에는 다양한 함수가 있지만, 그 중에서 가장 많이 사용되는 함수를 뽑아보았다.


1. random의 대표함수는 random이다.

0부터 1까지 중에서 소수점자리의 숫자를 무작위로 추출해준다. 함수의 입력인자로 넣을 수 있는 값은 없다.

random.random()

Out[3]: 0.3719802302255245


2. randrange는 범위안의 숫자를 뽑아준다.

random모듈에서 가장 유용하게 사용될 수 있는 모듈이다. 함수의 입력인자로 From, To, Step을 지정할 수 있다. 예를 들어 3에서 10까지의 숫자를 1단위로 무작위 추출하고 싶다면 아래와 같이 작성하면 된다.

From ~ To는 이상 ~ 미만이다. 소수점도 가능하면 좋겠지만, 정수만 가능하다.

random.randrange(3, 10, 1)

Out[133]: 4


3. 여러 개 중에 random choice도 가능하다.

choice함수를 이용하면, 단일값을 choices를 사용하면 여러 개의 값을 random으로 추출할 수 있다. 아래와 같이 1부터 10까지의 list가 있다고 하자. choice함수를 이용하면 숫자 하나를 추출할 수 있다.

temp = list( range(1, 11, 1) )

random.choice(temp)

Out[142]: 4


choices함수는 원하는 갯수만큼 추출이 가능하다.

random.choices(temp, k=3)

Out[145]: [7, 9, 1]


이 외에도 값을 섞는 shuffle, 표본을 추출하는 sample, 정규분포 값을 random으로 뽑아주는 uniform 함수가 있다.


이 외에도 다른 randm함수들이 궁금하다면, 아래 파이썬 튜토리얼을 참조하도록 하자.

( 참조: 파이썬 튜토리얼에서 random함수 확인하기 )


4. numpy의 permutaion도 유용하다.

numpy패키지에도 유용한 random함수가 있다. permutaion이라는 함수인데, 입력인자로 넣은 숫자만큼의 수를 무작위로 생성한다. 여기에 판다스의 take함수를 같이 사용하면, 데이터프레임을 무작위로 만들 수 있다.

import numpy as np

temp = np.random.permutation(5)

import pandas as pd

df = pd.DataFrame({"a":[1,2,3,4,5]})

df.take(temp)

Out[166]: 

   a

0  1

4  5

1  2

2  3

3  4


이 방법을 이용해서 train, test셋을 나눌 수도 있다. 물론 판다스의 train_test_split 함수를 더 자주 사용하게 되기는 한다.



오늘은 이렇게 파이썬 랜덤값 생성, random모듈에 대해서 알아보았다. 파이썬에 기본으로 설치돼 추가 설치는 필요없다. 사용방법이 어렵지는 않으나 자주 사용하지 않다보니 잘 기억이 나지 않을 때가 있다. 사실 randrange함수만 이용하면, 웬만한 범위의 random값은 다 만들 수 있다. 예를 들어 0.3~0.5초간 정지시키고 싶다면, time.sleep모듈을 이용해서 time.sleep( randrange(3, 6, 1)/10 )이라고 작성하면 된다.

random값은 은근히 많이 사용되므로, 이번 기회에 잘 익혀두면 좋을 듯 하다.


오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.

(참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)


댓글()