본문 바로가기

파이썬으로 로또 1등 도전기

22일차) 출현 빈도 상위 3개와 하위 3개 번호 제외수 추가

 


안녕하세요, 로또 애호가 여러분! 🎉 오늘은 로또 번호의 출현 빈도를 활용해 어떤 번호를 제외해야 할지에 대한 재미있는 방법을 공유하려고 합니다. 로또를 한 번이라도 해보신 분들은 아시겠지만, 매번 같은 번호를 선택하다 보면 "이 번호는 도대체 왜 이렇게 자주 나오는 거지?" 하는 생각이 드실 겁니다. 🤔

### 출현 빈도가 중요한 이유

로또는 기본적으로 무작위로 번호가 뽑히지만, 특정 번호들이 과거에 더 자주 등장하는 경향이 있습니다. 그렇기 때문에 출현 빈도를 살펴보는 것은 매우 유용합니다. 예를 들어, 최근 30회차의 로또 번호를 분석하면, 어떤 번호가 빈번하게 등장했는지를 알 수 있습니다.

### 빈도 수 집계하기

우리가 사용할 방법은 두 가지입니다:
1. 최근 30회차 로또 번호를 수집합니다.
2. 각 번호의 출현 빈도를 계산하여, 가장 많이 나온 번호 3개와 가장 적게 나온 번호 3개를 찾아냅니다.

이제 코드로 직접 확인해볼까요?

def fetch_recent_lotto_frequencies():
    """
    현재 회차부터 최근 30회차의 로또 번호를 가져오고,
    각 번호의 출현 빈도를 반환하는 함수입니다.
    """
    current_draw = get_latest_draw_no()  # 최신 회차를 동적으로 가져옴
    recent_lotto_numbers = []

    for i in range(current_draw, current_draw - 30, -1):
        url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={i}"
        response = requests.get(url)
        data = response.json()

        if data['returnValue'] == 'success':
            numbers = [
                data['drwtNo1'], data['drwtNo2'], data['drwtNo3'],
                data['drwtNo4'], data['drwtNo5'], data['drwtNo6']
            ]
            recent_lotto_numbers.extend(numbers)  # 모든 번호를 리스트에 추가

    # 출현 빈도 계산
    frequency_counter = Counter(recent_lotto_numbers)

    # 결과를 빈도수 별로 정렬
    sorted_frequencies = sorted(frequency_counter.items(), key=lambda x: x[1], reverse=True)

    # 상위 3개와 하위 3개 번호 추출
    top_numbers = [number for number, count in sorted_frequencies[:3]]
    bottom_numbers = [number for number, count in sorted_frequencies[-3:]]

    # 숫자만 반환
    return top_numbers + bottom_numbers



위의 코드는 현재 회차부터 최근 30회차의 로또 번호를 수집한 후, 각 번호의 출현 빈도를 계산하여 상위 3개와 하위 3개 번호를 추출합니다.

### 제외 숫자 리스트 만들기

이제 우리가 수집한 출현 빈도를 사용하여 유니크한 제외 숫자 리스트를 만들어보겠습니다. 아래와 같은 과정을 통해 상위와 하위 번호를 제외 숫자에 추가할 수 있습니다.

def get_combined_excluded_numbers(round, combined_excluded_numbers):
    """
    최근 30회차 로또 번호를 가져오고,
    출현 빈도를 기반으로 상위 3개 및 하위 3개 번호를 추가한 유니크한 제외수 리스트를 반환합니다.
    """
    # 최근 30회차 로또 번호를 가져옴
    recent_lotto_numbers = fetch_recent_lotto_missing_numbers()
    combined_excluded_numbers.update(recent_lotto_numbers)

    winning_numbers = fetch_winning_numbers()
    print('winning_numbers : ', winning_numbers)
    
    # 전, 전전 회차와의 중복된 숫자 추가
    excluded_from_consecutive = find_consecutive_excluded_numbers(winning_numbers, round)
    print('excluded_from_consecutive : ', excluded_from_consecutive)
    
    combined_excluded_numbers.update(excluded_from_consecutive)

    # 유니크한 excluded_numbers를 정렬
    unique_excluded_numbers = sorted(combined_excluded_numbers)

    # 최근 30회차 로또 번호 출현 빈도 가져오기
    frequency_numbers = fetch_recent_lotto_frequencies()

    # 상위 3개 및 하위 3개 번호 추가
    top_excluded = frequency_numbers[:3]
    bottom_excluded = frequency_numbers[-3:]

    # 유니크한 제외수에 상위 및 하위 번호 추가
    unique_excluded_numbers.extend(top_excluded)
    unique_excluded_numbers.extend(bottom_excluded)

    # 중복 제거 후 정렬
    unique_excluded_numbers = sorted(set(unique_excluded_numbers))

    return unique_excluded_numbers



### 결론

이제 여러분은 최근 로또 번호의 출현 빈도를 바탕으로 상위 및 하위 번호를 제외 숫자에 추가할 수 있는 방법을 알게 되었습니다! 🥳 이러한 방식은 여러분이 선택할 번호의 범위를 좁히는 데 큰 도움이 될 것입니다. 물론 로또는 운이 많이 작용하는 게임이지만, 조금 더 전략적으로 접근하면 성공 확률을 높일 수 있을지도 모릅니다.

이제 여러분도 로또 번호 선택 시 빈도를 고려해 보세요! 다음 번 로또 추첨에서 행운이 함께하길 바랍니다! 🍀✨