Python 복권 기록 분석 및 당 첨 번호 예측 과정 상세 설명

머리말
지난주 한 뉴스 에 놀 라'2454 만원 대상 은 아무 도 받 지 않 습 니 다!복권 사상 두 번 째 로 큰 기 상 은 광 둥(廣 東)성 중 산(中 山)에서 나 왔 다'는 2019 년 5 월 2 일 개 상 된 이색 구 중 광 둥(廣 東)성 중 산(中 山)의 한 채 민 박(蔡 民 博)에서 2 천 454 만원 으로,수상 기간 은 2019 년 7 월 1 일 까지다.
안 타 깝 게 도 당 첨 자 는 결국 나타 나 지 않 았 고,대상 2 천 454 만원 은 기 상이 됐다.중 산 시 복 채 센터 의 조 사 를 통 해 이것 은 중국 복 채 역사상 두 번 째 로 큰 보상 이다.'복권 관리 조례 시행 세칙'의 관련 규정 에 따 르 면 이번 포상 금 2454 만 위안 은 복권 공익금 에 포함 된다.
늘 복 을 위해 공헌 해 온 내 가 언제 이런 좋 은 일 을 당 할 수 있 겠 는가.그래서 저 는 Python 으로 이색 구 번 호 를 만 들 었 는데...
환경
운영 체제:Windows
파 이 썬 버 전:3.7.3
2 수요 분석
랜 덤 으로 이색 구 의 번 호 를 생 성 합 니 다.우 리 는 random 함 수 를 빌 릴 수 있 습 니 다.다음 과 같 습 니 다.

import random

def ball():
 ball_list=[]
 while 1:
  a=random.randint(1,33)
  if a not in ball_list:
   ball_list.append(a)
  if len(ball_list)==6:
   break

 ball_list.sort()
 ball_list.append(random.randint(1,16))
 print(ball_list)


ball()
하지만 이렇게 하면 당 첨 되 는 것 은 전혀 없 을 것 이라는 것 을 알 아야 한다.너무 랜 덤 이기 때문이다.
수 능 을 본 사람 은 3 년 모 의 5 년 수 능 을 다 알 고 있 을 것 이다.복권 당 첨 확률 이 낮 다 는 것 을 알 아야 하기 때문에 우 리 는 여기 서 역대 데 이 터 를 먼저 분석 하고 예년 의 데 이 터 를 통 해 다음 당 첨 번 호 를'정확하게'추산 한다.
우 리 는 이 사 이 트 를 통 해 복권 의 역사 추첨 정 보 를 조회 한다.
http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html

우 리 는 다음 페이지 를 클릭 하여 사이트 링크 가 규칙 적 인지 아 닌 지 를 보 았 다.
http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html
http://kaijiang.zhcw.com/zhcw/html/ssq/list_2.html
http://kaijiang.zhcw.com/zhcw/html/ssq/list_3.html
http://kaijiang.zhcw.com/zhcw/html/ssq/list_4.html
http://kaijiang.zhcw.com/zhcw/html/ssq/list_5.html
발견 하기 어렵 지 않 습 니 다.목표 사이트 주 소 를 다음 과 같이 나 눌 수 있 습 니 다.

url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'
url = url_part + '_' + str(i) + '.html'
i 에 대응 하 는 것 은 바로 페이지 정보 입 니 다.저 희 는 도움 을 받 습 니 다.

이곳 의 요소 정 보 를 기록 하 세 요.
다음은 각 페이지 의 구체 적 인 추첨 정 보 를 캡 처 해 야 한다.우 리 는 계속해서 개발 자 도 구 를 통 해 매회 추첨 정 보 를 분석 해 냈 다.
우 리 는 매 호의 추첨 날짜 에 대응 하 는 요소 정 보 를 순서대로 기록 합 니 다.

추첨 횟수 에 대응 하 는 요소 정보:

당 첨 번호 에 대응 하 는 요소 정보:

이러한 요소 정보 가 있 으 면 그 다음은 코드 의 구체 적 인 실현 이다.
3 코드 구현
여기에서,우 리 는 웹 페이지 의 요청 을 받 아 requests 모듈 을 사용 합 니 다.웹 주 소 를 분석 하려 면 beautifulsoup 4 모듈 을 사용 하 십시오.환경 에 pip 를 사용 하여 설치 할 수 있 는 제3자 모듈 이 없 기 때문이다.

