---
title: "Bench_Prosani"
output: html_notebook
---




```{r,echo=FALSE,message=F}
### BENCH PROSANI ###
library(tidyverse)
library(plotly)
Prosani<-read.csv("Prosani.csv")
   
   
   #Function to group#
    grouper<-function(x,y,z){
    which(x>y & x<=(y+y/5))->a
    x[a]<-y
    which(x>(y+y/5))->a
    x[a]<-3*y/4
    which(x<0)->b
    x[b]<-0
    x[is.na(x)]<-0
    ifelse(z==1,
     x<-cut(c(0,x),breaks=9,labels=seq(0,4,by=.5)),
     x<-cut(c(0,x),breaks=9,labels=seq(4,0,by=-.5)))
    x<-as.numeric(as.character(x))
    x[2:length(x)]
    }
    
    
   
   ## Now Scoring!
   ## 100
   a<-2:ncol(Prosani)
   Prosani[,a]<-apply(Prosani[,a],2,grouper,y=100,z=1)
   
   ## TOTLIGNE
   (rowSums(Prosani[,2:ncol(Prosani)]))*100/
     (4*ncol(Prosani[,2:ncol(Prosani)]))->Prosani$totligne
   Prosani$totligne<-round(Prosani$totligne,0)
   
   ## Choose one Health district
   
   
   ## CLASS and order 
   

   ## COLUMN SUM
  
   
   ## Radar now!
   
   noms<-names(Prosani)[2:(ncol(Prosani)-1)]
   noms<-c(noms,noms[1])
   # Function to select an as
   as<-function(x){
     x<-subset(Prosani,zs==x)
     x$totligne<-NULL
     x<-as.numeric(x[,2:ncol(x)])
     x<-c(x,x[1])
     assign("Fosa",x,envir=.GlobalEnv)
   }
   
   #Moyenne ZS
   
     ens<-Prosani[1,2:(ncol(Prosani)-1)]
     ens<-as.numeric(ens)
     ens<-c(ens,ens[1])
   
   ##Radar
   
   
   fig<-plot_ly(type="scatterpolar",
                mode="markers",fill="toself")
   
   fig<-fig%>% add_trace(r=ens,theta=noms,name="IHP")
   
   addrad<-function(x){
     fig<-fig%>%add_trace(r=Fosa,theta=noms,name=x)
     fig<-fig%>%layout(polar=list(radialaxis=
                                    list(visible=T,range=seq(0,5,by=.5))))
     assign("fig2",fig,envir=.GlobalEnv)
   }
   #Plot radar
   
```
# CLASSEMENT DES ZS

```{r,echo=F}
order(Prosani[,ncol(Prosani)],decreasing=T)->a
b<-Prosani[a,]
b$zs<-factor(b$zs,levels=b[["zs"]])
   
p1<-plot_ly(b,x=~zs,y=~totligne,type="bar",
               text=~totligne,textposition="auto",
               marker=list(color="lightblue",line=list(color="red")))
p1<-p1%>%layout(yaxis=list(title="% Benchmark"))
p1
```




# Sud-Kivu

```{r,echo=FALSE}
as("Sud-Kivu")
addrad("Sud-Kivu")
fig2
```

# IHP

```{r,echo=FALSE}
as("Outcome")
addrad("Ooutcome")
fig2
```


# Kasai Central

```{r,echo=FALSE}
as("Kasai-Central")
addrad("Kasai-Central")
fig2
```

# Kasai-Oriental

```{r,echo=FALSE}
as("Kasai-Oriental")
addrad("Kasai-Oriental")
fig2
```

# Haut Lomami

```{r,echo=FALSE}
as("Haut-Lomami")
addrad("Haut-Lomami")
fig2
```

# Lualaba

```{r,echo=FALSE}
as("Lualaba")
addrad("Lualaba")
fig2
```

# Haut Katanga

```{r,echo=FALSE}
as("Haut-Katanga")
addrad("Haut-Katanga")
fig2
```

# Tanganyika

```{r,echo=FALSE}
as("Tanganyka")
addrad("Tanganyka")
fig2
```