본문 바로가기
프로그램

[파이썬] 로또 번호 분석. 번호 출현 빈도 구하기

by 오디세이99 2023. 1. 9.
728x90
반응형

(문제)

로또번호 프로그램 을 파이썬으로 만들어보고있는데요

실제 데이터랑 비교하기위해서 1번~45번숫자로 6개를 뽑고
그걸 리스트나 numpy배열로 1040회차까지 만들어서 합친후
그걸 pyplot으로 그려서
1번~45번까지 각각 총 몇개(빈도)가 나왔는지 만들어보고싶은데(예시: 1번공은 총 56번출현 , 2번공은 총 70번 출현 ... 45번공은 55번출현) 
 
 
(방법)
import random
import matplotlib.pyplot as plt

data = []                                    # 임의로 만들어진 6개 번호 저장용 리스트 변수
no_cnt = [0 for i in range(46)]             # 각 번호가 출력하는 Count를 위한 리스트 변수. 전부 0으로 채움
for i in range(1040):                       # 1040번 반복
    nos = random.sample(range(1,46), 6)      # 1~45번까지 6개 번의 임의로 만들기
    nos.sort()                               # 올림차순 정렬
    data.append(nos)                         # data 변수에 추가. 이 프로그램에서 data가 불필요하나 다른 분석을 할 수있도록 만듬
    for j in range(len(nos)):               # 나온 숫자를 Count 하기 위한 반복문
        no_cnt[nos[j]] += 1                 # nos[j]가 5면 no_cnt[5]가 +1이 되는 식임.
        

def add_value_label(x_list,y_list):          # bar chart에 값을 text로 표시
    for i in range(1, len(x_list)+1):
        plt.text(i-1,y_list[i-1],y_list[i-1])
        
fig = plt.figure(figsize=(10, 6))            # plot 크기 설정
plt.rcParams['font.family'] = 'NanumGothic'  # 한글 가능하도록 폰트 설정
x_column = '번호'
y_column = '횟수'
x = [i for i in range(1,46)]
y = no_cnt[1:]
plt.bar(x, y)                       # bar chart 그리기
add_value_label(x, y)               # 값 표시
plt.title("로또 번호 출련 횟수",fontsize=16)  # 제목 쓰기
plt.show()

 

data를 pandas DataFrame으로 만들기

import random
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame(columns=range(6))          # 임의로 만들어진 6개 번호 저장용 pandas DataFrame변수
df.columns = ['no1','no2','no3','no4','no5','no6']    # DataFrame에 컬럼명 지정
no_cnt = [0 for i in range(46)]             # 각 번호가 출력하는 Count를 위한 리스트 변수. 전부 0으로 채움
for i in range(1040):                       # 1040번 반복
    nos = random.sample(range(1,46), 6)      # 1~45번까지 6개 번의 임의로 만들기
    nos.sort()                               # 올림차순 정렬
    df.loc[len(df)+1] = nos                    # df 변수에 추가. 이 프로그램에서 df가 불필요하나 다른 분석을 할 수있도록 만듬
    for j in range(len(nos)):               # 나온 숫자를 Count 하기 위한 반복문
        no_cnt[nos[j]] += 1                 # nos[j]가 5면 no_cnt[5]가 +1이 되는 식임.
        

def add_value_label(x_list,y_list):          # bar chart에 값을 text로 표시
    for i in range(1, len(x_list)+1):
        plt.text(i-1,y_list[i-1],y_list[i-1])
        
fig = plt.figure(figsize=(10, 6))            # plot 크기 설정
plt.rcParams['font.family'] = 'NanumGothic'  # 한글 가능하도록 폰트 설정
x_column = '번호'
y_column = '횟수'
x = [i for i in range(1,46)]
y = no_cnt[1:]
plt.bar(x, y)                       # bar chart 그리기
add_value_label(x, y)               # 값 표시
plt.title("로또 번호 출련 횟수",fontsize=16)  # 제목 쓰기
plt.show()

- df의 내용 입니다.

728x90
반응형

댓글