Add code for least/most common number and load_dataframe
This commit is contained in:
1 parent
99c5c31fd3
commit
b14fc3ba57
1 file changed
+52
@@ -0,0 +1,52 @@
|
||||
from collections import Counter
|
||||
|
||||
import pandas as pd
|
||||
from sqlalchemy import select
|
||||
|
||||
from data.database import Base, dal, project_variables
|
||||
import util.drawing as drawutil
|
||||
|
||||
|
||||
def load_dataframe(table_name: str, use_rule_change_date: bool = True) -> pd.DataFrame:
|
||||
"""connect to the database and load game data into a pandas dataframe"""
|
||||
|
||||
dal.connect()
|
||||
session = dal.Session()
|
||||
|
||||
game_dict = drawutil.check_table_name(table_name=table_name)
|
||||
if game_dict:
|
||||
start_date = game_dict['rule_date'] if use_rule_change_date else None
|
||||
target_table = Base.metadata.tables.get(game_dict['db_table_name'])
|
||||
if start_date is not None:
|
||||
sql_statement = select(target_table).where(target_table.columns.draw_date >= start_date)
|
||||
else:
|
||||
sql_statement = select(target_table)
|
||||
|
||||
return pd.read_sql(sql_statement, session.bind)
|
||||
else:
|
||||
raise ValueError('An invalid table name was provided')
|
||||
|
||||
|
||||
def get_most_common_number(
|
||||
data_frame: pd.DataFrame,
|
||||
columns: list | None = None,
|
||||
top: int = 1
|
||||
) -> list[int]:
|
||||
if columns is None:
|
||||
columns = ['main_ball1', 'main_ball2', 'main_ball3', 'main_ball4', 'main_ball5']
|
||||
flat_numbers = data_frame[columns].values.flatten()
|
||||
counts = Counter(flat_numbers)
|
||||
return [num for num, _ in counts.most_common(top)]
|
||||
|
||||
|
||||
def get_least_common_number(
|
||||
data_frame: pd.DataFrame,
|
||||
columns: list | None = None,
|
||||
bottom: int = 1
|
||||
) -> list[int]:
|
||||
if columns is None:
|
||||
columns = ['main_ball1', 'main_ball2', 'main_ball3', 'main_ball4', 'main_ball5']
|
||||
flat_numbers = data_frame[columns].values.flatten()
|
||||
counts = Counter(flat_numbers)
|
||||
return list(reversed([num for num, _ in counts.most_common()[-bottom:]]))
|
||||
|
||||
Reference in new issue
Block a user