Fixed sst script, leap year handling, proper range, sigma calc
This commit is contained in:
parent
82a44afa96
commit
8a261f8174
1 changed files with 17 additions and 14 deletions
|
@ -3,22 +3,25 @@ import matplotlib.pyplot as plt
|
|||
import numpy, pandas
|
||||
import requests
|
||||
|
||||
res = requests.get('https://climatereanalyzer.org/clim/sst_daily/json/oisst2.1_world2_sst_day.json')
|
||||
if res.status_code == 200:
|
||||
data = json.loads(res.text)
|
||||
|
||||
data = data[:-3] # remove final three cols (avg and sds)
|
||||
start_range = 29
|
||||
start_year = 1982
|
||||
res = requests.get('https://climatereanalyzer.org/clim/sst_daily/json/oisst2.1_natlan1_sst_day.json')
|
||||
data = json.loads(res.text)
|
||||
data = data[1:-3]
|
||||
|
||||
temps = numpy.array([i['data'] for i in data], numpy.float32).T
|
||||
cols = [i['name'] for i in data]
|
||||
|
||||
df = pandas.DataFrame(temps, columns = cols)
|
||||
mean = df[df.columns[:start_range + 1]].mean(axis=1)
|
||||
sd = df[df.columns[:start_range + 1]].std(axis=1)
|
||||
diffs = pandas.DataFrame(columns = cols, dtype=numpy.float32)
|
||||
for col in cols[20:]:
|
||||
for col in cols[start_range:]:
|
||||
if int(col) % 4 != 0:
|
||||
df[col].iloc[60:] = df[col].iloc[60:].shift(1)
|
||||
i = cols.index(col)
|
||||
means = df[df.columns[0:20]].mean(axis=1) # 1981 - 2001 mean sst
|
||||
diffs[col] = df[col] - means
|
||||
diffs[col] = (df[col] - mean) / sd
|
||||
series = diffs.melt().drop('variable', axis=1)
|
||||
series.plot(figsize=(20,5))
|
||||
plt.xticks(numpy.arange(0,len(series),366)[20:], (numpy.arange(0, len(series), 366)[20:] / 366 + 1981).astype(int))
|
||||
plt.xticks(numpy.arange(0,len(series),366)[start_range+1:], (numpy.arange(0, len(series), 366)[start_range+1:] / 366 + start_year).astype(int)) # fix labels
|
||||
plt.show()
|
||||
|
|
Loading…
Reference in a new issue