Adding initial weather lookup and populating the database from csvs
This commit is contained in:
75
data/build_weather.py
Normal file
75
data/build_weather.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import requests
|
||||
import datetime
|
||||
|
||||
class Weather:
|
||||
# Example usage (requires OpenWeatherMap API key)
|
||||
# Replace 'YOUR_API_KEY' with your actual key from https://openweathermap.org/
|
||||
def get_weather(self, latitude: float, longitude: float, date_str: str, hour: int) -> dict:
|
||||
"""
|
||||
Fetches weather data for the specified location and time.
|
||||
|
||||
Args:
|
||||
latitude (float): Latitude of the location in degrees.
|
||||
longitude (float): Longitude of the location in degrees.
|
||||
date_str (str): Date in YYYYMMDD format.
|
||||
hour (int): Hour (0-23) when you want to know the weather.
|
||||
|
||||
Returns:
|
||||
dict: Dictionary containing temperature, condition, and sunrise/sunset times.
|
||||
"""
|
||||
# Convert date string components for API request
|
||||
date = f"{date_str[:4]}-{date_str[4:6]}-{date_str[6:8]}"
|
||||
|
||||
stats_to_get = [
|
||||
"temperature_2m",
|
||||
"relative_humidity_2m",
|
||||
"dew_point_2m",
|
||||
"apparent_temperature",
|
||||
"pressure_msl",
|
||||
"surface_pressure",
|
||||
"precipitation",
|
||||
"rain",
|
||||
"snowfall",
|
||||
"cloud_cover",
|
||||
"cloud_cover_low",
|
||||
"cloud_cover_mid",
|
||||
"cloud_cover_high",
|
||||
"shortwave_radiation",
|
||||
"direct_radiation",
|
||||
"direct_normal_irradiance",
|
||||
"diffuse_radiation",
|
||||
"global_tilted_irradiance",
|
||||
"sunshine_duration",
|
||||
"wind_speed_10m",
|
||||
"wind_speed_100m",
|
||||
"wind_direction_10m",
|
||||
"wind_direction_100m",
|
||||
"wind_gusts_10m",
|
||||
"et0_fao_evapotranspiration",
|
||||
"weather_code",
|
||||
"snow_depth",
|
||||
"vapour_pressure_deficit",
|
||||
"soil_temperature_0_to_7cm",
|
||||
"soil_temperature_7_to_28cm",
|
||||
"soil_temperature_28_to_100cm",
|
||||
"soil_temperature_100_to_255cm",
|
||||
"soil_moisture_0_to_7cm",
|
||||
"soil_moisture_7_to_28cm",
|
||||
"soil_moisture_28_to_100cm",
|
||||
"soil_moisture_100_to_255cm",
|
||||
]
|
||||
|
||||
stats_to_get = ','.join(stats_to_get)
|
||||
|
||||
try:
|
||||
api_url = f"https://archive-api.open-meteo.com/v1/archive?latitude={latitude}&longitude={longitude}&start_date={date}&end_date={date}&hourly={stats_to_get}"
|
||||
response = requests.get(api_url)
|
||||
data = response.json()
|
||||
|
||||
if response.status_code != 200:
|
||||
return {"error": "Failed to fetch weather", "details": data}
|
||||
|
||||
return data
|
||||
|
||||
except Exception as e:
|
||||
return {"error": str(e), "details": f"No weather data available for {latitude}, {longitude} on {date_str}"}
|
||||
@@ -15,7 +15,9 @@ class Importer:
|
||||
bb_dict = list(reader)
|
||||
|
||||
for game in bb_dict:
|
||||
print(game)
|
||||
self.populate_database_with_stats(game)
|
||||
break
|
||||
|
||||
|
||||
def parse_one_line(self, line):
|
||||
@@ -24,7 +26,7 @@ class Importer:
|
||||
def parse_last_line_of_file(self, filepath):
|
||||
pass
|
||||
|
||||
def populate_database_with_stats(self, bb_game_stats):
|
||||
def populate_database_with_stats(self, game_stats):
|
||||
insert_game = """
|
||||
INSERT INTO games
|
||||
(
|
||||
@@ -103,54 +105,40 @@ class Importer:
|
||||
)
|
||||
"""
|
||||
|
||||
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_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)
|
||||
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
|
||||
# Each dictionary corresponds to a row in the CSV with keys: name, address, number_of_kids, night_or_day
|
||||
|
||||
# Open and read the CSV file
|
||||
with open(file_path, 'r') as csvfile:
|
||||
# Read each row using csv.reader
|
||||
reader = csv.DictReader(csvfile)
|
||||
list_of_dict = list(reader)
|
||||
|
||||
return list_of_dict
|
||||
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"]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user