[파이썬] 로또 번호 통계 프로그램

2018. 6. 21. 12:09Hobby/Programming

반응형

심심해서 만든 로또 번호별 출현 횟수 집계 프로그램입니다. 데이터는 나눔로또에서 제공하는 1 ~ 811 회차까지 엑셀 파일을 이용했습니다. 프로그램 코드는 파이썬으로 작성했어요. 몇줄 안되는데 파이썬 자료형이 명시적이지 않아 무지 헤깔렸습니다.

프로그램 실행 결과를 나눔 로또 사이트 자료와 비교해보니 정확하네요. 만족합니다. 프로그램 실행하면 1번부터 45번 공까지 출현 횟수가 합하여 표시됩니다. 목표는 이것이 아니고 실제 나눔로또 결과와 시뮬레이션 한 표본이랑 비교 분석하는 것입니다. 그리고 이것을 분석한 알고리즘으로 다른 분야 데이터 분석을 하려고 합니다. 시뮬레이션 프로그램도 만들긴 했는데 실제 로또 결과랑 차이가 많아요. 눈으로 봐도 분산도 차이가 상당합니다.

시뮬레이션도 나눔로또 실제 횟수와 같이 811회 돌렸습니다. 최대 빈도, 최소 빈도 차이는 실제 로또 결과가 더 크게 보이긴 하는데 앞으로 챠트 그려가면서 열심히 가지고 놀아봐야겠어요. 이리저리 굴리다 보면 재미있는 결과가 보이길 바랍니다. 요즘 프로그램 만드는 것이 쉬워져서 이런 취미 가진 분들도 많아지고 코딩하는 자료 찾는 것은 아주 쉬웠습니다.

다만 파이썬 자료형 추적하는 방법좀 찾아봐야겠어요. 오라일리에 책 발간한 저자도 이걸 지적하더라구요. 동적 구조때문에 파이썬이 더 분석하기 힘들게 되는 경향이 많다네요. 아래 소스 코드는 나눔로또 결과를 집계하는 프로그램입니다.

  1. cnt_list = []
  2. for i in range(0, 46) :
  3. cnt_list.append(0)

  4. with open('lotto.csv') as fp :
  5. buf = fp.readlines()

  6. for i in range(0, len(buf)) :
  7. temp_lotto = ''.join(buf[i])
  8. temp_lotto = temp_lotto.replace('\n', '')
  9. cur_lotto_list = list(temp_lotto.split(','))
  10. for i in range(2, len(cur_lotto_list)) :
  11. cnt_index = cur_lotto_list[i]
  12. cnt_list[int(cnt_index)] += 1

  13. for k in range(1, 46) :
  14. print('%5d 번공 : %3d 회'%(k, cnt_list[k]))

빈줄 빼면 14줄 짜리 코드입니다. 더 줄여 만들면 헤깔려서 안되겠어요. 일단 읽기 편한 스타일로 만드는 것이 편하네요. 로또 공홈에서 받은 당첨번호 엑셀파일을 csv 파일로 만들면되는데 회차, 날짜, 번호 순서대로 공백없이 쉼표로 구분해주면 됩니다. 811회까지 샘플 csv 파일 첨부했습니다. lotto.csv

  • 811,2018.06.16,8,11,19,21,36,45,25
  • 810,2018.06.09,5,10,13,21,39,43,11
  • 809,2018.06.02,6,11,15,17,23,40,39
  • 808,2018.05.26,15,21,31,32,41,43,24
  • 807,2018.05.19,6,10,18,25,34,35,33
  • 806,2018.05.12,14,20,23,31,37,38,27
  • 805,2018.05.05,3,12,13,18,31,32,42

취미생활인데 스트레스 받으면 안되자나요. 실제 데이터랑 시뮬레이션 데이터 2세트 있으니 가지고 놀 분야가 아주 많아 좋습니다. 시간이 훨훨 날아다녀요.

반응형