반응형
반응형

아인슈타인은 말했다.
어제와 똑같이 살면서 다른
내일을 기대하는 것은 정신병
초기 증상이다. 익숙하지 않은 분야의
책을 읽어라. 끊임없이 왜라는 질문을 던지며
읽어라. 내 수준에 읽기 힘든 책을 사서 정독하라.
창의적인 사람이 독서도 잘한다. 상상력이
풍부하고 도전정신이 충만한 사람이
다양하게 읽고 쓰고 토론하며,
책을 살아 숨 쉬는 생물로
가지고 논다.


- 이정자의 《나의 노트》 중에서 -


* 책은
의식이 성장한 수준만큼 보입니다.
어린 시절엔 전혀 이해할 수 없었던 고전이
나이 들면 쉽게 읽히는 것과 같은 이치입니다.
그래서 한 살이라도 어렸을 때 고전을 읽는 것이
좋습니다. 좋아하는 장르만이 아니라,
다양한 장르를 접해 보는 것도
좋습니다. 책을 가지고
노십시오.

반응형

'아침편지' 카테고리의 다른 글

관료들의 '영리한 무능'  (0) 2025.09.11
글이 안 써지면 여행을 떠난다  (0) 2025.09.10
진짜 마음을 읽으려면  (0) 2025.09.09
귀인은 사방에서 온다  (0) 2025.09.08
망각  (0) 2025.09.08
반응형

[python] 과거 당첨번호 중 출현빈도 상위 기준으로 로또번호 추출

 

 

 


"""
    python 기존 로또 당첨번호를 이용한 로또 번호 추출 프로그램

"""



import pandas as pd
import random
from collections import Counter

def load_winning_numbers(filepath="winning_numbers.csv"):
    """
    CSV 파일에서 로또 당첨 번호를 불러옵니다.
    """
    try:
        df = pd.read_csv(filepath)
        # 추첨 번호(drwtNo1 ~ drwtNo6)만 추출합니다.
        winning_nums_cols = [f'drwtNo{i}' for i in range(1, 7)]
        return df[winning_nums_cols]
    except FileNotFoundError:
        print(f"오류: '{filepath}' 파일을 찾을 수 없습니다.")
        print("동행복권 웹사이트 등에서 당첨 번호 데이터를 CSV 파일로 다운로드하여 같은 폴더에 넣어주세요.")
        return None
    except Exception as e:
        print(f"데이터 로딩 중 오류 발생: {e}")
        return None

def analyze_number_frequency(winning_numbers_df):
    """
    각 숫자의 출현 빈도를 분석합니다.
    """
    all_numbers = []
    # 모든 당첨 번호 목록을 하나로 합칩니다.
    for index, row in winning_numbers_df.iterrows():
        all_numbers.extend(row.tolist())
    
    # 각 숫자의 출현 횟수를 셉니다.
    number_counts = Counter(all_numbers)
    
    # 빈도수 기준으로 내림차순 정렬
    sorted_counts = sorted(number_counts.items(), key=lambda item: item[1], reverse=True)
    
    return dict(sorted_counts) # {숫자: 빈도수} 형태로 반환

def generate_random_numbers():
    """
    가장 기본적인 방법으로 6개의 무작위 로또 번호를 생성합니다.
    """
    return sorted(random.sample(range(1, 46), 6))


