diff --git a/data/db_connect.py b/data/db_connect.py index 483beee..ecdd8a9 100644 --- a/data/db_connect.py +++ b/data/db_connect.py @@ -24,9 +24,11 @@ class Database: else: return None - def insert(self, name, address): + def insert(self, query, values): # Insert new entry into the database cursor = self.db.cursor() - query = "INSERT INTO people (name, address) VALUES (?, ?)" - cursor.execute(query, (name, address)) + cursor.execute(query, values) + new_id = cursor.lastrowid self.db.commit() + + return new_id diff --git a/data/sql/build_db.sql b/data/sql/build_db.sql index 7c9bce7..aac4039 100644 --- a/data/sql/build_db.sql +++ b/data/sql/build_db.sql @@ -24,23 +24,6 @@ CREATE TABLE IF NOT EXISTS teams ( PRIMARY KEY (team) ); -CREATE TABLE IF NOT EXISTS weather ( - id INTEGER NOT NULL, - temperature SMALLINT, - wind_speed FLOAT, - air_pressure FLOAT, - humidity SMALLINT UNSIGNED, - uv_index FLOAT, - air_quality TINYINT UNSIGNED, - percipitation_type CHAR(10), - percipitation_amount FLOAT, - sky_condition CHAR(20), - sun_rise TIME, - sun_set TIME, - moon_phase TINYINT UNSIGNED, - PRIMARY KEY (id) -); - CREATE TABLE IF NOT EXISTS games ( id INTEGER NOT NULL, game_date date NOT NULL, @@ -67,7 +50,6 @@ CREATE TABLE IF NOT EXISTS games ( rf_ump_id CHAR(8), rf_ump_name VARCHAR, weather_id INT NOT NULL, - FOREIGN KEY (weather_id) REFERENCES weather(id) FOREIGN KEY (park_id) REFERENCES parks(park_id) PRIMARY KEY (id) ); @@ -155,3 +137,20 @@ CREATE TABLE IF NOT EXISTS team_game ( PRIMARY KEY (game, team) ); +CREATE TABLE IF NOT EXISTS weather ( + game_id INTEGER NOT NULL, + temperature SMALLINT, + wind_speed FLOAT, + air_pressure FLOAT, + humidity SMALLINT UNSIGNED, + uv_index FLOAT, + air_quality TINYINT UNSIGNED, + percipitation_type CHAR(10), + percipitation_amount FLOAT, + sky_condition CHAR(20), + sun_rise TIME, + sun_set TIME, + moon_phase TINYINT UNSIGNED, + FOREIGN KEY (game_id) REFERENCES games(id), + PRIMARY KEY (game_id) +); diff --git a/data/stats_importer.py b/data/stats_importer.py index ebd2020..d316cb4 100644 --- a/data/stats_importer.py +++ b/data/stats_importer.py @@ -1,5 +1,5 @@ import csv -from db_connect import Database +from data.db_connect import Database class Importer: def __init__(self, database: Database): @@ -25,7 +25,123 @@ class Importer: pass def populate_database_with_stats(self, bb_game_stats): - pass + insert_game = """ + INSERT INTO games + ( + game_date, game_number, day_of_week, + length_in_outs, day_night, completion_info, + forfeit, protest, park_id, + attendence, length_in_minutes, home_plate_ump_id, + home_plate_ump_name, b1_ump_id, b1_ump_name, + b2_ump_id, b2_ump_name, b3_ump_id, + b3_ump_name, lf_ump_id, lf_ump_name, + rf_ump_id, rf_ump_name + ) + VALUES + ( + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ? + ) + """ + + insert_team_game = """ + INSERT INTO team_game + ( + game, team, game_num, + score, line_score, at_bats, + hits, doubles, triples, + homeruns, rbis, sacrifice_hits, + sacrifice_flies, hit_by_pitch, walks, + intentional_walks, strikeouts, stolen_bases, + caught_stealing, grounded_double, interference, + left_on_base, pitchers_used, individual_earned_runs, + earned_runs, wild_pitches, balks, + putouts, assists, errors, + passed, double_play, triple_play, + manager_id, manager_name, starting_pitcher_id, + starting_pitcher_name, starting_1_id, starting_1_name, + starting_1_position, starting_2_id, starting_2_name, + starting_2_position, starting_3_id, starting_3_name, + starting_3_position, starting_4_id, starting_4_name, + starting_4_position, starting_5_id, starting_5_name, + starting_5_position, starting_6_id, starting_6_name, + starting_6_position, starting_7_id, starting_7_name, + starting_7_position, starting_8_id, starting_8_name, + starting_8_position, starting_9_id, starting_9_name, + starting_9_position + ) + VALUES + ( + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ?, ?, ?, + ? + ) + """ + + for game_stats in bb_game_stats: + game_data = [ + game_stats["date"], game_stats["num-of-game"], game_stats["day-of-week"], + game_stats["length-in-outs"], game_stats["day-night"], game_stats["completion-info"], + game_stats["forfeit"], game_stats["protest"], game_stats["park-id"], + game_stats["attendance"], game_stats["length-in-minutes"], game_stats["home-plate-ump-id"], + game_stats["home-plate-ump-name"], game_stats["1b-plate-ump-id"], game_stats["1b-plate-ump-name"], + game_stats["2b-plate-ump-id"], game_stats["2b-plate-ump-name"], game_stats["3b-plate-ump-id"], + game_stats["3b-plate-ump-name"], game_stats["lf-plate-ump-id"], game_stats["lf-plate-ump-name"], + game_stats["rf-plate-ump-id"], game_stats["rf-plate-ump-name"], + ] + + game_id = self.database.insert(insert_game, game_data) + + team_data = [ + game_id, game_stats["visiting-team"], game_stats["visiting-game-num"], + game_stats["visiting-score"], game_stats["visiting-line-scores"], game_stats["visiting-at-bats"], + game_stats["visiting-hits"], game_stats["visiting-doubles"], game_stats["visiting-triples"], + game_stats["visiting-homeruns"], game_stats["visiting-rbi"], game_stats["visiting-sacrifice-hits"], + game_stats["visiting-sacrifice-flies"], game_stats["visiting-hit-by-pitch"], game_stats["visiting-walks"], + game_stats["visiting-intentional-walks"], game_stats["visiting-strikeouts"], game_stats["visiting-stolen-bases"], + game_stats["visiting-caught-stealing"], game_stats["visiting-grounded-double"], game_stats["visiting-interference"], + game_stats["visiting-left-on-base"], game_stats["visiting-pitchers-used"], game_stats["visiting-individual-earned-runs"], + game_stats["visiting-team-earned-runs"], game_stats["visiting-wild-pitches"], game_stats["visiting-balks"], + game_stats["visiting-putouts"], game_stats["visiting-assists"], game_stats["visiting-errors"], + game_stats["visiting-passed"], game_stats["visiting-double-play"], game_stats["visiting-triple-play"], + game_stats["visiting-manager-id"], game_stats["visiting-manager-name"], game_stats["visiting-start-pitcher-id"], + game_stats["visiting-start-pitcher-name"], game_stats["visiting-starting-1-id"], game_stats["visiting-starting-1-name"], + game_stats["visiting-starting-1-position"], game_stats["visiting-starting-2-id"], game_stats["visiting-starting-2-name"], + game_stats["visiting-starting-2-position"], game_stats["visiting-starting-3-id"], game_stats["visiting-starting-3-name"], + game_stats["visiting-starting-3-position"], game_stats["visiting-starting-4-id"], game_stats["visiting-starting-4-name"], + game_stats["visiting-starting-4-position"], game_stats["visiting-starting-5-id"], game_stats["visiting-starting-5-name"], + game_stats["visiting-starting-5-position"], game_stats["visiting-starting-6-id"], game_stats["visiting-starting-6-name"], + game_stats["visiting-starting-6-position"], game_stats["visiting-starting-7-id"], game_stats["visiting-starting-7-name"], + game_stats["visiting-starting-7-position"], game_stats["visiting-starting-8-id"], game_stats["visiting-starting-8-name"], + game_stats["visiting-starting-8-position"], game_stats["visiting-starting-9-id"], game_stats["visiting-starting-9-name"], + game_stats["visiting-starting-9-position"] + ] + def parse_csv(file_path): # Function to parse a CSV file and return an array of dictionaries diff --git a/main.py b/main.py index 4805868..a0caab1 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ import numpy as np # helps with the math import matplotlib.pyplot as plt # to plot error during training from data.db_connect import Database +from data.stats_importer import parse_csv # input data inputs = np.array([[0, 0, 1, 0], @@ -68,6 +69,9 @@ if __name__ == '__main__': db_conn.run_sql_file(fill_parks_path) db_conn.run_sql_file(fill_teams_path) + test_csv = "./data/stats/gl2022.csv" + print(parse_csv(test_csv)) + else: # create neural network NN = NeuralNetwork(inputs, outputs)