pip install requests
pip install beautifulsoup4
pip install lxml
모듈 을 설치 한 후 가 져 오기

import requests
from bs4 import BeautifulSoup
우 리 는 먼저 첫 페이지 에서 페이지 정 보 를 받 아야 한다.

#     
basic_url = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
response = requests.get(basic_url, headers=headers, timeout=10)
response.encoding = 'utf-8'
htm = response.text

#     
soup = BeautifulSoup(htm, 'html.parser')

#       
page = int(soup.find('p', attrs={"class": "pg"}).find_all('strong')[0].text)
다음 에 우 리 는 규칙 에 따라 우리 의 URL 을 조립 할 수 있다.

url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'

for i in range(1, page+1):
 url = url_part + '_' + str(i) + '.html'
조립 한 url 을 가지 고 요청 을 하고 각 페이지 의 추첨 정 보 를 얻 습 니 다:

res = requests.get(url, headers=headers, timeout=10)
res.encoding = 'utf-8'
context = res.text
soups = BeautifulSoup(context, 'html.parser')

if soups.table is None:
 continue
elif soups.table:
 table_rows = soups.table.find_all('tr')
 for row_num in range(2, len(table_rows)-1):
  row_tds = table_rows[row_num].find_all('td')
  ems = row_tds[2].find_all('em')
  result = row_tds[0].string +', '+ row_tds[1].string +', '+ems[0].string+' '+ems[1].string+' '+ems[2].string+' '+ems[3].string+' '+ems[4].string+' '+ems[5].string+', '+ems[6].string
  print(result)
이렇게 해서 우 리 는 각 페이지 의 각 호 추첨 데이터 에 대한 획득 을 완성 했다.가 져 온 데 이 터 는 로 컬 에 저장 할 수 있 습 니 다.

def save_to_file(content):
 with open('ssq.txt', 'a', encoding='utf-8') as f:
  f.write(content + '
')
우 리 는 매 호의 추첨 데 이 터 를 얻 는 동시에 빨 간 파란색 공이 나타 나 는 번호 정 보 를 기록 했다.
\#두 변 수 를 정의 하여 역사 추첨 정보 중의 빨 간 공,파란 공 번호 정 보 를 기록 하 는 데 사용 합 니 다.

#       ,               、      
red_num = [] 
blue_num = []

red_num.append(ems[0].string) #    1
red_num.append(ems[1].string) #    2
red_num.append(ems[2].string) #    3
red_num.append(ems[3].string) #    4
red_num.append(ems[4].string) #    5
red_num.append(ems[5].string) #    6
blue_num.append(ems[6].string) #    
각 번호 의 출현 횟수 정 보 를 집계 합 니 다.

red_count = Counter(red_num)
blue_count = Counter(blue_num)
그 다음 에 우 리 는 빨간색 과 파란색 번호 가 나타 나 는 빈도 에 따라 순 서 를 매 길 수 있 고 몇 개의 이색 구 번호 정 보 를 추측 할 수 있다.

#         
red_sorted = sorted(red_count.items(), key=lambda x: x[1], reverse=False)
blue_sorted = sorted(blue_count.items(), key=lambda x: x[1], reverse=False)

red = red_sorted[0:6]
blue = blue_sorted[0:3]

red = list(map(lambda x:x[0], red))
blue = list(map(lambda x:x[0], blue))

red.sort()
blue.sort()

print('    -1 :'+str(red)+' | '+blue[0])
print('    -2 :'+str(red)+' | '+blue[1])
print('    -3 :'+str(red)+' | '+blue[2])
물론 역순 출력 도 출력 할 수 있 습 니 다.당 첨 번호 가 낮은 몇 그룹 이 나타 나 면 reverse=True 만 설정 하면 됩 니 다.
후기
여기 서 파란색 공의 각 번호 가 나타 나 는 횟수 에 따라 직사 도 를 만들어 파란색 공의 각 번호 가 나타 나 는 빈 도 를 직관 할 수 있다.

이렇게 예 측 된 당 첨 번 호 는 과연 당 첨 확률 이 얼마나 되 느 냐 는 질문 이 나 올 것 이다.
글 쎄 요.잘 모 르 겠 어 요.사 야 알 아 요.........................................................
자,이상 이 이 편의 전체 내용 입 니 다.
본 논문 의 전체 코드 는 Github 에 업로드 되 었 습 니 다.https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/Tool/SSQ_Predict/
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기