Walt: "I would do it by taking extent on last day of month minus the last day of the previous month. Then divide by # of days in month to get daily rate. I used the 5-day values."
In [ ]:
import calendar
import numpy as np
import pandas as pd
from pandas import ExcelWriter
import seaice_timeseries.api as si
In [ ]:
km2_2_mi2 = 0.386102
CLIMATOLOGY_YEARS = [1981, 2010]
climatology_string = '1981-2010'
In [ ]:
month_dict = {}
for i in range(1,13):
month_dict[i] = calendar.month_name[i]
In [ ]:
def rolling_mean(df, column, num_days=5, min_valid=2):
return pd.rolling_mean(df[column], window=num_days, min_periods=min_valid)
In [ ]:
si.c.DATA_BASE_DIR = '/Users/savoie/tmp/wget-test/'
In [ ]:
dir(si)
In [ ]:
df_in = si.all_daily('north', si.c.DATA_BASE_DIR)
In [ ]:
df_in.head()
In [ ]:
df = df_in.copy()
df['day'] = df.index.day
df['month'] = df.index.month
df['year'] = df.index.year
In [ ]:
print df.loc['1987-12-01':'1988-02-01']
Set missing data. By looking that the number of interpolated days is equal to the last() day value we find missing data.
In [ ]:
a = df.groupby([df.index.year, df.index.month])
r = a['interpolated_extent'].count() == a['day'].last()
In [ ]:
r[r == False]
Do the diff and compute delta ice.
In [ ]:
a = df.groupby([df.index.year, df.index.month]).last()
a['ice change Mkm^2 per month'] = a['5 Day'].diff(periods=1)
Set the bad data
In [ ]:
a.loc[r == False, ['5 Day', 'ice change Mkm^2 per month']] = None
now compute the other derived vars
In [ ]:
a['ice change km^2 per day'] = (a['ice change Mkm^2 per month'] / a['day']) * 1000000
a['ice change mi^2 per month'] = a['ice change Mkm^2 per month'] * km2_2_mi2 * 1000000
a['ice change mi^2 per day'] = a['ice change km^2 per day'] * km2_2_mi2
In [ ]:
a = a.unstack(1)
a = a.rename(columns=month_dict)
Compute Average data.
In [ ]:
df = si.monthly_rates_of_change('north', si.c.DATA_BASE_DIR)
df = df.unstack(1)
df = df.rename(columns=month_dict)
In [ ]:
df.head()
In [ ]:
clim = si.climatology_average_rates_of_change('north', si.c.DATA_BASE_DIR)
In [ ]:
sheets = [u'ice change Mkm^2 per month', u'ice change km^2 per day', u'ice change mi^2 per month', u'ice change mi^2 per day']
sheet = sheets[1]
In [ ]:
clim[sheet].name ='wtf'
In [ ]:
clim[sheet].to_frame().rename(index=month_dict).T
In [ ]:
bottom_offset = 3
writer = ExcelWriter('../output/Sea_Ice_Rates_of_Change.xls', engine='xlsxwriter')
sheets = [u'ice change Mkm^2 per month', u'ice change km^2 per day', u'ice change mi^2 per month', u'ice change mi^2 per day']
for sheet in sheets:
a[sheet].to_excel(writer, "{0}".format(sheet), float_format="%.3f", startrow=1, startcol=0)
writer.sheets[sheet].write_string(0,0, "{} from 5 Day Averaged Daily Values".format( sheet ))
clim[sheet].name = climatology_string
clim[sheet].to_frame().T.to_excel(writer, "{0}".format(sheet),
header=False,
startrow=a[sheet].index.size + bottom_offset, float_format="%.3f")
workbook = writer.book
# add colors blue with blue
format1 = workbook.add_format({'bg_color': '#CEC7FF',
'font_color': '#06009C'})
# add colors red with red
format2 = workbook.add_format({'bg_color': '#FFC7CE',
'font_color': '#9C0006'})
for sheet in sheets:
worksheet = writer.sheets[sheet]
worksheet.conditional_format('B3:ZZ369', {'type': 'cell',
'criteria': '>',
'value': 0,
'format': format1})
worksheet.conditional_format('B3:ZZ369', {'type': 'cell',
'criteria': '<',
'value': 0,
'format': format2})
writer.save()
In [ ]:
sheets = [u'ice change Mkm^2 per month', u'ice change km^2 per day', u'ice change mi^2 per month', u'ice change mi^2 per day']
In [ ]: