로또API, 파이썬 로또 데이터 수집하는 방법은?!

2021. 8. 23. 23:14

확률 이야기를 하면서, 가장 많이 거론되는 주제 중에 하나가 로또가 아닐까 한다. 로또를 맞춘다는 것은 벼락을 두 번이나 맞고도 살아남을 확률보다 낮다고 한다. 45개중에서 6개를 뽑을 확률인데, 경우의 수가 무려 8,145,060개나 된다고 합니다. 물론 이것은 45개의 번호를 랜덤하게 선택한다는 것을 기준으로 하고, 이론상으로 45개 중에 하나의 번호가 나올 확률은 모두 똑같다.

 

하지만 많은 사람들은 당첨확률을 높일 수 있는 방안들을 연구하고 있다. 이렇게 연구하여 나온 결과가 맞는지는 잘 모르겠지만, 로또분석을 위해 필요한 데이터가 제공되고 있길래 공유하려고 한다. 오늘은 로또API, 파이썬 로또 데이터 수집하는 방법에 대해서 알아보도록 하겠다.

 

 

로또 데이터 수집

 

 

나눔로또 싸이트에 공식적으로 오픈되어 있는 것은 아니지만, 특정 URL 뒤에 회차를 입력하면 로또 당첨결과가 json 형태로 제공된다.

 

예를 들면 http://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=1 이라고 주소창에 입력하면, 1회차의 로또 당첨 결과가 회신된다.

 

json으로 회신받은 데이터를 파싱하고, DB에 저장하기 위해 파이썬을 사용하였다. 다른 프로그래밍 언어를 사용해도 되지만, 파이썬은 문법이 쉽고 이미 개발된 패키지들이 많아 쉽게 작업할 수 있다.

 

파이썬으로 로또 번호를 수집하기 위해 우선 필요한 모듈을 불러온다.

import pandas as pd
import sqlite3
from tqdm import tqdm
from urllib.request import urlopen
import json

 

위의 URL에 접속해서, 데이터를 수집하는 부분은 함수로 만들었다. 수집하고 하는 회차를 입력 파라미터로 넣으면, 해당 회차의 로또 당첨결과를 수집할 수 있다.

수집한 데이터는 json.loads() 함수로 파이썬 딕셔너리 자료형으로 바꿨다. 그리고 from_dict를 통해 딕셔너리 자료형을 판다스 데이터프레임으로 바꾼다. 행과 열이 바꿔져 있어 transpose 함수를 이용해 행과 열을 바꿔 준다.

def lotto(chasu):
    url="http://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo="+str(chasu)

    result_data = urlopen(url)
    result = result_data.read()

    data = json.loads(result)
    data_1 = pd.DataFrame.from_dict(data,orient='index')
    data_1=data_1.transpose()

    return data_1

 

마지막으로 반복문을 이용하여 1회부터 100회까지의 당첨결과를 수집하였다. 수집한 데이터는 SQLite DB로 저장하였다. SQLite는 개인 컴퓨터에서 사용하기 좋은 DB프로그램이다. SQLite에 대해서는 이전 포스팅에서도 다루었으니 참고하기 바란다.

for i in tqdm(range(1,100)):
    data_1=lotto(i)

    if data_1.loc[0,"returnValue"]=="fail":
        pass
    else:
        con = sqlite3.connect("./data/lotto.db")
        data_1.to_sql('lent', con, if_exists='append', index=False)
        con.close()

 

로또 당첨 결과를 분석해 당첨확률을 높이실 수 있는 분들이 있다면, 한 번 도전해 보는 것도 좋을 것 같다. 로또에 당첨될 지는 모르겠지만 확률 공부는 제대로 하지 않을까 하고 생각한다.

댓글()