You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
"""get_ww3.py
 | 
						|
Download records from WaveWatch III (WW3) global wave model.
 | 
						|
D. Howe
 | 
						|
2019-07-31
 | 
						|
"""
 | 
						|
import netCDF4
 | 
						|
import pandas as pd
 | 
						|
import xarray as xr
 | 
						|
from tqdm import tqdm
 | 
						|
 | 
						|
# Set coordinates
 | 
						|
lon = 136.62
 | 
						|
lat = -36.07
 | 
						|
 | 
						|
# Set product code
 | 
						|
product_code = 'ww3.aus_4m'
 | 
						|
 | 
						|
# Select output variables
 | 
						|
var_names = ['hs', 'dp', 'fp']
 | 
						|
 | 
						|
# Set time period
 | 
						|
start_date = '1980-01'
 | 
						|
end_date = '1980-12'
 | 
						|
 | 
						|
url = ('http://data-cbr.csiro.au/thredds/dodsC/catch_all/'
 | 
						|
       'CMAR_CAWCR-Wave_archive/CAWCR_Wave_Hindcast_aggregate/gridded/')
 | 
						|
 | 
						|
# Generate list of dates
 | 
						|
t0 = pd.to_datetime(start_date)
 | 
						|
t1 = pd.to_datetime(end_date) + pd.DateOffset(months=1)
 | 
						|
dates = pd.date_range(t0, t1, freq='M')
 | 
						|
 | 
						|
# Create output dataframe
 | 
						|
master = pd.DataFrame()
 | 
						|
 | 
						|
for date in tqdm(dates):
 | 
						|
    # Get date string for current month
 | 
						|
    date_str = date.strftime('%Y%m')
 | 
						|
 | 
						|
    # Open dataset
 | 
						|
    ds = xr.open_dataset(url + f'{product_code}.{date_str}.nc')
 | 
						|
 | 
						|
    # Extract variables from dataset
 | 
						|
    ds = ds.sel(longitude=lon, latitude=lat, method='nearest')
 | 
						|
    df = ds[var_names].to_dataframe()
 | 
						|
 | 
						|
    # Add to output dataframe
 | 
						|
    master = master.append(df)
 | 
						|
 | 
						|
# Get lat and lon bearings
 | 
						|
ew = 'E' if lon > 0 else 'W'
 | 
						|
ns = 'N' if lat > 0 else 'S'
 | 
						|
 | 
						|
# Export to csv
 | 
						|
csv_name = f'{product_code}_{abs(lon)}{ew}_{abs(lat)}{ns}.csv'
 | 
						|
master.to_csv(csv_name)
 |