mattritchey commited on
Commit
809b57b
·
verified ·
1 Parent(s): 9bb134e

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +13 -10
main.py CHANGED
@@ -35,12 +35,13 @@ def geocode_address(address):
35
 
36
  return lat, lon
37
 
38
- def get_hail_data(address, start_date, end_date, radius_miles, get_max):
 
39
 
40
  start_date = pd.Timestamp(str(start_date)).strftime('%Y%m%d%H')
41
  end_date = pd.Timestamp(str(end_date)).strftime('%Y%m%d%H')
42
- date_years = pd.date_range(start=start_date, end=end_date, freq='M')
43
- date_range_days = pd.date_range(start_date, end_date)
44
  years = list(set([d.year for d in date_years]))
45
 
46
  if len(years) == 0:
@@ -49,6 +50,7 @@ def get_hail_data(address, start_date, end_date, radius_miles, get_max):
49
  # Geocode Address
50
  lat, lon= geocode_address(address)
51
 
 
52
  # Convert Lat Lon to row & col on Array
53
  transform = pickle.load(open('Data/hrrr_crs.pkl', 'rb'))
54
  row, col = rasterio.transform.rowcol(transform['affine'], lon, lat)
@@ -62,19 +64,20 @@ def get_hail_data(address, start_date, end_date, radius_miles, get_max):
62
 
63
  files_choosen = [i for i in files if any(i for j in years if str(j) in i)]
64
 
 
65
  # Query and Collect H5 Data
66
  all_data = []
67
  all_dates = []
68
  for file in files_choosen:
69
  with h5py.File(file, 'r') as f:
70
  # Get Dates from H5
71
- dates = f['dates'][:]
72
  date_idx = np.where((dates >= int(start_date))
73
  & (dates <= int(end_date)))[0]
74
 
75
  # Select Data by Date and Radius
76
  dates = dates[date_idx]
77
- data = f['hail'][date_idx, row-radius_miles:row +
78
  radius_miles+1, col-radius_miles:col+radius_miles+1]
79
 
80
  all_data.append(data)
@@ -95,14 +98,14 @@ def get_hail_data(address, start_date, end_date, radius_miles, get_max):
95
  if get_max == True:
96
  data_max = np.max(data_mat, axis=(1, 2))
97
  df_data = pd.DataFrame({'Date': dates_all,
98
- 'Hail_max': data_max})
99
  # Get all Data
100
  else:
101
  data_all = list(data_mat)
102
  df_data = pd.DataFrame({'Date': dates_all,
103
- 'Hail_all': data_all})
104
 
105
- df_data['Date'] = pd.to_datetime(df_data['Date'], format='%Y%m%d')
106
  df_data = df_data.set_index('Date')
107
 
108
  df_data = df_data.reindex(date_range_days, fill_value=0).reset_index().rename(
@@ -116,10 +119,10 @@ def get_hail_data(address, start_date, end_date, radius_miles, get_max):
116
  async def predict(address: str, start_date: str, end_date: str, radius_miles: int, get_max: bool):
117
 
118
  try:
119
- results = get_hail_data(address, start_date,
120
  end_date, radius_miles, get_max)
121
  except:
122
- results = pd.DataFrame({'Date': ['error'], 'Hail_max': ['error']})
123
 
124
  return results.to_json()
125
 
 
35
 
36
  return lat, lon
37
 
38
+
39
+ def get_data(address, start_date, end_date, radius_miles, get_max):
40
 
41
  start_date = pd.Timestamp(str(start_date)).strftime('%Y%m%d%H')
42
  end_date = pd.Timestamp(str(end_date)).strftime('%Y%m%d%H')
43
+ date_years = pd.date_range(start=start_date[:-2], end=end_date[:-2], freq='M')
44
+ date_range_days = pd.date_range(start_date[:-2], end_date[:-2], freq='H')
45
  years = list(set([d.year for d in date_years]))
46
 
47
  if len(years) == 0:
 
50
  # Geocode Address
51
  lat, lon= geocode_address(address)
52
 
53
+
54
  # Convert Lat Lon to row & col on Array
55
  transform = pickle.load(open('Data/hrrr_crs.pkl', 'rb'))
56
  row, col = rasterio.transform.rowcol(transform['affine'], lon, lat)
 
64
 
65
  files_choosen = [i for i in files if any(i for j in years if str(j) in i)]
66
 
67
+
68
  # Query and Collect H5 Data
69
  all_data = []
70
  all_dates = []
71
  for file in files_choosen:
72
  with h5py.File(file, 'r') as f:
73
  # Get Dates from H5
74
+ dates = f['date_time_hr'][:]
75
  date_idx = np.where((dates >= int(start_date))
76
  & (dates <= int(end_date)))[0]
77
 
78
  # Select Data by Date and Radius
79
  dates = dates[date_idx]
80
+ data = f['APCP'][date_idx, row-radius_miles:row +
81
  radius_miles+1, col-radius_miles:col+radius_miles+1]
82
 
83
  all_data.append(data)
 
98
  if get_max == True:
99
  data_max = np.max(data_mat, axis=(1, 2))
100
  df_data = pd.DataFrame({'Date': dates_all,
101
+ 'APCP_max': data_max})
102
  # Get all Data
103
  else:
104
  data_all = list(data_mat)
105
  df_data = pd.DataFrame({'Date': dates_all,
106
+ 'APCP_all': data_all})
107
 
108
+ df_data['Date'] = pd.to_datetime(df_data['Date'], format='%Y%m%d%H')
109
  df_data = df_data.set_index('Date')
110
 
111
  df_data = df_data.reindex(date_range_days, fill_value=0).reset_index().rename(
 
119
  async def predict(address: str, start_date: str, end_date: str, radius_miles: int, get_max: bool):
120
 
121
  try:
122
+ results = get_data(address, start_date,
123
  end_date, radius_miles, get_max)
124
  except:
125
+ results = pd.DataFrame({'Date': ['error'], 'APCP_max': ['error']})
126
 
127
  return results.to_json()
128