diff --git a/processing/analyse.R b/processing/analyse.R index 851f63e9ee2a90be636850a5dc2ea9814d262ad4..5977ded39318d64477ed4fb5a3799142611132f6 100644 --- a/processing/analyse.R +++ b/processing/analyse.R @@ -1,5 +1,10 @@ # Usefull library library(dplyr) +library(zoo) +library(StatsAnalysisTrend) + +# Sourcing R file +source('processing/format.R') # Compute the time gap by station @@ -57,3 +62,139 @@ get_lacune = function (df_data, df_info) { return (df_lac) } + + +get_intercept = function (df_Xtrend, df_Xlist, unit2day=365.25) { + + intercept = c() + # Group = levels(factor()) + for (g in df_Xlist$info$group) { + df_data_code = df_Xlist$data[df_Xlist$data$group == g,] + + trend = df_Xtrend$trend[df_Xtrend$group == g] + mu_X = mean(df_data_code$Qm3s, na.rm=TRUE) + + mu_t = as.numeric(mean(df_data_code$Date, + na.rm=TRUE))/unit2day + + b = mu_X - mu_t * trend + + intercept = append(intercept, b) + } + return (intercept) +} + + +get_QAtrend = function (df_data, period) { + # AVERAGE ANNUAL FLOW : QA # + ### /!\ verify order conservation ### + df_QAlist = prepare(df_data, colnamegroup=c('code')) + + df_QAEx = extract.Var(data.station=df_QAlist, + funct=mean, + timestep='year', + period=period, + pos.datetime=1, + na.rm=TRUE) + + df_QAtrend = Estimate.stats(data.extract=df_QAEx) + + res_QAtrend = clean(df_QAtrend, df_QAEx, df_QAlist) + + return (res_QAtrend) +} + +get_QMNAtrend = function (df_data, period) { + # MONTHLY MINIMUM FLOW IN THE YEAR : QMNA # + df_QMNAlist = prepare(df_data, colnamegroup=c('code')) + + ### /!\ PLUS RAPIDE ### + # fMNA = function (X) { + # # prendre un paquet de 1 ans et faire la moyenne par mois et retourner le minimum des debit + # dpm = length(X)/12 + # # print(dpm) + # # print(length(X)) + # monthmean = c() + # for (i in 1:12) { + # id = round(dpm*(i-1)+1, 0) + # iu = round(i*dpm, 0) + # monthmean = append(monthmean, mean(X[id:iu], na.rm=TRUE)) + # # print(paste('start', id)) + # # print(paste('end', iu)) + # # print('') + # } + # # print(monthmean) + # return (min(monthmean, na.rm=TRUE)) + # } + # df_QMNAEx = extract.Var(data.station=df_QMNAlist, + # funct=fMNA, + # period=period, + # pos.datetime=1)#, + # na.rm=TRUE) ### /!\ PAS COMPRIS ### + + df_QMNAEx = extract.Var(data.station=df_QMNAlist, + funct=mean, + period=period, + timestep='month', + pos.datetime=1, + na.rm=TRUE) + + ### /!\ NOM DE COLONNE PAS CONSERVER ### + df_QMNAlist = reprepare(df_QMNAEx, df_QMNAlist, colnamegroup=c('code')) + + df_QMNAEx = extract.Var(data.station=df_QMNAlist, + funct=min, + period=period, + timestep='year', + pos.datetime=1, + na.rm=TRUE) + + df_QMNAtrend = Estimate.stats(data.extract=df_QMNAEx) + + res_QMNAtrend = clean(df_QMNAtrend, df_QMNAEx, df_QMNAlist) + + return (res_QAtrend) +} + + +get_VCN10trend = function (df_data, df_info, period) { + # MINIMUM 10 DAY AVERAGE FLOW OVER THE YEAR : VCN10 # + + # Get all different stations code + Code = levels(factor(df_info$code)) + + df_data_roll = tibble() + + for (c in Code) { + df_data_code = df_data[df_data$code == c,] + + df_data_code = tibble(Date=rollmean(df_data_code$Date, + 10, + fill=NA), + Qm3s=rollmean(df_data_code$Qm3s, + 10, + fill=NA), + code=c) + + df_data_roll = bind_rows(df_data_roll, df_data_code) + + } + + df_VCN10list = prepare(df_data_roll, colnamegroup=c('code')) + + df_VCN10Ex = extract.Var(data.station=df_VCN10list, + funct=min, + period=period, + timestep='year', + pos.datetime=1, + na.rm=TRUE) + + df_VCN10trend = Estimate.stats(data.extract=df_VCN10Ex) + + res_VCN10trend = clean(df_VCN10trend, df_VCN10Ex, df_VCN10list) + + return (res_VCN10trend) +} + + + diff --git a/processing/format.R b/processing/format.R index e050c26dc2634676d6e09b50b4b5b58cbea828cb..28f9c7ee1559188d301f60da7292aab255012e40 100644 --- a/processing/format.R +++ b/processing/format.R @@ -50,41 +50,49 @@ prepare = function(df_data, colnamegroup=NULL) { } -reprepare = function(df_dataEx, df_list, colnamegroup=NULL) { +reprepare = function(df_XEx, df_Xlist, colnamegroup=NULL) { - colnames(df_dataEx) = c('Date', 'group', 'Qm3s') + colnames(df_XEx) = c('Date', 'group', 'Qm3s') - df_dataEx$Date = as.character(df_dataEx$Date) - exDate = df_dataEx$Date[1] + df_XEx$Date = as.character(df_XEx$Date) + exDate = df_XEx$Date[1] nbt = lengths(regmatches(exDate, gregexpr('-', exDate))) if (nbt == 1) { - df_dataEx$Date = paste(df_dataEx$Date, '01', sep='-') + df_XEx$Date = paste(df_XEx$Date, '01', sep='-') } else if (nbt == 0) { - df_dataEx$Date = paste(df_dataEx$Date, '01', '01', sep='-') + df_XEx$Date = paste(df_XEx$Date, '01', '01', sep='-') } else if (nbt != 2) { stop('erreur of date format') } - df_dataEx = bind_cols(Date=as.Date(df_dataEx$Date, + df_XEx = bind_cols(Date=as.Date(df_XEx$Date, format="%Y-%m-%d"), - df_dataEx[-1], - df_list$info[df_dataEx$group, - 2:ncol(df_list$info)]) + df_XEx[-1], + df_Xlist$info[df_XEx$group, + 2:ncol(df_Xlist$info)]) - df_listEx = prepare(df_dataEx, colnamegroup=colnamegroup) - return (df_listEx) + df_XlistEx = prepare(df_XEx, colnamegroup=colnamegroup) + return (df_XlistEx) } +clean = function (df_Xtrend, df_XEx, df_Xlist) { -clean = function (df_xTrend, df_list) { + # print(str(df_XEx)) - df_xTrend = bind_cols(df_xTrend, - df_list$info[df_xTrend$group1, - 2:ncol(df_list$info)]) + df_Xlist = reprepare(df_XEx, df_Xlist, colnamegroup=c('code')) - colnames(df_xTrend)[1] = 'group' + df_Xtrend = bind_cols(df_Xtrend, + df_Xlist$info[df_Xtrend$group1, + 2:ncol(df_Xlist$info)]) - return (df_xTrend) + colnames(df_Xtrend)[1] = 'group' + + intercept = get_intercept(df_Xtrend, df_Xlist, unit2day=365.25) + + df_Xtrend$intercept = intercept + df_Xtrend = relocate(df_Xtrend, intercept, .after=trend) + + return (list(trend=df_Xtrend, data=df_Xlist$data, info=df_Xlist$info)) } diff --git a/script.R b/script.R index 723373c222cb142eaf7f7d4185ad9e20cd986ea0..1ff1e56a7e90409833f7f1f4286ef0d267b26ea0 100644 --- a/script.R +++ b/script.R @@ -79,8 +79,7 @@ source('processing/analyse.R') source('plotting/panel.R') # Usefull library -library(StatsAnalysisTrend) -library(dplyr) + # Result directory resdir = file.path(computer_work_path, 'results') @@ -150,63 +149,11 @@ df_info = df_join$info # df_lac = get_lacune(df_data, df_info) -# AVERAGE ANNUAL FLOW : QA # -### /!\ verify order conservation ### -df_QAlist = prepare(df_data, colnamegroup=c('code')) - -df_QAEx = extract.Var(data.station=df_QAlist, - funct=mean, - timestep='year', - period=period, - pos.datetime=1, - na.rm=TRUE) -df_QATrend = Estimate.stats(data.extract=df_QAEx) -df_QATrend = clean(df_QATrend, df_QAlist) - - -# MONTHLY MINIMUM FLOW IN THE YEAR : QMNA # -df_QMNAlist = prepare(df_data, colnamegroup=c('code')) - -### /!\ PLUS RAPIDE ### -# fMNA = function (X) { -# # prendre un paquet de 1 ans et faire la moyenne par mois et retourner le minimum des debit -# dpm = length(X)/12 -# # print(dpm) -# # print(length(X)) -# monthmean = c() -# for (i in 1:12) { -# id = round(dpm*(i-1)+1, 0) -# iu = round(i*dpm, 0) -# monthmean = append(monthmean, mean(X[id:iu], na.rm=TRUE)) -# # print(paste('start', id)) -# # print(paste('end', iu)) -# # print('') -# } -# # print(monthmean) -# return (min(monthmean, na.rm=TRUE)) -# } -# df_QMNAEx = extract.Var(data.station=df_QMNAlist, -# funct=fMNA, -# period=period, -# pos.datetime=1)#, - # na.rm=TRUE) ### /!\ PAS COMPRIS ### - -df_QMNAEx = extract.Var(data.station=df_QMNAlist, - funct=mean, - period=period, - timestep='month', - pos.datetime=1, - na.rm=TRUE) - -### /!\ NOM DE COLONNE PAS CONSERVER ### -df_QMNAlist = reprepare(df_QMNAEx, df_QMNAlist, colnamegroup=c('code')) - -df_QMNAEx = extract.Var(data.station=df_QMNAlist, - funct=min, - period=period, - timestep='year', - pos.datetime=1, - na.rm=TRUE) - -df_QMNATrend = Estimate.stats(data.extract=df_QMNAEx) -df_QMNATrend = clean(df_QMNATrend, df_QMNAlist) +# QA TREND # +res_QAtrend = get_QAtrend(df_data, period) + +# QMNA TREND # +# res_QMNAtrend = get_QMNAtrend(df_data, period) + +# VCN10 TREND # +# res_VCN10trend = get_VCN10trend(df_data, df_info, period) diff --git a/script_install.R b/script_install.R index dbd980c206766c55074d27713b605eca3a8fbdc0..b1383666477110d139b05c656a23e944bf9071fd 100644 --- a/script_install.R +++ b/script_install.R @@ -6,6 +6,7 @@ install.packages("dplyr") install.packages("ggplot2") install.packages("officer") install.packages("lubridate") +install.packages('zoo') library(devtools) install_github("https://github.com/benRenard/BFunk") #type '1'