철칙
모든 것은 변한다

'아침편지' 카테고리의 다른 글
| 단 한 사람이라도 행복해진다면 (0) | 2025.09.16 | 
|---|---|
| 김장하 어르신의 부탁 말씀 (0) | 2025.09.15 | 
| 책을 가지고 노세요 (1) | 2025.09.12 | 
| 관료들의 '영리한 무능' (0) | 2025.09.11 | 
| 글이 안 써지면 여행을 떠난다 (0) | 2025.09.10 | 
철칙
모든 것은 변한다

| 단 한 사람이라도 행복해진다면 (0) | 2025.09.16 | 
|---|---|
| 김장하 어르신의 부탁 말씀 (0) | 2025.09.15 | 
| 책을 가지고 노세요 (1) | 2025.09.12 | 
| 관료들의 '영리한 무능' (0) | 2025.09.11 | 
| 글이 안 써지면 여행을 떠난다 (0) | 2025.09.10 | 
아인슈타인은 말했다.
어제와 똑같이 살면서 다른
내일을 기대하는 것은 정신병
초기 증상이다. 익숙하지 않은 분야의
책을 읽어라. 끊임없이 왜라는 질문을 던지며
읽어라. 내 수준에 읽기 힘든 책을 사서 정독하라.
창의적인 사람이 독서도 잘한다. 상상력이
풍부하고 도전정신이 충만한 사람이
다양하게 읽고 쓰고 토론하며,
책을 살아 숨 쉬는 생물로
가지고 논다.
- 이정자의 《나의 노트》 중에서 -
* 책은
의식이 성장한 수준만큼 보입니다.
어린 시절엔 전혀 이해할 수 없었던 고전이
나이 들면 쉽게 읽히는 것과 같은 이치입니다.
그래서 한 살이라도 어렸을 때 고전을 읽는 것이
좋습니다. 좋아하는 장르만이 아니라,
다양한 장르를 접해 보는 것도
좋습니다. 책을 가지고
노십시오.

| 김장하 어르신의 부탁 말씀 (0) | 2025.09.15 | 
|---|---|
| 철칙 (0) | 2025.09.15 | 
| 관료들의 '영리한 무능' (0) | 2025.09.11 | 
| 글이 안 써지면 여행을 떠난다 (0) | 2025.09.10 | 
| 진짜 마음을 읽으려면 (0) | 2025.09.09 | 
[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("프로그램을 종료합니다.")| [python] Faker 라이브러리로 Dummy 데이터 만들기 (0) | 2025.09.25 | 
|---|---|
| [python] voronoi diagram for generative geometry using python (0) | 2025.09.18 | 
| [python] Blackhole Glow using python (0) | 2025.09.04 | 
| [python] ./input/ 폴더 안에 있는 엑셀파일을 찾아서 데이터 있는 셀의 앞뒤 공백을 삭제 (1) | 2025.08.28 | 
| [Just Do Rust - 러스트 기초부터 고급까지](https://wikidocs.net/book/16747) (0) | 2025.08.25 | 
2025년 로또 당첨 번호 목록 (1월 ~ 9월)
2025년 1월 1일부터 9월 7일까지의 로또 당첨 번호 전체 목록입니다. 총 37회차에 대한 정보입니다.
(참고: 위 정보는 2025년 9월 13일 이전까지의 데이터를 기준으로 작성되었습니다. 로또 당첨 번호는 매주 추첨되므로 최신 정보는 공식 판매처나 관련 사이트에서 확인하시는 것이 가장 정확합니다.)
| 오일장 장날, 남해 오일장 (0) | 2025.09.17 | 
|---|---|
| [메가스터디 구내식당] 2025.9.15-9.19 주간메뉴표 (0) | 2025.09.15 | 
| 2025년 로또 당첨 번호(1154회차 ~ 1190회차)를 기준으로 가장 많이 나온 숫자들을 분석한 결과입니다. (0) | 2025.09.11 | 
| 화웨이 헬스 설치, huawei 화웨이 워치 gt2 갤럭시 연결 (0) | 2025.09.04 | 
| Apple 2024 아이패드 mini A17 Pro (0) | 2025.08.28 | 
2025년 로또 당첨 번호(1154회차 ~ 1190회차)를 기준으로 가장 많이 나온 숫자들을 분석한 결과입니다.
올해 가장 많이 중복으로 나온 숫자들은 5회 등장한 번호들로, 다음과 같습니다.
그다음으로 많이 나온 숫자들은 4회 등장했습니다.
참고: 로또 당첨 번호는 매주 독립적인 확률에 의해 무작위로 추첨됩니다. 따라서 과거에 많이 나온 번호가 앞으로도 많이 나올 것이라는 보장은 없으므로, 재미로 참고하시는 것이 좋습니다.
| [메가스터디 구내식당] 2025.9.15-9.19 주간메뉴표 (0) | 2025.09.15 | 
|---|---|
| 2025년 로또 당첨 번호 목록 (1월 ~ 9월) (0) | 2025.09.11 | 
| 화웨이 헬스 설치, huawei 화웨이 워치 gt2 갤럭시 연결 (0) | 2025.09.04 | 
| Apple 2024 아이패드 mini A17 Pro (0) | 2025.08.28 | 
| 인력감축 나선 교육업계…하반기 AIDT 파장 커지나 (1) | 2025.08.28 | 
제아무리 높은 자리에 있더라도
실력 없이는 제대로 하기 어려운 일이
나랏일이다. 호통밖에 칠 줄 모르는 국회의원과
일이 되게 하는 방향을 모르고 쓸데없는 디테일에
집착하는 장관의 수준으로는 책임지기 싫어하는
영리한 관료를 당해낼 수 없다. 이 과정에서
출세를 위한 형식적 업무에 몰두하는
관행이 반복되고 관료의 '영리한
무능'은 공직사회를 무기력하게
만든다.
- 노한동의 《나라를 위해서 일한다는 거짓말》 중에서 -
* 관료의 '영리한 무능'이라는 단어에
웃음이 배어 나옵니다. 나랏일뿐만 아니라
민간 기업체나 교육 현장이나 어디든 비슷합니다.
아무도 모를 것 같지만 그런 행태는 사실 다 보입니다.
그 좋은 머리로 '유능'하게 일을 해도 모자랄 판에
'무능'한 결과를 얻는다면 그 나라, 그 조직은
어려워집니다. '영리한 유능'이어야
활력이 넘치는 사회가 됩니다.

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