본문 바로가기
공부 목록/IT & 프로그래밍

파이썬에서 랜덤한 데이터를 생성하기 위한 방법(feat. rand 함수)

by 독학박사 2023. 6. 13.

목차


     파이썬을 사용하여 어떠한 알고리즘을 개발하려고 할 때 임의의 데이터를 사용하여 검증이 필요한 때가 있습니다. 또한, 실제의 데이터에 임의의 노이즈를 삽입하기 위해 랜덤 한 값을 무작위로 생성하여 결합하는 경우도 많습니다. 이번 포스팅에서는 난수 데이터를 생성하는 방법들에 대해 정리해 보려고 합니다.

     

     

    파이썬에서 랜덤 데이터 생성 방법
    파이썬에서 랜덤 데이터 생성 방법

     

    1. 난수(random number)란?

    난수는 예측할 수 없이 발생하는 수들로 어떤 패턴이나 규칙을 찾을 수 없는 무작위 한 값입니다. 이러한 난수는 컴퓨터 프로그램이나 데이터 가공에서 많이 사용됩니다. 일반적으로 난수의 사용은 다음과 같습니다.

     

    시뮬레이션

     과학, 공학, 경제 등의 분야에서 난수를 사용하여 현실 세계의 다양한 현상을 모델링하고 시뮬레이션할 수 있습니다.

     

    암호학

     암호화 알고리즘에서 난수는 키 생성이나 초기화 벡터(IV, Initialization Vector) 등에 사용됩니다.

     

    게임 및 재미 요소

     컴퓨터 게임, 카드 게임, 복권 등에서 난수는 무작위성과 다양성을 제공하여 게임의 흥미와 재미를 높입니다.

     

    통계 및 확률론

     확률 모델링, 통계적 시뮬레이션, 샘플링 등에서 난수는 중요한 도구입니다.

     

     

    2. 파이썬의 기본 난수 생성 함수 : numpy.random.rand()

     파이썬의 numpy 라이브러리에서는 난수를 생성할 수 있는 rand() 함수를 제공하고 있습니다. rand() 함수의 사용은 다음과 같습니다. 'numpy.random.rand()' 함수는 주어진 형태(shape)의 배열로 [0, 1) 범위의 균일 분포(uniform distribution)에서 난수를 생성해 줍니다. 함수의 시그니처는 아래와 같습니다.

     

    numpy.random.rand(d0, d1,..., dn)

     

    함수 내 인자인 d0, d1,..., dn 들은 생성하려는 난수 배열의 각 차원의 크기를 나타내며, 배열의 형태(shape)를 결정합니다. dn으로 필요한 만큼의 차원 크기를 지정할 수 있습니다. 사용 예시는 다음과 같습니다.

     

    import numpy as np
    
    # 2x3 크기의 배열 생성
    array = np.random.rand(2, 3)
    print(array)
    
    # 결과값
    # [[0.23402917 0.87283994 0.09113993]
    # [0.45718461 0.5323151 0.68714195]]

     

    위의 예시에서 numpy.random.rand() 함수는 0과 1 사이의 값을 갖는 2x3 크기의 배열을 생성하고, 각 원소는 균일 분포 [0, 1) 범위에서 무작위로 선택된 값을 갖습니다. 호출할 때마다 다른 결과가 생성되므로, 실제 실행 시에는 출력값이 달라질 수 있습니다.

     

     

    3. 실행 시마다 같은 난수값을 얻고 싶다면 : seed() 설정

    numpy.random.seed() 함수는 난수 생성 시드(seed)를 설정하는 함수입니다. 난수 생성 시드를 설정하면 같은 시드를 사용하는 경우에 항상 동일한 난수가 생성됩니다. 이를 통해 난수 생성의 재현성을 확보할 수 있습니다. seed() 함수의 시그니처는 다음과 같습니다.

     

    numpy.random.seed(seed=None)

     

    함수의 인자인 seed (정수 또는 None, 옵션)는 난수 생성 시드로 사용할 값을 지정합니다. 기본값은 None이며, 이 경우 시스템 시간 등을 기반으로 시드가 자동으로 선택됩니다. 정수를 전달하는 경우 해당 값을 시드로 사용합니다. 아래 예제코드를 보면 이해가 쉬울 겁니다.

     

    import numpy as np
    np.random.seed(123)  # 시드를 123으로 설정
    
    # 난수 생성
    random_number_1 = np.random.randint(1, 101)
    random_number_2 = np.random.randint(1, 101)
    
    print('Seed : 123')
    print(random_number_1)
    print(random_number_2)
    
    np.random.seed(456)  # 시드를 456으로 변경
    
    # 난수 생성
    random_number_1 = np.random.randint(1, 101)
    random_number_2 = np.random.randint(1, 101)
    
    print('Seed : 456')
    print(random_number_1)
    print(random_number_2)
    
    np.random.seed(123)  # 시드를 123으로 설정
    
    # 난수 생성
    random_number_1 = np.random.randint(1, 101)
    random_number_2 = np.random.randint(1, 101)
    
    print('Seed : 123')
    print(random_number_1)
    print(random_number_2)
    
    # 결과값
    # Seed : 123
    # 67
    # 93
    # Seed : 456
    # 28
    # 44
    # Seed : 123
    # 67
    # 93

     

    초기 seed를 123으로 했을 때 67과 93이 생성되었으며 seed값을 변경했을 때 다른 난수가 생성되었습니다. 하지만 다시 123으로 seed를 변경하니 처음 seed를 설정했을 때와 같은 난수가 생성되는 것을 확인할 수 있습니다. 같은 값을 나타내는 예를 위해 특정 범위의 난수를 생성하는 randint() 함수를 사용했습니다. 해당 함수를 아래 이미지를 클릭하면 내용을 확인할 수 있습니다.

     

     

    https://lifelong-education-dr-kim.tistory.com/entry/특정-범위-정수형-임의의-수를-위한-nprandomrandint-함수

     

    특정 범위 정수형 임의의 수를 위한 np.random.randint() 함수

    파이썬의 라이브러리인 numpy는 난수를 생성시키는 random 모듈이 있습니다. random 모듈에는 난수를 생성하는 다양한 함수가 있는데, 각 함수의 기능을 정확히 알아야 필요시 바로 사용할 수 있습니

    lifelong-education-dr-kim.tistory.com

     

     

    4. 마치며

     파이썬에서 난수를 생성할 수 있는 함수 np.random.rand()에 대한 내용을 정리해 봤습니다. 매 실행 시 같은 난수값을 얻고 싶다면 np.random.seed() 함수를 같이 사용해야 한다는 설명도 드렸습니다. rand() 함수는 [0, 1)의 범위의 값을 생성하기 때문에 특정범위 내의 난수를 생성하려면 다른 함수를 사용해야 합니다. 이번 포스팅에서는 내용이 길어져 다음 포스팅에서 해당 내용을 다루려고 합니다.