2024. 11. 14. 12:30ㆍProgramming/python
파이썬으로 로또 당첨 번호 데이터를 수집하는 방법
로또 데이터는 많은 사람들이 관심을 가지는 정보 중 하나입니다. 특히 역대 로또 당첨 번호, 당첨금 등은 통계 자료로도 활용될 수 있습니다. 이번 포스팅에서는 Python을 활용하여 역대 로또 당첨 번호 데이터를 수집하고 CSV 파일로 저장하는 코드를 작성하는 과정을 공유합니다. 절대 작성자가 로또를 사도 당첨이 안 되는 이유를 알기 위해 작성된 게 아닙니다!!
우선 데이터를 가지고 올 수 있는 지 부터 확인을 진행하겠습니다.
로또 복권 사이트 링크
https://dhlottery.co.kr/
확인할 수 있는 방법이 있는지 체크를 위해 접속해줍니다.
해당 페이지의 방향 선택 시 동작하는 api가 있다는 걸 확인
그럼 해당 api가 정상동작 어떻게 잘 동작하는지 확인합니다.
postman으로 api테스트해보니 정상 적으로 잘 동작하는 것을 확인했습니다. 그럼 시작해 보죠
주요 내용
- API 활용: 로또 데이터를 제공하는 API를 사용.
- Python 라이브러리: requests를 통해 데이터를 가져오고, csv를 통해 파일로 저장.
- 데이터 필터링: 필요한 정보만 추출하여 CSV에 저장.
1. 필요한 Python 라이브러리 설치
먼저 requests 라이브러리가 설치되어 있는지 확인하세요. 설치가 안 되어 있다면 아래 명령어를 실행합니다:
설치가 안되어 있으면 설치하시면 됩니다.
pip install requests, csv
2. 로또 API 데이터 구조 이해
로또 데이터를 제공하는 API에서 반환되는 JSON 데이터는 다음과 같은 구조를 가지고 있습니다:
{
"drwNo": 1117,
"totSellamnt": 113895333000,
"returnValue": "success",
"drwNoDate": "2024-04-27",
"firstWinamnt": 3028385542,
"firstAccumamnt": 27255469878,
"firstPrzwnerCo": 9,
"drwtNo1": 3,
"drwtNo2": 4,
"drwtNo3": 9,
"drwtNo4": 30,
"drwtNo5": 33,
"drwtNo6": 36,
"bnusNo": 7
}
- drwNo : 회차
- totSellamnt : 판매금액
- returnValue : return status
- drwNoDate : 로또 발표일
- firstWinamnt : 이번 로또 상금 총액
- firstAccumamnt : 1등 당첨금
- firstPrzwnerCo : 1등 당첨자수
- drwtNo1 : 당첨번호
- drwtNo2
- drwtNo3
- drwtNo4
- drwtNo5
- drwtNo6
- bnusNo : 보너스 번호
넘어오는 데이터는 이렇게 확인되었습니다.
3. 파이썬 코드: 로또 데이터 수집 및 CSV 저장
아래는 로또 데이터를 수집하고 CSV 파일로 저장하는 Python 코드입니다:
이번 파스에서는 DB에 저장하는 것이 아니라 csv 파일을 생성하는 것까지 진행해 보겠습니다.
import requests
import csv
start_num = 1
end_num = 1145
base_url = "https://dhlottery.co.kr/common.do?method=getLottoNumber&drwNo="
output_file = "lotto_results.csv"
rows = []
#db에 넣을 것을 감안하여 key값을 변경하기 위하여 맵핑
key_mapping = {
"drwtNo1": "lotto_number_1",
"drwtNo2": "lotto_number_2",
"drwtNo3": "lotto_number_3",
"drwtNo4": "lotto_number_4",
"drwtNo5": "lotto_number_5",
"drwtNo6": "lotto_number_6",
"bnusNo": "lotto_bonus_number",
"drwNo": "lotto_draw_number", # 넘버?회차 번호
# "returnValue": "lotto_status", # API status
"totSellamnt":"lotto_total_sell_amnt", # 이번로또 총 판매금액
"firstWinamnt":"lotto_total_winners", # 이번 로또 당첨자 총금액
"firstPrzwnerCo":"lotto_total_first_winners", # 1등 당첨자 인원
"firstAccumamnt":"lotto_first_prize", # 1등 당첨금액
"drwNoDate": "lotto_draw_date", # 발표일
}
for num in range(start_num, end_num + 1):
url = base_url + str(num)
try:
response = requests.post(url)
...중략
rows.append(filtered_data) # Add the data to rows list
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}")
# Write all collected rows to a CSV file
if rows:
...중략
writer.writerows(rows) # Write all rows
print(f"Lotto data has been written to {output_file}")
else:
print("No data to write.")
4. 코드 설명
- API 호출 및 데이터 수집:
- 각 회차 번호(start_num ~ end_num)에 대해 API를 호출하여 JSON 데이터를 가져옵니다.
- requests.post()로 데이터를 요청하고 response.json()으로 JSON 데이터를 파싱합니다.
- 필요한 데이터 필터링:
- key_mapping 딕셔너리를 통해 JSON 데이터의 키를 사용자가 정의한 새로운 키로 변경합니다.
- 필요한 데이터만 필터링하여 rows 리스트에 추가합니다.
- CSV 파일 저장:
- csv.DictWriter를 사용해 데이터를 CSV 파일로 저장합니다.
- CSV의 헤더는 rows[0].keys()를 통해 자동으로 설정됩니다.
5. 결과 예시
코드를 실행하면, lotto_results.csv 파일이 생성됩니다. 파일의 내용은 다음과 같은 형식입니다:
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_draw_date
10,23,29,33,37,40,16,3681782000,0,0,863604600,2002-12-07
6. 활용 방안
- 당첨 번호 통계 분석:
번호별 출현 빈도를 분석하거나 특정 패턴을 연구할 수 있습니다. - 1등 당첨금 추이 분석:
회차별 1등 당첨금의 변화를 시각화할 수 있습니다. - 데이터 저장:
데이터베이스에 저장하여 웹 서비스에 활용하거나, 추가적인 데이터 분석에 사용할 수 있습니다. - 이외에도 여러 가지 방안이 있을 것으로 예상됩니다.
7. 결론
이 포스팅에서는 파이썬을 활용하여 로또 API에서 데이터를 수집하고 CSV 파일로 저장하는 방법을 다뤘습니다. 간단한 코드지만, 수집한 데이터를 활용하여 다양한 분석과 서비스를 개발할 수 있습니다.
이 코드를 응용하면 더 많은 회차의 데이터를 수집하거나, 특정 패턴을 분석하는 데 활용할 수 있습니다.
구독 과 좋아요 부탁드려요~!
'Programming > python' 카테고리의 다른 글
로또 당첨 번호 데이터 추출 하여 데이터화하기(python, mysql) (6) | 2024.11.15 |
---|---|
파이썬 랜덤 번호 추출하기(Python Tutorial: Building a Random Number Generator) (2) | 2024.11.12 |
Pytrhon 설치없이 사용하기 - Colaboratory(코랩) (0) | 2023.07.02 |
python 간단한 ai 코드 (0) | 2023.07.01 |
파이썬 로그 남기기 Logging(Log, Logger, Logging) (0) | 2023.07.01 |