로또 당첨 번호 데이터 추출 하여 데이터화하기(python, mysql)

2024. 11. 15. 09:28Programming/python

로또 당첨 번호 데이터 추출 하여 데이터화하기(python, mysql)

이전시간에 역대 로또 번호를 추출하여 csv파일로 만드는 법을 해보았습니다.
> 역대 로또 당첨 번호 데이터 추출 ver.python

 

역대 로또 당첨 번호 데이터 추출 ver.python

파이썬으로 로또 당첨 번호 데이터를 수집하는 방법로또 데이터는 많은 사람들이 관심을 가지는 정보 중 하나입니다. 특히 역대 로또 당첨 번호, 당첨금 등은 통계 자료로도 활용될 수 있습니다

fflask.tistory.com

이번에는 이전에 해보려고 했던 데이터 베이스화 를 진행해보겠습니다.


주요 내용

이전과 같은 방식으로 진행되지만 변경 사항으로 csv에서  mysql 이 추가됩니다.

  • API 활용: 로또 데이터를 제공하는 API를 사용.
  • Python 라이브러리: requests를 통해 데이터를 가져오고, mysql 데이터 베이스에 데이터 저장.
  • 데이터 필터링: 필요한 정보만 추출하여 mysql 데이터 베이스에 저장

mysql workbench설치 방법은 이전에 작성한 글이 있으니 참조하시기 바랍니다. -> 링크

 

[Window] MySQL Install

MySQL Install MySQL은 가장 인기 있는 오픈 소스 데이터베이스 관리 시스템 중 하나입니다. Mysql 설치는 최소 설치를 기준으로 하고 있습니다. 설치과정 1.Mysql 다운로드 홈페이지 접속 아래의 링크로

fflask.tistory.com

 


1. 필요한 Python 라이브러리 설치

mysql 라이브 러리가 설치가 안되어 있다면 아래의 명령어로 설치하시기 바랍니다.

pip install mysql.connector

저는 설치가 되어 있어서 업데이트가 진행되었습니다. 아마 환경에 따라서 출력되는 결과도 다르겠지만 정상적으로 설치되었음을 확인할 수 있습니다.


2. 데이터베이스 구축

저는 mysql 데이터 베이스를 이렇게 구축했습니다.

CREATE TABLE `lotto_data` (
  `lotto_seq` int NOT NULL AUTO_INCREMENT,
  `lotto_number_1` int DEFAULT NULL,
  `lotto_number_2` int DEFAULT NULL,
  `lotto_number_3` int DEFAULT NULL,
  `lotto_number_4` int DEFAULT NULL,
  `lotto_number_5` int DEFAULT NULL,
  `lotto_number_6` int DEFAULT NULL,
  `lotto_bonus_number` int DEFAULT NULL,
  `lotto_total_sell_amnt` bigint DEFAULT NULL,
  `lotto_total_winners` bigint DEFAULT NULL,
  `lotto_total_first_winners` int DEFAULT NULL,
  `lotto_first_prize` bigint DEFAULT NULL,
  `lotto_drw_date` date DEFAULT NULL,
  `lotto_drw_number` int DEFAULT NULL,
  PRIMARY KEY (`lotto_seq`)
) ENGINE=InnoDB AUTO_INCREMENT=1146

테이블 은 이렇게 생성되어 있습니다.

여기서 lotto_total_sell_amnt 등 bigint인건 숫자 크기가 너무 터서 int로 했을 때 레이지 오버되어 인서트가 안되기 때문입니다.


3. 파이썬 코드

main 메서드:

def main():
    connection = create_connection()
    if connection is None:
        return

    for num in range(constants.start_num, constants.end_num + 1):
        url = constants.base_url + str(num)
        try:
            중략...
            if data.get('returnValue') == 'success':
                filtered_data = {constants.key_mapping[k]: data[k] for k in constants.key_mapping if k in data}
                insert_lotto_data(connection, filtered_data)
            else:
                print(f"Draw number {num} returned no data.")
        except requests.exceptions.RequestException as e:
            print(f"Error fetching data for draw number {num}: {e}")

    if connection.is_connected():
        connection.close()
        print("MySQL connection is closed")

create_connection() 메서드를 실행하여 mysql 데이터 베이스와 커넥션 해줍니다.

 

create_connection메서드:

def create_connection():
    try:
        connection = mysql.connector.connect(
            host='localhost',  # mysql host name
            database='lotto',  # mysql database 이름
            user='root',  # mysql user name
            password=''  # mysql 패스워드
        )
        if connection.is_connected():
            print("Connected to MySQL database")
        return connection
    except Error as e:
        print("Error while connecting to MySQL", e)
        return None

local에서 진행하였기에 localhost라고 작성해 두었지만 필요에 따라서는 외부 db에 사용하셨다면 db ip 또는 url를 작성하시면 됩니다.

database name은 lotto로 로또니까 로또로 작성했습니다. 로또잖아요~:)

 

mysql insert쿼리:

INSERT INTO lotto_data (
lotto_drw_number, lotto_number_1, lotto_number_2, lotto_number_3, lotto_number_4, lotto_number_5, 
                lotto_number_6, lotto_bonus_number, lotto_total_sell_amnt, lotto_total_winners, lotto_total_first_winners, 
                lotto_first_prize, lotto_drw_date
            ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)

4. 결과

정상적으로 loging 일 끝나고 mysql connection도 끊긴 것을 콘솔에서 확인 

mysql 워크 밴치에서 정상적으로 데이터가 들어왔는지 확인해보겠습니다.

> SELECT * FROM lotto_data;

1145개의 데이터가 들어온 것을 확인했습니다.


6. 활용 방안

  • 당첨 번호 통계 분석 : 번호별 출현 빈도를 분석하거나 특정 패턴을 연구
  • 1등 당첨금 추이 분석 : 회차별 1등 당첨금의 변화를 시각화
  • 당첨확률이 높은 번호 생성 : 물론 이게 불가능한 것이기는 하지만 당첨률이 높은 번호를 조합하여 추첨할 수는 있을 것으로 보입니다.
  • 추가적으로 방법이 있으면 공유 부탁드립니다. 

7. 결론

이 포스팅에서는 파이썬을 활용하여 로또 API에서 데이터를 수집하고 mysql데이터 베이스에 저장하는 방법을 다뤘습니다.

간단한 코드지만, 수집한 데이터를 활용하여 다양한 분석과 서비스를 개발할 수 있습니다.
현재는 로또 번호를 가지고 간단한 데이터를 가지고 왔지만 코드를 참고하여 추가적으로 다른 데이터를 가지고 와 데이터 분석하는 것에 활용이 가능할 것으로 보입니다.

 

다음에는 파워볼 데이터를 한번 해보겠습니다.

수고하셨습니다. 

코드는 추후 github에 공유하겠습니다.

 

구독과 좋아요 부탁드려요~!

반응형