AJMR-Python-Baird/LSU/LSU_Weather.py

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()