데이터/데이터 분석

[Python] 로또는 운일까 ? (로또 데이터 분석) - 1편. 로또 정보 수집하기

Jerry_K 2024. 7. 5. 00:43

🔍 로또는 운일까 ? 

최근에 나에게 안좋은 일들이 많이 생겼었다. 

기분도 꿀꿀하고, 로또나 한장 사려고 편의점에 들어가서 구매를 했다.

 

그리고 토요일 밤에 집에 가는 길,

아무 생각없이 결과를 확인해봤는데, 4등에 당첨이 된 것이다 !!! 

(내가 1/733 경쟁률을 뚫었다고 !? )

 

버스를 타면서, 로또에 대해 분석해보고 싶은 생각이 들었고 

집에 와서 데이터 분석을 위한 몇 개의 코드를 작성해 보았다. 

로또 홈페이지

1등에 당첨되려면, 대략 8,145,060,000 원을 쓰면 된다..?!

(8억이 아니라 81억임 ...)

 

고작 이 데이터 분석으로  당첨될거라는 생각은 당연히 하지 않는다.

다만,주어진 데이터로 재밌는 인사이트들을 추출 해보고자 한다. 

각각의 독립적인 사건들로 만들어진 무의미한 데이터가 의미가 있을지를 탐구해보자

 

로또 번호를 어떻게 찍어야 좋을지를, 어떤 번호가 잘 나오는지 등등 ...

솔직히 만들어 둔게 별로 없어서, 정확히 어떤 것들을 분석할지는 모르겠다...!!

차근 차근 유의미한 것들을 쌓아보자 !!

 

그리고 데이터 분석을 통해 나온 결과를 약 1년동안 꾸준히 사보려고 한다.

매번 온라인 사이트 접속해서 사는 것도 귀찮으니, 간단한 코드 실행으로 로또를 구매하는 코드도 만들어보자.

 

스포어하자면, 1차적으로 분석했을 때 7,14,20,26,33,40의 번호가 나옴


📕로또 (데이터 분석) - 1편. 로또 정보 수집하기

회차별 로또 당첨 번호는 아주 간단한 API로 추출 가능하다. 

Secret key가 없으니, 언제 어디서나 코드 작동이 된다

 

import requests
import pandas as pd

 

 VSCode에서  로또 파일을 만들고, 확장자 py 파일을 만들어준다.

그리고 해당 라이브러리들을 import 하자.

 

 

# 먼저 기존 CSV 파일을 불러오기 (만약 파일이 없으면 새롭게 생성 후 저장)
try:
    lotto_df = pd.read_csv('lotto_numbers.csv', index_col=0, encoding='utf-8-sig')
except FileNotFoundError:
    lotto_df = pd.DataFrame()
    lotto_df.to_csv('lotto_numbers.csv', encoding='utf-8-sig')

 

 해당 코드는 lotto_number.csv 파일 유무를 확인하고, 없으면 만들어주는 코드이다. 

(중간에 데이터를 불러오는 과정 에러가 생기면, 처음부터 다시 시작해야하는데, 이를 방지하고자 함)

 

 

# 1회차부터 1126회차까지 반복
for drwNo in range(0,1126):
    url = f"http://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={drwNo}"
    response = requests.get(url)
    
    # 데이터를 저장할 빈 리스트 생성
    draw_dates = []
    winning_numbers = {
        '1st': [],
        '2nd': [],
        '3rd': [],
        '4th': [],
        '5th': [],
        '6th': [],
        'bonus': [],
        'firstPrzwnerCo': [],  #1등 당첨 인원
        'firstWinamnt' :[], # 1등 상금액
        'totSellamnt' : [] # 총 상금액     
        }


    if response.status_code == 200:
        data = response.json()
        
        # 회차 추가
        draw_dates.append(data['drwNoDate'])
        
        # 당첨번호 추가
        winning_numbers['1st'].append(data['drwtNo1'])
        winning_numbers['2nd'].append(data['drwtNo2'])
        winning_numbers['3rd'].append(data['drwtNo3'])
        winning_numbers['4th'].append(data['drwtNo4'])
        winning_numbers['5th'].append(data['drwtNo5'])
        winning_numbers['6th'].append(data['drwtNo6'])
        winning_numbers['bonus'].append(data['bnusNo'])
        winning_numbers['firstPrzwnerCo'].append(data['firstPrzwnerCo'])
        winning_numbers['firstWinamnt'].append(data['firstWinamnt'])
        winning_numbers['totSellamnt'].append(data['totSellamnt'])
        
        # 새로운 데이터 프레임 생성
        new_data = pd.DataFrame(winning_numbers, index=draw_dates)
        lotto_df = pd.concat([lotto_df, new_data])

        # CSV 파일로 저장
        lotto_df.to_csv('lotto_numbers.csv', encoding='utf-8-sig')

        print(f"{drwNo}회차 데이터 수집 완료")
        
    else:
        print(f"{drwNo}회차 데이터 요청 실패")

 

2024년07월05일 기준, 가장 최근 회자는 1126이다. 

해당 API의 url에서 마지막 숫자만 바꿔주면, 원하는 값을 얻을 수 있다.

데이터를 json 형태로 바꾸고 필요한 컬럼들을 winning_number에 넣어주며 csv 파일을 갱신해준다.

 

길어도 5분정도면 , 원하는 데이터를 csv 파일로 저장시킬 수 있을 것이다.

 

 

저장된 파일을 살펴보면, 잘 저장된 것을 확인 할 수 있다.


 

 

 

GitHub - jerry-1211/lotto_analysis: 로또를 분석해보고 의미있는 인사이트를 얻어봅니다.

로또를 분석해보고 의미있는 인사이트를 얻어봅니다. Contribute to jerry-1211/lotto_analysis development by creating an account on GitHub.

github.com

 

내용은 깃허브 업로드 되어있습니다.