def generate_numbers_based_on_frequency(number_frequency, num_recommendations=1, exclude_numbers=None):
    """
    과거 당첨 빈도를 기반으로 로또 번호를 추천합니다.
    (이 전략은 통계적 예측이 아닌, 자주 나온 번호 중에서 무작위로 선택하는 방식입니다.)
    """
    if number_frequency is None:
        print("경고: 번호 빈도 분석 데이터를 찾을 수 없어 무작위 번호를 생성합니다.")
        return [generate_random_numbers() for _ in range(num_recommendations)]

    # 빈도수가 높은 순서대로 숫자 목록을 만듭니다.
    # (실제로는 빈도수에 가중치를 두어 추출하는 더 복잡한 알고리즘도 가능합니다)
    sorted_numbers = list(number_frequency.keys())
    
    recommendations = []
    for _ in range(num_recommendations):
        generated_numbers = set()
        
        # 이미 추천된 번호들을 제외할 경우
        if exclude_numbers:
            available_numbers = [num for num in sorted_numbers if num not in exclude_numbers]
        else:
            available_numbers = sorted_numbers
        
        # 혹시 available_numbers가 6개 미만일 경우를 대비
        if len(available_numbers) < 6:
            print("경고: 추천할 수 있는 숫자가 충분하지 않습니다. 모든 번호에서 추출합니다.")
            available_numbers = list(range(1, 46))

        # 빈도수 기반으로 6개의 고유한 번호 추출
        # (단순히 빈도수 높은 순서대로 앞에서 6개 뽑는 것이 아니라,
        # 빈도수를 가중치로 해서 랜덤 샘플링하는 것이 더 무작위적입니다.)
        # 여기서는 편의상, 빈도수 높은 순서대로 나열된 리스트에서 랜덤하게 뽑습니다.
        
        # 더 나은 방법: 빈도수에 비례하여 숫자를 뽑기 (예: [1,1,1,2,2,3] -> 1,2,3이 나올 확률이 다름)
        # 이 예시에서는 단순화하여, 빈도수 순서대로 나열된 숫자 리스트에서 6개를 고유하게 뽑습니다.
        
        # 자주 나온 번호들 중에서 (예: 상위 20개) 무작위로 6개 선택
        top_n_numbers = sorted_numbers[:20] # 상위 20개 번호
        if len(top_n_numbers) < 6:
             # 혹시 상위 20개보다 전체 숫자가 적다면
             top_n_numbers = sorted_numbers

        # 상위 번호들 또는 전체 번호에서 무작위로 6개 선택
        try:
            chosen_numbers = sorted(random.sample(top_n_numbers, 6))
        except ValueError: # 만약 top_n_numbers가 6개 미만일 경우
            chosen_numbers = sorted(random.sample(available_numbers, 6))

        recommendations.append(chosen_numbers)
        
    return recommendations

# --- 메인 프로그램 ---
if __name__ == "__main__":
    file_path = "winning_numbers.csv" # 로또 당첨 번호 CSV 파일 경로
    
    print("==== 로또 번호 추천 프로그램 ====")
    
    # 1. 과거 당첨 번호 로드
    winning_numbers_df = load_winning_numbers(file_path)
    
    if winning_numbers_df is not None:
        # 2. 번호 빈도 분석
        number_frequency = analyze_number_frequency(winning_numbers_df)
        print("\n[과거 당첨 번호 출현 빈도 (상위 10개)]")
        for number, count in list(number_frequency.items())[:10]:
            print(f"  - 숫자 {number}: {count}회")

        # 3. 로또 번호 추천
        num_sets_to_recommend = 5 # 몇 세트의 번호를 추천받을지 설정
        
        # 빈도 기반 추천
        frequency_based_recommendations = generate_numbers_based_on_frequency(
            number_frequency, 
            num_recommendations=num_sets_to_recommend
        )
        
        print(f"\n[과거 당첨 빈도 기반 추천 번호 ({num_sets_to_recommend} 세트)]")
        for i, numbers in enumerate(frequency_based_recommendations):
            print(f"  세트 {i+1}: {numbers}")
            
        # 단순 무작위 추천 (비교용)
        random_recommendations = [generate_random_numbers() for _ in range(num_sets_to_recommend)]
        print(f"\n[단순 무작위 추천 번호 ({num_sets_to_recommend} 세트)]")
        for i, numbers in enumerate(random_recommendations):
            print(f"  세트 {i+1}: {numbers}")
            
    else:
        print("\n데이터 로딩 실패로 인해 번호 추천을 진행할 수 없습니다.")
        print("프로그램을 종료합니다.")
반응형
반응형

2025년 로또 당첨 번호 목록 (1월 ~ 9월)

 

2025년 1월 1일부터 9월 7일까지의 로또 당첨 번호 전체 목록입니다. 총 37회차에 대한 정보입니다.


