IT/Python

[Python] 로또 당첨번호 추천 통계 적용

잿호 2023. 10. 17. 22:45
- 실행 화면 -

     


    설계

    1. 동행복권에서 받아온 역대 당첨 회차 데이터를 활용하여 이미 당첨된 번호를 모두 거르고 추천해준다.

     


    과정

     

    - 동행복권 사이트-

     

     먼저 동행복권 사이트에서 회차별 당첨번호 데이터를 받아줍니다.


    - 데이터 초기 모습 -

    저희가 필요한건 당첨번호 데이터 뿐이니 미리 불필요한 데이터는 날려줍시다.


    - 전처리 완료 -

     당첨번호와 년도만 남기고 싹다 날렸습니다. 이제 이 파일을 csv 형식으로 data/ 경로에 저장해줍니다.

    이제 대충 준비는 끝났습니다. 코딩을 해보겠습니다.


     pandas를 임포트하여 아까 저장한 csv파일을 불러와줍니다. 다시 생각해보니 년도도 별 필요가 없을 것 같지만 이왕 이렇게 된거 결측치를 채우는 방법을 알아봅시다.


    - 결측치 채우기 -

     fillna() 함수를 사용하여 위에 값을 아래에 그대로 넣어주는 전처리를 해주었습니다. 간단하죠? 


    - 로또 번호 생성-

     numpy를 임포트하여 넘파이의 random.choice를 사용해줍시다. 이 choice는 겹치지않은 값을 뽑아주는 기능으로 6개의 겹치지 않는 6개의 로또 번호를 만들어줍니다. 하지만 순서가 뒤죽박죽하니 정렬이 필요할 것 같습니다.


    - sort() 활용 -

     sort()를 활용하여 오름차순으로 정렬했습니다. 이제 데이터와 비교하여 겹치는 값을 찾아줄텐데요. 그전에 먼저 데이터의 년도를 날려주도록 하겠습니다.


    - 년도 컬럼  제거 -

    data = data[["1","2","3","4","5","6","보너스"]] 를 활용해 당첨번호만 남겨뒀습니다.


    - loc[1].isin(lotto) 테스트 -

     조금 생각을 해봤습니다. 로또의 행마다 당첨번호가 한 세트 씩 존재합니다. lotto 번호가 6개이상 존재하면 1등 당첨이라는 뜻이니 행의 로또 번호의 True값의 개수를 세어서 6이상이면 새로운 로또번호를 만들면 되겠네요. 이 과정에서 로또번호를 여러번 받을 것 같으니 따로 함수로 만들어 빼주겠습니다.


    - 완성 -

    i는 0 부터 1씩커지며 반복합니다. 만약 중간에 당첨이 확인되었다면 새로운 로또번호를 받아온뒤 i를 0으로 돌려 다시 처음부터 과정을 반복합니다. 만약 당첨된 번호가 아닐경우 print문으로 당첨번호를 알려줍니다.


     

    코드

    import pandas as pd
    import numpy as np
    
    # 로또 번호 생성
    def lotto():
        lotto = np.random.choice(range(1, 46), 6, replace=False)
        lotto.sort()
        return lotto
    
    # 회차별 로또번호 데이터테이블 로드 & 전처리
    data = pd.read_csv("data/로또당첨번호.csv", encoding='cp949')
    data = data[["1","2","3","4","5","6","보너스"]]
    data
    
    # 중복 숫자 거르기
    lotto = lotto()
    i=0
    while(i == len(data)):
        count_data = data.loc[i].isin(lotto)
        if len(count_data[count_data==True]) >= 6:
            lotto = lotto()
            i=0
    
            
    print(f"로또 추천번호는{lotto}입니다!")

     


    마무리

     다른 코딩 블로거 분들은 설명하시며 포스팅을 하셔서 저도 따라 해봤습니다. 확실히 공부하는 느낌이 들어서 뿌듯하네요복권 번호 추천 사이트에 영감을 받아 비슷한 알고리즘으로 번호를 추천해줍니다.

    로또는 독립시행이라 번호가 당첨되었다 한들 다음번 번호추첨 확률에 영향을 끼치지 않아, 한번 나온번호가 이론상으론 두번 세번도 나올수있습니다.  즉 번호추천을 받든 말든 확률은 별 다를바 없다는 것 입니다.

     

    통계로 보면 당첨 건수 중 자동이 70건, 수동이 31건, 반자동이 6건으로 자동 당첨자가 약 65%로 가장 많은 수를 차지 했다고합니다.

    그냥 맘 편하게 자동으로 돌립시다.

    반응형

    'IT > Python' 카테고리의 다른 글

    [Python] 소수를 세자  (0) 2023.10.10
    [Python] 고양이 응용+ (다중 다운로드)  (0) 2023.10.09
    [Python] 고양이  (30) 2023.10.09
    [Python] 문자 대체 프로그램  (0) 2023.10.06
    [Python] 요트다이스 (Yacht)  (1) 2023.10.02