112 lines
3.4 KiB
Python
112 lines
3.4 KiB
Python
#%% Script to read LSU weather files and save as .bts
|
|
# AJMR, APril 11, 2022
|
|
|
|
# Set up
|
|
from stdio.bts import bts_write
|
|
from stdio.types import STData
|
|
from stdio.csv import parse_field_name, identify_data_type, identify_angular_name, extract_angular_unit, identify_angular_unit, format_series, is_missing, is_missing_number, is_missing_text, csv_read
|
|
from pybut.gnx import is_numeric, field_format
|
|
from pybut.dtx import identify_time, extract_time
|
|
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
import datetime as datetime
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
import dataretrieval.nwis as nwis
|
|
import eeweather
|
|
#%% Read in data
|
|
|
|
# Initalize a list to hold the data
|
|
weatherPath = '//srv-mad3/Projects/13522.101 LSU Lakes/03_Data/02_Physical/02_Weather_Reports/'
|
|
|
|
# weatherDat = pd.read_excel(weatherPath + '2002-2018 weather_report.xls.xlsx',
|
|
# engine='openpyxl', header=1)
|
|
weatherDat = pd.read_excel(weatherPath + '2005 weather_report.xlsx',
|
|
engine='openpyxl', header=1)
|
|
weatherDat.rename(columns={'DateTimeCollected': 'DATETIME'}, inplace=True)
|
|
|
|
|
|
#%% Format for BTS
|
|
ts = STData()
|
|
ts.dims['time'] = []
|
|
|
|
for idx, name in enumerate(weatherDat.columns.values.tolist()):
|
|
|
|
nameFormat, lame, unit = parse_field_name(name)
|
|
dtype = identify_data_type(nameFormat, unit) # NOTE: can not identify text at this point
|
|
ts.var_add_empty(lame, name=nameFormat, unit=unit, dtype=dtype)
|
|
|
|
# Everything should be string
|
|
ts.series[idx] = np.array(weatherDat[name].values.astype(str))
|
|
|
|
|
|
# NOTE: will choke on missing data in time fields
|
|
#
|
|
tvar = identify_time(ts.series, ts.names, ts.units)
|
|
time, msg = extract_time(ts.series, tvar)
|
|
|
|
ts.dims['time'] = np.array(time)
|
|
for idx in range(len(ts.axes)):
|
|
ts.axes[idx] = ['time']
|
|
ts.ranks[idx] = 0
|
|
|
|
for idx in range(len(ts.series)):
|
|
ts.types[idx], ts.forms[idx], ts.precs[idx], ts.series[idx] = format_series(ts.types[idx], ts.series[idx])
|
|
|
|
|
|
#%% Save as BTS
|
|
# bts_write(weatherPath + '2002-2018 weather_report.bts', ts)
|
|
bts_write(weatherPath + '2005 weather_report.bts', ts)
|
|
|
|
# %% Plot
|
|
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Import as dataframe
|
|
weatherPath = '//srv-mad3/Projects/13522.101 LSU Lakes/03_Data/02_Physical/02_Weather_Reports/'
|
|
weatherDat = pd.read_excel(weatherPath + '2002-2018 weather_report.xls.xlsx',
|
|
engine='openpyxl', header=1)
|
|
|
|
# Plot Dataframe
|
|
|
|
# Set up axes
|
|
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(6, 6))
|
|
|
|
# Plot
|
|
# weatherDat.plot(x='DateTimeCollected', y='Max Air Temp (°F)', ax=axes, legend=True)
|
|
# axes.set_ylim(30, 120)
|
|
# axes.set_ylabel('Max Air Temp (°F)')
|
|
|
|
weatherDat.plot(x='DateTimeCollected', y='Rain (in)', ax=axes[0], legend=True)
|
|
axes[0].set_ylabel('Rain (in)')
|
|
|
|
weatherDat.plot(x='DateTimeCollected', y='Avg Wind Speed (mph)', ax=axes[1], legend=True)
|
|
axes[1].set_ylabel('Avg Wind Speed (mph)')
|
|
|
|
weatherDat.plot(x='DateTimeCollected', y='Avg Wind Direction (°)', ax=axes[2], legend=True)
|
|
axes[2].set_ylabel('Avg Wind Direction (°)')
|
|
|
|
|
|
# Set xlim
|
|
# axes.set_xlim(datetime.datetime(2005, 1, 1), datetime.datetime(2005, 12, 31))
|
|
axes[0].set_xlim(datetime.datetime(2005, 9, 21), datetime.datetime(2005, 10, 1))
|
|
axes[1].set_xlim(datetime.datetime(2005, 9, 21), datetime.datetime(2005, 10, 1))
|
|
axes[2].set_xlim(datetime.datetime(2005, 9, 21), datetime.datetime(2005, 10, 1))
|
|
|
|
axes[2].set_xlabel('Date')
|
|
|
|
|
|
# Show
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|