#로또1등 #당첨번호
이제 당첨번호를 모조리 긁어와서 데이터를 만들어본다.
어떤 번호가 당첨이 되는 번호일까?
사실 이 부분은 별로 호기심이 생기지는 않는다.
내 목표는 어떤 순번(즉 모든 경우의 수를 나열했을 때 index 위치가 중요함) 일지가 관심사다.
일단 선행조건으로 위와 같이 1등 당첨번호 히스토리를 가져와야한다.
https://dhlottery.co.kr/gameResult.do?method=byWin
엑셀 다운로드 클릭!
여기서 문제가 pandas 로 바로 읽어들이기가 어렵다.
>> pip install lxml
해당 라이브러리를 설치해줘야 가능하다.
import pandas as pd
path = '../Downloads/lotto600.xls'
res = pd.read_html(path)
근데 문제는 여기서 끝나지 않는다. 다시 한 번 정제가 필요한데,
cols = []
for i, v in zip(res[1].iloc[0].to_list(), res[1].iloc[1].to_list()):
print(i, v)
if i == v:
cols.append(i)
else:
cols.append(i + '_' + v)
우선 컬럼을 모두 모아주고,
import polars as pl
df = pl.DataFrame(res[1][2:], schema=cols)
빠른 연산을 위해서 Polars 로 데이터를 다시 읽어주었다.
우선 필요한 컬럼만 빠르게 보기위해서
df = df.select([
pl.col('년도').cast(pl.Int32),
pl.col('회차').cast(pl.Int32),
pl.col('추첨일').str.to_datetime(format="%Y.%m.%d"),
pl.col('당첨번호_1').cast(pl.Int32),
pl.col('당첨번호_2').cast(pl.Int32),
pl.col('당첨번호_3').cast(pl.Int32),
pl.col('당첨번호_4').cast(pl.Int32),
pl.col('당첨번호_5').cast(pl.Int32),
pl.col('당첨번호_6').cast(pl.Int32),
pl.col('당첨번호_보너스').cast(pl.Int32).alias('당첨번호_7')
])
# 코드가 지저분함 --> 리팩토링 필요함!
df = df.with_columns([
pl.concat_list(['당첨번호_'+str(i) for i in range(1, 8)]).alias('당첨번호')
])
당첨번호는 리스트로 만들어져있다.
우선 이것만 가져다 사용해도 당첨번호가 이전에 만든 모든 조합에서 몇번째에 해당하는지 알 수 있을 것 같다.
대략 생각나는건 for 구문이나 numpy 의 where, isin 등을 사용하면 될 것 같다.