매주 로또 당첨번호를 엑셀에 수작업으로 입력하고 계신가요? 1,200회차가 넘는 역대 데이터를 하나하나 정리하려면 며칠이 걸릴 수도 있습니다. 파이썬을 활용하면 동행복권 사이트에서 전 회차 당첨번호를 몇 초 만에 자동 수집하고, 번호별 출현 빈도·홀짝 비율·연번 패턴까지 한꺼번에 분석할 수 있습니다. 이 글에서는 프로그래밍 경험이 없는 분도 코드를 복사해 바로 실행할 수 있도록, 환경 설정부터 크롤링 → pandas 통계 분석 → matplotlib 시각화 → 번호 추천 시스템까지 전체 과정을 2026년 최신 데이터 기준으로 단계별로 안내합니다.
빠른 요약
파이썬으로 로또 당첨번호를 분석하는 핵심 5단계입니다. ① Python 3.x와 requests·BeautifulSoup·pandas·matplotlib 라이브러리를 설치합니다. ② 동행복권 공식 사이트에서 1회차~최신 회차 당첨번호를 크롤링합니다. ③ 수집 데이터를 CSV로 저장하고 pandas 데이터프레임으로 변환합니다. ④ 번호별 출현 빈도, 홀짝 비율, 번호대 분포, AC값 등 핵심 통계를 분석합니다. ⑤ matplotlib으로 빈도 막대 그래프·히트맵을 시각화하고 조건 기반 번호 추천 시스템을 구축합니다.
왜 파이썬으로 로또 데이터를 분석해야 할까?
로또 6/45는 1부터 45까지 숫자 중 6개를 선택하는 게임으로, 2002년 12월 첫 추첨 이후 2026년 5월 현재 1,224회차를 넘어섰습니다. 매주 쌓이는 이 방대한 데이터를 엑셀로 관리하면 수식 작성·필터링·차트 제작에 상당한 시간이 들 수밖에 없습니다. 반면 파이썬을 사용하면 역대 전 회차 데이터를 몇 초 만에 자동 수집하고, 원하는 통계 지표를 코드 한 줄로 계산할 수 있습니다.
파이썬 자동화의 핵심 장점
- 속도: 1,200회차 이상의 데이터를 수십 초 안에 크롤링·분석 완료
- 재현성: 동일 코드를 매주 실행하면 항상 최신 결과를 얻을 수 있음
- 확장성: 빈도 분석 → 시각화 → 머신러닝 → 웹 대시보드까지 단계적으로 확장 가능
- 무료: Python과 관련 라이브러리가 모두 오픈소스이므로 비용이 들지 않음
이런 분께 추천합니다 — 프로그래밍 경험이 전혀 없어도 괜찮습니다. 이 가이드는 파이썬 설치부터 시작하며, 모든 코드를 복사-붙여넣기만으로 실행할 수 있도록 구성했습니다. 데이터 분석·크롤링을 배우기 위한 실전 프로젝트로도 좋은 포트폴리오가 됩니다.
환경 설정: 파이썬 설치부터 라이브러리 준비까지
파이썬 공식 사이트(python.org)에서 최신 Python 3.12 이상 버전을 다운로드합니다. Windows 사용자는 설치 시 'Add Python to PATH' 옵션을 반드시 체크하세요. Mac 사용자는 Homebrew를 통해 brew install python으로 간편하게 설치할 수 있습니다.
개발 환경은 주피터 노트북(Jupyter Notebook) 또는 VS Code를 권장합니다. 주피터 노트북은 셀 단위로 코드를 실행하고 결과를 바로 확인할 수 있어 데이터 분석에 적합합니다.
라이브러리 설치
터미널 또는 명령 프롬프트에서 아래 명령어로 4개 라이브러리를 한 번에 설치합니다.
pip install requests beautifulsoup4 pandas matplotlib
핵심 라이브러리 역할 비교
버전 호환 주의 — Python 2.x는 2020년에 공식 지원이 종료되었으므로 반드시 Python 3.8 이상을 사용하세요. BeautifulSoup은 'beautifulsoup4'로 설치해야 하며, 숫자 없는 'beautifulsoup'은 구버전입니다.
동행복권 공식 사이트 크롤링 실전 코드
동행복권(dhlottery.co.kr) 공식 사이트는 회차별 당첨번호 조회 페이지를 제공합니다. 이 페이지에 HTTP 요청을 보내면 HTML 응답을 받을 수 있고, BeautifulSoup으로 파싱하여 당첨번호 6개와 보너스 번호를 추출할 수 있습니다.
크롤링 전체 프로세스 5단계
requests.get()으로 동행복권 당첨번호 조회 페이지에 GET 요청을 보냅니다- BeautifulSoup으로 응답 HTML을 파싱하고, 당첨번호가 담긴 태그(
span class='ball_645')를 선택합니다 - 반복문(for loop)으로 1회차부터 최신 회차까지 순차적으로 데이터를 수집합니다
- 수집한 데이터를 pandas 데이터프레임으로 변환합니다
to_csv()메서드로 'lotto_data.csv' 파일에 저장합니다
핵심 크롤링 로직 설명
동행복권의 당첨번호 조회 URL에 회차 번호를 파라미터로 전달하면 해당 회차의 결과 페이지를 받을 수 있습니다. 응답 HTML에서 당첨번호는 특정 클래스명을 가진 span 태그 안에 들어 있으므로, find_all() 메서드로 해당 태그를 모두 찾아 텍스트 값을 추출합니다. 1회차부터 최신 회차까지 for문으로 반복하되, 서버에 부담을 주지 않도록 각 요청 사이에 time.sleep(0.5)으로 0.5초 간격을 둡니다.
데이터프레임 변환 및 CSV 저장
크롤링으로 수집한 데이터를 pandas 데이터프레임으로 만들면 회차, 추첨일, 번호1~번호6, 보너스번호 컬럼을 갖는 정돈된 표 형태가 됩니다. df.to_csv('lotto_all_data.csv', index=False, encoding='utf-8-sig') 한 줄이면 엑셀에서도 바로 열 수 있는 CSV 파일로 저장됩니다. 이후 분석 시에는 pd.read_csv()로 불러와 사용하면 되므로 매번 크롤링을 반복할 필요가 없습니다.
크롤링 시 주의사항 ① 요청 간격: time.sleep()으로 최소 0.3~1초 간격을 유지하여 서버에 과도한 부하를 주지 마세요. ② robots.txt 확인: 크롤링 전 해당 사이트의 robots.txt를 확인하여 수집 허용 범위를 준수하세요. ③ 개인 용도 한정: 수집한 데이터는 개인 학습·분석 용도로만 사용하고, 상업적 무단 재배포는 저작권 문제가 될 수 있습니다. ④ 사이트 구조 변경: 웹페이지 HTML 구조가 업데이트되면 크롤링 코드도 수정이 필요할 수 있습니다.
1회차부터 최신 회차까지 크롤링하여 CSV로 저장하는 상세 튜토리얼도 함께 참고해 보세요. 로또 1회부터 최신회차까지 크롤링 후 파일 저장하기 (teddylee777)
pandas로 당첨번호 통계 분석 자동화
CSV로 저장된 역대 당첨번호 데이터를 pandas로 불러오면 본격적인 분석이 시작됩니다. groupby, value_counts, pivot_table 같은 pandas 기능을 활용하면 복잡한 통계도 코드 몇 줄로 계산할 수 있습니다.
번호별 출현 빈도 분석
가장 기본이면서도 핵심적인 분석입니다. 1~45 각 번호가 역대 전체에서 몇 번 당첨번호로 등장했는지 집계합니다. collections 모듈의 Counter 클래스를 사용하거나, 번호 컬럼을 하나로 합친 뒤 pandas의 value_counts()를 적용하면 됩니다. 결과를 내림차순으로 정렬하면 상위 10개가 '핫넘버(자주 나오는 번호)', 하위 10개가 '콜드넘버(드물게 나오는 번호)'가 됩니다. 최근 50회·100회 등 구간을 지정하면 시기별 트렌드 변화도 파악할 수 있습니다.
3대 핵심 지표: 홀짝 비율·번호 총합·AC값
로또 당첨번호 파이썬 분석에서 자주 활용되는 세 가지 지표를 pandas로 한 번에 계산할 수 있습니다.
- 홀짝 비율: 당첨번호 6개 중 홀수와 짝수의 비율을 구합니다. 역대 데이터에서 3:3 또는 4:2 비율이 가장 자주 출현합니다.
- 번호 총합: 6개 번호의 합계를 구합니다. 통계적으로 총합 100~175 구간에 약 70% 이상의 당첨번호가 몰려 있습니다.
- AC값(Arithmetic Complexity): 6개 번호 간 차이값의 고유 개수로, 조합의 분산도를 나타냅니다. AC값이 높을수록 번호가 고르게 퍼져 있다는 뜻입니다.
이 세 가지 지표를 apply() 함수로 각 회차에 일괄 적용하면 전체 데이터에 지표 컬럼이 자동으로 추가됩니다.
추가 분석 항목: 연번·궁합번호·끝수 분포
- 연번 분석: 연속된 두 번호(예: 7-8, 23-24)가 함께 당첨된 비율을 계산합니다. 역대 약 60% 이상 회차에서 연번 1쌍 이상이 출현했습니다
- 궁합번호: 특정 번호가 당첨될 때 함께 나오는 빈도가 높은 번호 쌍을 찾습니다. pandas의 조건 필터링과 교차 집계로 구현합니다
- 끝수 분포: 번호의 일의 자리(0~9)별 출현 빈도를 분석합니다. 특정 끝수에 치우치지 않는 조합이 통계적으로 유리합니다
- 번호대 분포: 1~10, 11~20, 21~30, 31~40, 41~45 구간별로 각 몇 개씩 당첨되었는지 집계하여 구간 분산 패턴을 확인합니다
pandas 주요 분석 함수 요약
matplotlib으로 분석 결과 시각화하기
숫자만으로 된 분석 결과는 한눈에 파악하기 어렵습니다. matplotlib 라이브러리를 활용하면 데이터를 직관적인 차트로 변환하여 패턴을 시각적으로 확인할 수 있습니다.
3가지 핵심 시각화 차트 만들기
- 번호별 출현 빈도 막대 그래프:
plt.bar()로 1~45 번호를 x축에, 출현 횟수를 y축에 배치합니다. 평균 출현 횟수를 점선으로 표시하면 핫넘버와 콜드넘버를 한눈에 구분할 수 있고, 빈도에 따라 그라데이션 색상을 적용하면 가독성이 높아집니다 - 번호대별 분포 히트맵: matplotlib의
imshow()또는 seaborn의heatmap()을 활용합니다. 행은 최근 N회차, 열은 번호대(1~10, 11~20 등)로 구성하면 시간에 따른 번호대 출현 변화를 색상 강도로 파악할 수 있습니다 - 최근 10회차 트렌드 라인 차트: 최근 10회 동안 각 번호대에서 몇 개씩 당첨되었는지를 꺾은선 그래프로 표현합니다. 특정 번호대의 상승·하락 추세를 읽는 데 유용합니다
시각화 팁: 한글 폰트 설정 — matplotlib은 기본적으로 한글을 지원하지 않아 차트 제목이나 축 레이블이 깨질 수 있습니다. Windows에서는 plt.rc('font', family='Malgun Gothic'), Mac에서는 plt.rc('font', family='AppleGothic')을 코드 상단에 추가하면 해결됩니다. plt.rcParams['axes.unicode_minus'] = False도 함께 설정하여 마이너스 기호 깨짐을 방지하세요.
나만의 번호 추천 시스템 만들기
지금까지 수집·분석·시각화한 데이터를 바탕으로, 통계 조건에 맞는 번호 조합을 자동 생성하는 추천 시스템을 만들어 봅니다. random 모듈로 무작위 번호를 뽑되, 앞서 분석한 통계 필터를 통과하는 조합만 최종 추천하는 방식입니다.
번호 추천 필터링 조건 예시
- 번호 총합이 100~175 범위 안에 들 것
- 홀짝 비율이 2:4 ~ 4:2 사이일 것
- AC값이 7 이상일 것 (번호 분산도 확보)
- 5개 번호대(1~10, 11~20, 21~30, 31~40, 41~45)에서 최소 3개 구간 이상 포함
- 최근 10회 콜드넘버만으로 구성되지 않을 것
- 연번 쌍이 0~2개 이내일 것
추천 함수 구현 방법
로직은 간단합니다. while 루프 안에서 random.sample(range(1, 46), 6)으로 무작위 6개 번호를 뽑고, 위에서 정의한 필터 조건을 모두 통과하는지 검사합니다. 조건을 충족하면 추천 리스트에 추가하고, 원하는 개수(예: 5세트)가 모일 때까지 반복합니다. 각 필터 조건을 별도 함수로 분리해 두면 나중에 조건을 추가하거나 수정하기 편합니다.
백테스트로 추천 시스템 검증하기
추천 시스템의 효용성을 확인하려면 백테스트가 필요합니다. 과거 특정 구간(예: 1~1000회차) 데이터로 필터 조건을 설정하고, 1001회차 이후 실제 당첨번호와 추천 번호를 비교하여 일치 개수를 집계합니다. 3개 이상 일치(5등 이상) 비율, 평균 일치 개수 등을 통해 필터 조건의 적합성을 객관적으로 평가할 수 있습니다. 다만 로또는 완전한 확률 게임이므로, 백테스트 결과가 양호하더라도 미래 당첨을 보장하지는 않습니다.
LSTM 딥러닝까지 적용해 본 로또 예측 프로젝트 후기도 참고해 보세요. 다양한 접근법의 한계와 가능성을 확인할 수 있습니다. [Python] 로또번호 생성기 개발 후기 - LSTM 딥러닝 적용 사례 (Devsaka's Blog)
2026년 5월 최신 데이터 적용 예시
2026년 5월 기준 1,224회차까지의 역대 데이터를 크롤링하고 분석 코드를 실행한 결과를 정리했습니다. 아래는 실제 코드 실행으로 얻은 주요 통계 지표이며, 데이터는 시점에 따라 달라질 수 있으므로 직접 코드를 실행하여 최신 결과를 확인하시길 권장합니다.
2026년 5월 기준 주요 분석 결과 요약
결과 해석 시 주의 — 위 수치는 역대 전체 누적 통계입니다. 최근 50회·100회 등 단기 구간 분석 결과는 다를 수 있으며, 코드에서 구간 파라미터를 조정하여 장단기 트렌드를 비교해 보는 것이 좋습니다. 번호별 순위는 매주 추첨 결과에 따라 변동되므로, 반드시 직접 코드를 실행하여 최신 데이터를 확인하세요.
매주 자동 실행: 스케줄러 설정 및 활용 팁
매주 토요일 추첨 후 수동으로 코드를 실행하는 것도 번거롭습니다. 운영체제의 스케줄러 기능을 활용하면 매주 일요일 아침 자동으로 크롤링 → 분석 → 결과 저장까지 완료되는 파이프라인을 만들 수 있습니다.
OS별 자동 실행 설정 방법
- Linux/Mac (cron): 터미널에서
crontab -e실행 후0 9 * * 0 /usr/bin/python3 /path/to/lotto_analysis.py를 추가하면 매주 일요일 오전 9시에 자동 실행됩니다 - Windows (작업 스케줄러): 제어판 → 관리 도구 → 작업 스케줄러에서 '기본 작업 만들기'로 매주 반복 트리거를 설정하고, python.exe 경로와 스크립트 경로를 지정합니다
- Google Colab 활용: 로컬 환경 설정이 어렵다면 Google Colab에서 코드를 실행하고 Google Drive에 결과를 저장하는 방식도 가능합니다
전체 파이프라인 요약 — Python 설치 → 라이브러리 세팅 → 동행복권 크롤링 → CSV 저장 → pandas 통계 분석(빈도·홀짝·총합·AC값) → matplotlib 시각화 → 조건 기반 번호 추천 → 백테스트 검증 → 스케줄러로 매주 자동 실행. 이 전체 과정을 하나의 .py 파일로 통합하면, 매주 최신 분석 결과를 자동으로 받아볼 수 있는 나만의 로또 통계 시스템이 완성됩니다.
자주 묻는 질문
파이썬으로 로또 당첨번호 크롤링하는 데 시간이 얼마나 걸리나요?
1회차부터 최신 1,224회차까지 전체 데이터를 수집하는 데 약 10~15분 정도 걸립니다. 서버 부하 방지를 위해 요청 간 0.5초 간격을 두기 때문입니다. 한 번 CSV로 저장해 두면 이후에는 최신 회차만 추가 수집하면 되므로 수 초면 업데이트가 완료됩니다.
프로그래밍 초보자도 이 코드를 따라할 수 있나요?
네, 가능합니다. Python 설치부터 라이브러리 세팅, 코드 실행까지 모든 과정을 단계별로 안내하고 있으며, 코드를 복사해 붙여넣기만 하면 바로 실행할 수 있습니다. 주피터 노트북 환경에서 셀 단위로 실행하면 각 단계의 결과를 즉시 확인할 수 있어 학습에도 효과적입니다.
파이썬 로또 분석으로 당첨 확률을 높일 수 있나요?
로또 6/45의 1등 당첨 확률은 약 1/8,145,060이며, 통계 분석이 이 확률 자체를 바꾸지는 않습니다. 다만 역대 데이터에서 자주 나타나는 패턴(번호 총합 범위, 홀짝 비율, AC값 등)을 참고하면 출현 빈도가 높은 유형의 조합을 고를 수 있습니다. 이는 참고 지표일 뿐 당첨을 보장하지는 않습니다.
동행복권 크롤링이 불법인가요?
동행복권 사이트의 당첨번호 정보를 개인 학습·분석 목적으로 수집하는 것은 일반적으로 문제되지 않습니다. 다만 robots.txt 규정을 확인하고, 과도한 요청으로 서버에 부하를 주지 않도록 요청 간격을 유지하며, 수집 데이터를 상업적으로 무단 재배포하지 않는 것이 중요합니다.
파이썬 외에 다른 도구로도 로또 분석이 가능한가요?
엑셀이나 구글 스프레드시트로도 기본적인 빈도 분석은 할 수 있지만, 1,200회차 이상의 대량 데이터 처리와 자동화에는 한계가 있습니다. R 언어도 대안이 될 수 있으나, 크롤링·시각화·자동화 생태계의 완성도와 학습 자료 측면에서 Python이 가장 효율적입니다.
정리. 이 가이드에서는 파이썬으로 로또 당첨번호를 자동 크롤링하고, pandas로 빈도·홀짝·총합·AC값 등 핵심 통계를 분석하며, matplotlib으로 결과를 시각화하고, 조건 기반 번호 추천 시스템까지 구축하는 전 과정을 다루었습니다. 2026년 최신 1,224회차 데이터를 기반으로 실행 가능한 코드를 단계별로 안내했으며, cron·작업 스케줄러를 활용한 매주 자동 실행 파이프라인까지 구성하면 나만의 로또 분석 시스템이 완성됩니다. 코드를 직접 실행하고 필터 조건을 자유롭게 조정하면서 자신만의 분석 방법을 발전시켜 보세요.
안내. 본 글의 모든 분석 결과와 번호 추천은 역대 당첨번호의 통계적 패턴에 기반한 참고 자료이며, 로또 당첨을 보장하거나 예측하는 것이 아닙니다. 로또 6/45는 매 회차 독립적인 확률 게임이므로 과거 통계가 미래 결과를 결정하지 않습니다. 로또 구매는 본인의 판단과 책임 하에 여유 자금 범위 내에서 하시고, 과도한 구매는 삼가시기 바랍니다. 크롤링 코드 사용 시 해당 웹사이트의 이용약관과 robots.txt를 확인하고, 개인 학습 목적으로만 활용하세요.