o) make sure to have installed R properly
o) install the python library rpy2
o) install the R libraries sp, gstat and intamap inside the R environment (best as sudo/adminstrator):
install.packages("sp")
install.packages("gstat")
install.packages("intamap")
In [1]:
from rpy2.robjects.packages import importr
from rpy2.robjects import r
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
sp = importr('sp')
gstat = importr('gstat')
intamap = importr('intamap')
In [3]:
r('jet.colors <- c("#00007F","blue","#007FFF","cyan","#7FFF7F","yellow","#FF7F00","red","#7F0000")')
r('col.palette <- colorRampPalette(jet.colors)')
Out[3]:
In [4]:
coords = pd.read_csv('./radar_xy.csv', header=None)
coords.columns = ['x', 'y']
coords.head()
Out[4]:
In [5]:
rainfall = pd.read_csv('./radar_sent/radar_snap_24h_2011_08_05-00_00.csv', header=None)
rainfall = pd.DataFrame(rainfall.iloc[0,5::])
rainfall.index = np.arange(0,len(rainfall),1)
rainfall.columns = ['R']
rainfall['x'] = coords['x']
rainfall['y'] = coords['y']
rainfall.head()
Out[5]:
In [6]:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
In [7]:
mask = rainfall.R>0
rainfall = rainfall[mask]
r_df = pandas2ri.py2ri(rainfall)
r.assign('mydata', r_df)
Out[7]:
In [8]:
r('''
mydata <- data.frame(mydata)
coordinates(mydata) <- ~x+y
''')
Out[8]:
In [10]:
r('''
RAD24 <- read.table("./radar_sent/radar_snap_24h_2011_08_05-00_00.csv",sep=",",colClasses="numeric")
RAD24 <- as.numeric(as.vector(RAD24))
RAD24 <- RAD24[6:length(RAD24)]
png("map_24h.png",height=900,width=900)
ncuts <- 20
cuts <- seq(min(RAD24,na.rm=TRUE),max(RAD24,na.rm=TRUE),length=ncuts)
print(spplot(mydata["R"],xlab="East [m]",ylab="North [m]",key.space="right",cuts=cuts,region=TRUE,col.regions=col.palette(ncuts),main="Rainfall [mm]",scales=list(draw=TRUE)))
dev.off()
''')
Out[10]:
In [11]:
p_myiso = r('myiso <- variogram(R~1,mydata,width=2,cutoff=100)')
In [12]:
p_myiso.head()
Out[12]:
In [13]:
plt.plot(p_myiso['dist'], p_myiso['gamma'], '-o')
Out[13]:
In [14]:
p_myiso_map = r('myisomap <- variogram(R~1,mydata,width=2,cutoff=50,map=TRUE)')
r('''
png("myvariogram_map_24h.png",height=600,width=600)
print(plot(myisomap))
dev.off()
''')
Out[14]:
In [15]:
rain_sorted = rainfall.sort_values('R', ascending=False)
rain_sorted = rain_sorted.iloc[0:1499]
rs_df = pandas2ri.py2ri(rain_sorted)
r.assign('data_sorted', rs_df)
r('''
data_sorted <- data.frame(data_sorted)
coordinates(data_sorted) <- ~x+y
''')
Out[15]:
In [16]:
r('''
hat.anis <- estimateAnisotropy(data_sorted,"R")
anis <- c(90-hat.anis$direction,1/hat.anis$ratio)
''')
Out[16]:
In [17]:
dir_var = r('directional_variograms <- variogram(R~1,mydata,width=2,cutoff=100,alpha=c(99.9,189.9),tol.hor=5)')
dir_1 = dir_var['dir.hor']==99.9
plt.figure()
plt.subplot(121)
plt.plot(dir_var.dist[dir_1], dir_var.gamma[dir_1])
plt.subplot(122)
plt.plot(dir_var.dist[~dir_1], dir_var.gamma[~dir_1])
Out[17]:
In [18]:
r('initial_vario_sph <- vgm(psill=500,model="Sph",range=40,nugget=0)')
sph_fitted = r('fitted_vario_sph <- fit.variogram(myiso,initial_vario_sph)')
print(sph_fitted)
In [19]:
r('''
png("fitted_isotropic_variogram_sph_24h.png",height=600,width=900)
print(plot(myiso,fitted_vario_sph))
dev.off()
''')
Out[19]:
In [20]:
r('range <- fitted_vario_sph$range[2]')
Out[20]:
In [21]:
r('nugget <- fitted_vario_sph$psill[1]')
Out[21]:
In [22]:
r('sill <- sum(fitted_vario_sph$psill)')
Out[22]:
In [23]:
r('SSErr_sph <- attributes(fitted_vario_sph)$SSErr')
Out[23]:
In [24]:
r('initial_vario_exp <- vgm(psill=500,model="Exp",range=40/3,nugget=0)')
exp_fitted = r('fitted_vario_exp <- fit.variogram(myiso,initial_vario_exp)')
In [25]:
r('SSErr_exp <- attributes(fitted_vario_exp)$SSErr')
Out[25]:
In [26]:
r('''
png("fitted_isotropic_variogram_exp_24h.png",height=600,width=900)
print(plot(myiso,fitted_vario_exp))
dev.off()
''')
Out[26]:
In [27]:
rain_15_min_1 = pd.read_csv('./radar_sent/radar_snap_2011_08_01-00_00.csv', header=None)
rain_15_min_1 = pd.DataFrame(rain_15_min_1.iloc[0,5::])
rain_15_min_1.index = np.arange(0,len(rain_15_min_1),1)
rain_15_min_1.columns = ['R']
rain_15_min_1['x'] = coords['x']
rain_15_min_1['y'] = coords['y']
rain_15_min_2 = pd.read_csv('./radar_sent/radar_snap_2011_08_05-16_00.csv', header=None)
rain_15_min_2 = pd.DataFrame(rain_15_min_2.iloc[0,5::])
rain_15_min_2.index = np.arange(0,len(rain_15_min_2),1)
rain_15_min_2.columns = ['R']
rain_15_min_2['x'] = coords['x']
rain_15_min_2['y'] = coords['y']
rain_3h = pd.read_csv('./radar_sent/radar_snap_3h_2011_08_05-15_00.csv', header=None)
rain_3h = pd.DataFrame(rain_3h.iloc[0,5::])
rain_3h.index = np.arange(0,len(rain_3h),1)
rain_3h.columns = ['R']
rain_3h['x'] = coords['x']
rain_3h['y'] = coords['y']
In [28]:
mask = rain_15_min_1.R>0
rain_15_min_1 = rain_15_min_1[mask]
r_df_15_1 = pandas2ri.py2ri(rain_15_min_1)
r.assign('mydata_15_1', r_df_15_1)
mask = rain_15_min_2.R>0
rain_15_min_2 = rain_15_min_2[mask]
r_df_15_2 = pandas2ri.py2ri(rain_15_min_2)
r.assign('mydata_15_2', r_df_15_2)
mask = rain_3h.R>0
rain_3h = rain_3h[mask]
r_df_3h = pandas2ri.py2ri(rain_3h)
r.assign('mydata_3h', r_df_3h)
Out[28]:
In [29]:
r('''
mydata_15_1 <- data.frame(mydata_15_1)
coordinates(mydata_15_1) <- ~x+y
''')
p_myiso_1 = r('myiso_15_1 <- variogram(R~1,mydata_15_1,width=2,cutoff=100)')
r('''
mydata_15_2 <- data.frame(mydata_15_2)
coordinates(mydata_15_2) <- ~x+y
''')
p_myiso_2 = r('myiso_15_2 <- variogram(R~1,mydata_15_2,width=2,cutoff=100)')
r('''
mydata_3h <- data.frame(mydata_3h)
coordinates(mydata_3h) <- ~x+y
''')
p_myiso_3 = r('myiso_3h <- variogram(R~1,mydata_3h,width=2,cutoff=100)')
In [30]:
print(p_myiso_1.head())
print(p_myiso_2.head())
print(p_myiso_3.head())
In [31]:
r('''
RAD24 <- read.table("./radar_sent/radar_snap_2011_08_01-00_00.csv",sep=",",colClasses="numeric")
RAD24 <- as.numeric(as.vector(RAD24))
RAD24 <- RAD24[6:length(RAD24)]
png("map_15_1.png",height=900,width=900)
ncuts <- 20
cuts <- seq(min(RAD24,na.rm=TRUE),max(RAD24,na.rm=TRUE),length=ncuts)
print(spplot(mydata_15_1["R"],xlab="East [m]",ylab="North [m]",key.space="right",cuts=cuts,region=TRUE,col.regions=col.palette(ncuts),main="Rainfall [mm]",scales=list(draw=TRUE)))
dev.off()
RAD24 <- read.table("./radar_sent/radar_snap_2011_08_05-16_00.csv",sep=",",colClasses="numeric")
RAD24 <- as.numeric(as.vector(RAD24))
RAD24 <- RAD24[6:length(RAD24)]
png("map_15_2.png",height=900,width=900)
ncuts <- 20
cuts <- seq(min(RAD24,na.rm=TRUE),max(RAD24,na.rm=TRUE),length=ncuts)
print(spplot(mydata_15_2["R"],xlab="East [m]",ylab="North [m]",key.space="right",cuts=cuts,region=TRUE,col.regions=col.palette(ncuts),main="Rainfall [mm]",scales=list(draw=TRUE)))
dev.off()
RAD24 <- read.table("./radar_sent/radar_snap_3h_2011_08_05-15_00.csv",sep=",",colClasses="numeric")
RAD24 <- as.numeric(as.vector(RAD24))
RAD24 <- RAD24[6:length(RAD24)]
png("map_3h.png",height=900,width=900)
ncuts <- 20
cuts <- seq(min(RAD24,na.rm=TRUE),max(RAD24,na.rm=TRUE),length=ncuts)
print(spplot(mydata_3h["R"],xlab="East [m]",ylab="North [m]",key.space="right",cuts=cuts,region=TRUE,col.regions=col.palette(ncuts),main="Rainfall [mm]",scales=list(draw=TRUE)))
dev.off()
''')
Out[31]:
In [32]:
plt.plot(p_myiso_1['dist'], p_myiso_1['gamma'], '-o')
plt.plot(p_myiso_2['dist'], p_myiso_2['gamma'], '-o')
plt.legend(['08-01 00:00', '08-05 16:00'])
plt.figure()
plt.plot(p_myiso_3['dist'], p_myiso_3['gamma'], '-o')
plt.legend(['08-05 3h accum'])
Out[32]:
In [33]:
r('''
myiso_15_1_map <- variogram(R~1,mydata_15_1,width=2,cutoff=50,map=TRUE)
png("myvariogram_map_15_1.png",height=600,width=600)
print(plot(myiso_15_1_map))
dev.off()
myiso_15_2_map <- variogram(R~1,mydata_15_2,width=2,cutoff=50,map=TRUE)
png("myvariogram_map_15_2.png",height=600,width=600)
print(plot(myiso_15_2_map))
dev.off()
myiso_3h_map <- variogram(R~1,mydata_3h,width=2,cutoff=50,map=TRUE)
png("myvariogram_map_3h.png",height=600,width=600)
print(plot(myiso_3h_map))
dev.off()
''')
Out[33]:
In [34]:
rain_sorted_15_1 = rain_15_min_1.sort_values('R', ascending=False)
rain_sorted_15_1 = rain_sorted_15_1.iloc[0:1499]
rs_df_15_1 = pandas2ri.py2ri(rain_sorted_15_1)
r.assign('data_sorted_15_1', rs_df_15_1)
rain_sorted_15_2 = rain_15_min_2.sort_values('R', ascending=False)
rain_sorted_15_2 = rain_sorted_15_2.iloc[0:1499]
rs_df_15_2 = pandas2ri.py2ri(rain_sorted_15_2)
r.assign('data_sorted_15_2', rs_df_15_2)
rain_sorted_3h = rain_3h.sort_values('R', ascending=False)
rain_sorted_3h = rain_sorted_3h.iloc[0:1499]
rs_df_3h = pandas2ri.py2ri(rain_sorted_3h)
r.assign('data_sorted_3h', rs_df_3h)
r('''
data_sorted_15_1 <- data.frame(data_sorted_15_1)
coordinates(data_sorted_15_1) <- ~x+y
data_sorted_15_2 <- data.frame(data_sorted_15_2)
coordinates(data_sorted_15_2) <- ~x+y
data_sorted_3h <- data.frame(data_sorted_3h)
coordinates(data_sorted_3h) <- ~x+y
''')
Out[34]:
In [35]:
r('hat.anis <- estimateAnisotropy(data_sorted_15_1,"R")')
anis_15_1 = r('anis <- c(90-hat.anis$direction,1/hat.anis$ratio)')
print(anis_15_1)
r('hat.anis <- estimateAnisotropy(data_sorted_15_2,"R")')
anis_15_2 = r('anis <- c(90-hat.anis$direction,1/hat.anis$ratio)')
print(anis_15_2)
r('hat.anis <- estimateAnisotropy(data_sorted_3h,"R")')
anis_3h = r('anis <- c(90-hat.anis$direction,1/hat.anis$ratio)')
print(anis_3h)
In [36]:
dir_var_15_1 = r('directional_variograms_15_1 <- variogram(R~1,mydata_15_1,width=2,cutoff=100,alpha=c(83.6,173.6),tol.hor=5)')
dir_var_15_2 = r('directional_variograms_15_2 <- variogram(R~1,mydata_15_2,width=2,cutoff=100,alpha=c(119.45,209.45),tol.hor=5)')
dir_var_3h = r('directional_variograms_3h <- variogram(R~1,mydata_3h,width=2,cutoff=100,alpha=c(130.27,220.27),tol.hor=5)')
In [37]:
dir_var_15_1['dir.hor'] = np.around(dir_var_15_1['dir.hor'], decimals=2)
dir_15_1 = dir_var_15_1['dir.hor']==83.6
plt.figure()
plt.subplot(121)
plt.plot(dir_var_15_1.dist[dir_15_1], dir_var_15_1.gamma[dir_15_1], '-o')
plt.subplot(122)
plt.plot(dir_var_15_1.dist[~dir_15_1], dir_var_15_1.gamma[~dir_15_1], '-o')
dir_var_15_2['dir.hor'] = np.around(dir_var_15_2['dir.hor'], decimals=2)
dir_15_2 = dir_var_15_2['dir.hor']==119.45
plt.figure()
plt.subplot(121)
plt.plot(dir_var_15_2.dist[dir_15_2], dir_var_15_2.gamma[dir_15_2], '-o')
plt.subplot(122)
plt.plot(dir_var_15_2.dist[~dir_15_2], dir_var_15_2.gamma[~dir_15_2], '-o')
dir_var_3h['dir.hor'] = np.around(dir_var_3h['dir.hor'], decimals=2)
dir_3h = dir_var_3h['dir.hor']==130.27
plt.figure()
plt.subplot(121)
plt.plot(dir_var_3h.dist[dir_3h], dir_var_3h.gamma[dir_3h], '-o')
plt.subplot(122)
plt.plot(dir_var_3h.dist[~dir_3h], dir_var_3h.gamma[~dir_3h], '-o')
Out[37]:
In [38]:
r('''
initial_vario_sph_15_1 <- vgm(psill=30,model="Sph",range=60,nugget=0)
initial_vario_sph_15_2 <- vgm(psill=17,model="Sph",range=30,nugget=0)
initial_vario_sph_3h <- vgm(psill=500,model="Sph",range=40,nugget=0)
''')
fitted_vario_sph_15_1 = r('fitted_vario_sph_15_1 <- fit.variogram(myiso_15_1,initial_vario_sph_15_1)')
sph_15_1_sserr = r('SSErr_sph <- attributes(fitted_vario_sph_15_1)$SSErr')
fitted_vario_sph_15_2 = r('fitted_vario_sph_15_2 <- fit.variogram(myiso_15_2,initial_vario_sph_15_2)')
sph_15_2_sserr = r('SSErr_sph <- attributes(fitted_vario_sph_15_2)$SSErr')
fitted_vario_sph_3h = r('fitted_vario_sph_3h <- fit.variogram(myiso_3h,initial_vario_sph_3h)')
sph_3h_sserr = r('SSErr_sph <- attributes(fitted_vario_sph_3h)$SSErr')
r('''
png("fitted_isotropic_variogram_sph_15_1.png",height=600,width=900)
print(plot(myiso_15_1,fitted_vario_sph_15_1))
dev.off()
png("fitted_isotropic_variogram_sph_15_2.png",height=600,width=900)
print(plot(myiso_15_2,fitted_vario_sph_15_2))
dev.off()
png("fitted_isotropic_variogram_sph_3h.png",height=600,width=900)
print(plot(myiso_3h,fitted_vario_sph_3h))
dev.off()
''')
Out[38]:
In [39]:
print('15_1:')
print(fitted_vario_sph_15_1.range[2])
print(fitted_vario_sph_15_1.psill[1])
print(sum(fitted_vario_sph_15_1.psill))
print(sph_15_1_sserr)
print('----------')
print('15_2:')
print(fitted_vario_sph_15_2.range[2])
print(fitted_vario_sph_15_2.psill[1])
print(sum(fitted_vario_sph_15_2.psill))
print(sph_15_2_sserr)
print('----------')
print('3h:')
print(fitted_vario_sph_3h.range[2])
print(fitted_vario_sph_3h.psill[1])
print(sum(fitted_vario_sph_3h.psill))
print(sph_3h_sserr)
In [40]:
r('''
initial_vario_exp_15_1 <- vgm(psill=30,model="Exp",range=60/3,nugget=0)
initial_vario_exp_15_2 <- vgm(psill=17,model="Exp",range=30/3,nugget=0)
initial_vario_exp_3h <- vgm(psill=500,model="Exp",range=40/3,nugget=0)
''')
fitted_vario_exp_15_1 = r('fitted_vario_exp_15_1 <- fit.variogram(myiso_15_1,initial_vario_exp_15_1)')
exp_15_1_sserr = r('SSErr_exp <- attributes(fitted_vario_exp_15_1)$SSErr')
fitted_vario_exp_15_2 = r('fitted_vario_exp_15_2 <- fit.variogram(myiso_15_2,initial_vario_exp_15_2)')
exp_15_2_sserr = r('SSErr_exp <- attributes(fitted_vario_exp_15_2)$SSErr')
fitted_vario_exp_3h = r('fitted_vario_exp_3h <- fit.variogram(myiso_3h,initial_vario_exp_3h)')
exp_3h_sserr = r('SSErr_exp <- attributes(fitted_vario_exp_3h)$SSErr')
r('''
png("fitted_isotropic_variogram_exp_15_1.png",height=600,width=900)
print(plot(myiso_15_1,fitted_vario_exp_15_1))
dev.off()
png("fitted_isotropic_variogram_exp_15_2.png",height=600,width=900)
print(plot(myiso_15_2,fitted_vario_exp_15_2))
dev.off()
png("fitted_isotropic_variogram_exp_3h.png",height=600,width=900)
print(plot(myiso_3h,fitted_vario_exp_3h))
dev.off()
''')
Out[40]:
In [118]:
print('15_1:')
print(fitted_vario_exp_15_1.range[2])
print(fitted_vario_exp_15_1.psill[1])
print(sum(fitted_vario_exp_15_1.psill))
print(exp_15_1_sserr)
print('----------')
print('15_2:')
print(fitted_vario_exp_15_2.range[2])
print(fitted_vario_exp_15_2.psill[1])
print(sum(fitted_vario_exp_15_2.psill))
print(exp_15_2_sserr)
print('----------')
print('3h:')
print(fitted_vario_exp_3h.range[2])
print(fitted_vario_exp_3h.psill[1])
print(sum(fitted_vario_exp_3h.psill))
print(exp_3h_sserr)
In [41]:
coords_gauges = pd.read_csv('./gauge_xy.csv', header=None)
coords_gauges.columns = ['x', 'y']
coords_gauges.head()
Out[41]:
In [42]:
from scipy.spatial.distance import pdist
In [50]:
gauge_distances = pdist(coords_gauges)
gauge_hist = plt.hist(gauge_distances,bins=100)
plt.ylabel('N')
plt.xlabel('km')
Out[50]:
In [ ]: