로또 데이터를 쉽게 수집할 수 있는 API가 있습니다. 크롤링을 이용할 수도 있지만 시간과 노력이 더 많이 듭니다. 로또 API는 입력 파라미터에 회차를 넣으면 당첨번호와 추첨 일자, 당첨금액 등을 쉽게 확인할 수 있습니다. 어떻게 사용하는지 알아보겠습니다.

 

 

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

 

많은 사람들이 당첨확률을 높일 수 있는 방안들을 연구하고 있습니다. 로또분석을 위해 필요한 데이터가 제공되고 있길래 공유하고자 합니다. 오늘은 로또API, 파이썬 로또 데이터 수집하는 방법에 대해서 알아보겠습니다.

 

 

1. 로또 API 주소 및 사용 방법

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

 

 

예를 들면 http://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=1 이라고 주소창에 입력하면, 1회 차의 로또 당첨 결과가 회신됩니다. 웹브라우저에서 주소를 입력해도 결괏값을 바로 확인할 수 있습니다. 위 주소를 입력하면, 아래와 같은 결과를 확인할 수 있습니다.

 

{"totSellamnt":3681782000,"returnValue":"success","drwNoDate":"2002-12-07","firstWinamnt":0,"drwtNo6":40,"drwtNo4":33,"firstPrzwnerCo":0,"drwtNo5":37,"bnusNo":16,"firstAccumamnt":863604600,"drwNo":1,"drwtNo2":23,"drwtNo3":29,"drwtNo1":10}

 

  • totSellamnt: 누적금액
  • returnValue: 실행결과
  • drwNoDate: 추첨 일자
  • firstWinamnt: 1등 당첨금
  • firstPrzwnerCo: 1등 당첨 인원
  • bnusNo:보너스 번호
  • drwNo: 회차
  • drwtNo1~6: 당첨번호 숫자

 

 

2. 파이썬으로 수집하기

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 프로그램입니다.

 

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()

 

 

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

 

Recommendation 포스팅

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기