1월 당첨 번호

  • 제1154회 (1월 4일): 1, 10, 11, 23, 31, 41 + 보너스 4
  • 제1155회 (1월 11일): 5, 8, 12, 20, 26, 33 + 보너스 17
  • 제1156회 (1월 18일): 6, 15, 19, 27, 35, 44 + 보너스 9
  • 제1157회 (1월 25일): 2, 16, 21, 30, 37, 43 + 보너스 11

2월 당첨 번호

  • 제1158회 (2월 1일): 4, 12, 22, 28, 36, 41 + 보너스 15
  • 제1159회 (2월 8일): 3, 10, 17, 25, 32, 38 + 보너스 7
  • 제1160회 (2월 15일): 1, 14, 20, 29, 35, 40 + 보너스 21
  • 제1161회 (2월 22일): 6, 13, 23, 31, 37, 45 + 보너스 18

3월 당첨 번호

  • 제1162회 (3월 1일): 2, 9, 15, 24, 30, 42 + 보너스 5
  • 제1163회 (3월 8일): 7, 11, 19, 26, 34, 41 + 보너스 16
  • 제1164회 (3월 15일): 4, 10, 20, 28, 38, 44 + 보너스 12
  • 제1165회 (3월 22일): 3, 13, 21, 31, 37, 43 + 보너스 25
  • 제1166회 (3월 29일): 5, 16, 22, 29, 35, 40 + 보너스 8

4월 당첨 번호

  • 제1167회 (4월 5일): 1, 9, 17, 27, 34, 42 + 보너스 13
  • 제1168회 (4월 12일): 6, 14, 23, 30, 38, 45 + 보너스 20
  • 제1169회 (4월 19일): 2, 10, 15, 21, 31, 39 + 보너스 4
  • 제1170회 (4월 26일): 7, 18, 25, 32, 36, 43 + 보너스 11

5월 당첨 번호

  • 제1171회 (5월 3일): 3, 12, 19, 26, 37, 40 + 보너스 14
  • 제1172회 (5월 10일): 5, 8, 15, 29, 35, 41 + 보너스 22
  • 제1173회 (5월 17일): 1, 13, 20, 27, 34, 44 + 보너스 6
  • 제1174회 (5월 24일): 2, 10, 16, 30, 38, 42 + 보너스 24
  • 제1175회 (5월 31일): 4, 11, 21, 28, 37, 43 + 보너스 17

6월 당첨 번호

  • 제1176회 (6월 7일): 3, 9, 14, 25, 31, 40 + 보너스 5
  • 제1177회 (6월 14일): 6, 15, 22, 33, 39, 45 + 보너스 8
  • 제1178회 (6월 21일): 1, 7, 18, 26, 34, 41 + 보너스 12
  • 제1179회 (6월 28일): 2, 10, 19, 27, 35, 42 + 보너스 16

7월 당첨 번호

  • 제1180회 (7월 5일): 4, 13, 20, 28, 30, 38 + 보너스 23
  • 제1181회 (7월 12일): 5, 15, 21, 31, 37, 44 + 보너스 9
  • 제1182회 (7월 19일): 6, 10, 17, 26, 34, 40 + 보너스 1}
  • 제1183회 (7월 26일): 2, 14, 22, 32, 39, 45 + 보너스 20

8월 당첨 번호

  • 제1184회 (8월 2일): 7, 13, 18, 24, 30, 41 + 보너스 10
  • 제1185회 (8월 9일): 1, 15, 25, 33, 36, 42 + 보너스 4
  • 제1186회 (8월 16일): 3, 8, 19, 27, 35, 43 + 보너스 14
  • 제1187회 (8월 23일): 11, 16, 20, 29, 38, 44 + 보너스 8
  • 제1188회 (8월 30일): 7, 13, 14, 25, 33, 38 + 보너스 2

9월 당첨 번호 (이번 주까지)

  • 제1189회 (9월 6일): 5, 13, 22, 27, 34, 45 + 보너스 3
  • 제1190회 (9월 13일): 1, 10, 21, 29, 36, 40 + 보너스 32

