from pylab import *
import pandas as pd
import pandas.tools.plotting as pt
import datetime as dt
from pandas.stats import moments as mm
from sklearn import linear_model as lin
nino34=pd.read_csv("http://www.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/detrend.nino34.ascii.txt", sep="\s+")
link = pd.read_csv("https://raw.githubusercontent.com/johncarlosbaez/el-nino/master/R/average-link-strength-1948-2013.txt",
sep="\s+", header=None, names=["N", "S"])
link.S-=link.S.mean()
dates = dt.date(1948,01,01)+vectorize(dt.timedelta)(days=10*link["N"]+729)
del link["N"]
#dates
link.shape
nino34.ANOM.plot()
link.plot()
zz=specgram(link.T.values[-1])
zz=psd(link.T.values[-1], NFFT=2**9, noverlap=2**8)
figure(figsize=(5,5))
plot(log2(zz[1][1:]),log2(zz[0][1:]))
nino34.T
linktmp=link[arange(len(link))%73 != 0]
ll= len(linktmp)
print ll
linkmnth= linktmp.groupby(arange(ll)//3).mean()
linkmnth.reset_index()
linkmnth.T
linkmnth.shape
linkx=linkmnth
df=nino34.iloc[:len(linkx)]
df.index=range(df.shape[0])
print ll, len(linkx), df.shape
df["link"]=linkmnth
df.to_csv("ANOMALY.csv")
df.T
df.plot(x="link", y="ANOM", kind="scatter", figsize=(9,9), alpha=0.3, marker="o")
figure(figsize=(9,9))
scatter(df["link"].iloc[:-6], y=df["ANOM"].iloc[6:], alpha=0.3, marker="o")
figure(figsize=(9,9))
scatter(df.ANOM[:-6], y=df.ANOM[6:], alpha=0.3, marker="o")
reg = lin.LinearRegression()
reg.fit(df[["ANOM","link"]].iloc[:-6], df["ANOM"].iloc[6:])
print reg.coef_, reg.intercept_
print reg.score(df[["ANOM","link"]].iloc[:-6], df["ANOM"].iloc[6:])
figure(figsize=(9,9))
scatter(reg.predict(df[["ANOM","link"]].iloc[:-6]),
df["ANOM"].iloc[6:],
alpha=0.3, marker="o")
figure(figsize=(20,3))
zz=acorr(df.ANOM, maxlags=None)
figure(figsize=(20,3))
zz=acorr(df.ANOM, maxlags=48)
figure(figsize=(20,3))
zz=acorr(df.link, maxlags=None )
figure(figsize=(20,3))
zz=acorr(df.link, maxlags=48 )
figure(figsize=(20,3))
zz=xcorr(df.link, df.ANOM, maxlags=None)
mx= argmin(zz[1]), argmax(zz[1])
print mx, zz[0][mx[0]],zz[1][mx[0]], zz[0][mx[1]], zz[1][mx[1]]
figure(figsize=(20,3))
zz=xcorr(df.link, df.ANOM, maxlags=48)
mx= argmin(zz[1]), argmax(zz[1])
print mx, zz[0][mx[0]],zz[1][mx[0]], zz[0][mx[1]], zz[1][mx[1]]
print zz[1][zz[0]==0]
oni = mm.rolling_mean(nino34.ANOM.values, 3)[2:]
elnino = (mm.rolling_min(oni, 5)[4:] - 0.5)
ludnino = (mm.rolling_min(nino34.ANOM, 5)[4:] - 0.5)
oni -= oni.mean()
elnino -= elnino.mean()
ludnino -= ludnino.mean()
zz=acorr(elnino,maxlags=None)
zz=acorr(ludnino,maxlags=None)
zz=xcorr(ludnino,maxlags=None)
aa=pd.DataFrame({"link":linkmnth["S"], "elnino": elnino[:linkmnth.shape[0]]})
aa.plot()#, maxlags=None)
zz=pt.scatter_matrix(df, alpha=0.2, diagonal="kde", figsize=(15,15))
figure(figsize=(20,3))
zz=cohere(df.ANOM, df.link, NFFT=64, noverlap=32)
xcorr(aa.link, aa.elnino,maxlags=48)
linkmnth.shape
figure(figsize=(10,10))
plot(elnino[:-6], elnino[6:],marker=".", alpha=0.2)
plot(linkmnth["S"], elnino[:linkmnth.shape[0]], marker=".", alpha=0.2)
figure(figsize=(10,10))
plot(linkmnth["S"], ludnino[2:2+linkmnth.shape[0]], marker=".", alpha=0.2)
scatter(nino34.ANOM[6:], elnino)
z=arange(-10,10,0.1)
k=20
df=pd.DataFrame({"a": sin(z[k:]), "b":sin(z[:-k])})
df.plot("a","b")
df.plot("a","b",kind="scatter")
zz=xcorr(df.a, df.b, maxlags=40)