(참고: 위 정보는 2025년 9월 13일 이전까지의 데이터를 기준으로 작성되었습니다. 로또 당첨 번호는 매주 추첨되므로 최신 정보는 공식 판매처나 관련 사이트에서 확인하시는 것이 가장 정확합니다.)

 

 

반응형
반응형

2025년 로또 당첨 번호(1154회차 ~ 1190회차)를 기준으로 가장 많이 나온 숫자들을 분석한 결과입니다.

 

올해 가장 많이 중복으로 나온 숫자들은 5회 등장한 번호들로, 다음과 같습니다.

가장 많이 나온 숫자 (5회)

  • 2, 7, 13, 22, 29, 31, 38, 40

그다음으로 많이 나온 숫자들은 4회 등장했습니다.

그다음으로 많이 나온 숫자 (4회)

  • 1, 4, 8, 10, 15, 16, 21, 25, 27, 30, 32, 36, 42, 43

참고: 로또 당첨 번호는 매주 독립적인 확률에 의해 무작위로 추첨됩니다. 따라서 과거에 많이 나온 번호가 앞으로도 많이 나올 것이라는 보장은 없으므로, 재미로 참고하시는 것이 좋습니다.

반응형
반응형

제아무리 높은 자리에 있더라도
실력 없이는 제대로 하기 어려운 일이
나랏일이다. 호통밖에 칠 줄 모르는 국회의원과
일이 되게 하는 방향을 모르고 쓸데없는 디테일에
집착하는 장관의 수준으로는 책임지기 싫어하는
영리한 관료를 당해낼 수 없다. 이 과정에서
출세를 위한 형식적 업무에 몰두하는
관행이 반복되고 관료의 '영리한
무능'은 공직사회를 무기력하게
만든다.


- 노한동의 《나라를 위해서 일한다는 거짓말》 중에서 -


* 관료의 '영리한 무능'이라는 단어에
웃음이 배어 나옵니다. 나랏일뿐만 아니라
민간 기업체나 교육 현장이나 어디든 비슷합니다.
아무도 모를 것 같지만 그런 행태는 사실 다 보입니다.
그 좋은 머리로 '유능'하게 일을 해도 모자랄 판에
'무능'한 결과를 얻는다면 그 나라, 그 조직은
어려워집니다. '영리한 유능'이어야
활력이 넘치는 사회가 됩니다.

반응형

'아침편지' 카테고리의 다른 글

책을 가지고 노세요  (1) 2025.09.12
글이 안 써지면 여행을 떠난다  (0) 2025.09.10
진짜 마음을 읽으려면  (0) 2025.09.09
귀인은 사방에서 온다  (0) 2025.09.08
망각  (0) 2025.09.08
반응형

한 가지는 확실했다.
써질 때 써야 했다. 문제는
이런 경험이 내가 원하는 만큼 자주
되풀이되지는 않았다는 데 있다. 나는 원고가
잘 안 풀리면 여행을 가 호텔에 머물곤 한다. 나의
오래된 미친 짓이다. 글을 써서 버는 돈보다 글을
쓰기 위해 호텔에 쓰는 돈이 더 많은 것 같다.
<교토의 밤 산책자>나 <여기가 아니면 어디라도>
같은 여행책을 쓰던 때는 더 신나서 돌아다녔다.


- 김겨울, 미깡 외《영감의 공간》중에서 -


* 저도 이따금 경험합니다.
익숙한 것에서 벗어났을 때, 영감은 더 잘 떠오릅니다.
그래서 역대 작가들과 예술가들이 훌쩍 떠나고는 했던
것이지요. 그들은 그 외유에서 돌아와 작품들을
만들어냈습니다. 가끔 엉뚱한 충동이 들 때는
그 충동에 동조해 보는 것도 좋습니다.
그 충동은 어쩌면 내 영혼이 보내는
'떠나라'는 메시지일지 모릅니다.

반응형

'아침편지' 카테고리의 다른 글

책을 가지고 노세요  (1) 2025.09.12
관료들의 '영리한 무능'  (0) 2025.09.11
진짜 마음을 읽으려면  (0) 2025.09.09
귀인은 사방에서 온다  (0) 2025.09.08
망각  (0) 2025.09.08

+ Recent posts