Ecco un piccolo esempio dei rapporti che si possono fare in R.

Questo documento ha due parti:
- Una piccola sula manipolazione degli dati
- E altra con gli idee per il report.

In questo caso, ho messo l’informazione de due files de dati per i rilievi fati in Aprile e Maggio nel stesso campo.

Questa parcella a 170 plots, per cui e un bello test di difficoltà (da solito sono meno).

Il codice e dovunque ma occulto, si poi vedere cliccando il bottone a sinistra. Si non sei interessato nel codice poi saltare diretammente a la parte che si chiama Il Report

La manipulazione degli dati

Vado usare un csv che ho fatto con i datti de aprile e maggio, ma simulando il formato che vi propongo, dove tutti i traits sono nel stesso file.

library(ggplot2)
library(dplyr)
library(plyr)
library(tidyr)
library(plotly)
library(reshape2)
library(knitr)
library(forcats)
library(DT)

setwd("C:/Users/Usuario1/Dropbox/RSR/Fieldbook & Database/R Reports")
mydata <- read.csv("mydata.csv", check.names = F, na.strings=c("","NA"))

Adesso che la data e in questo formato, il quale aspettiamo avere sul Field Book e sul database, si trasforma la data in una cosa più facile de usare.

Questo si fa facendo un “melt” della data, dove abbiamo solo lo collone indicative della parcella ( Plot Id, RSR Code, etc), una colonna per indicare la variabile e un altra per indicare il valore.

n = length(mydata) #Quantità totale de variabili

mydatamelt<- melt(mydata,
                  id.vars= c(1:5),  #In questo caso ho 5 variabile d'identificazione
                  measure.vars= c(6:n), # Tutti quelli dopo sono "traits".
                  na.rm = F) #Guardo i missing data per vedere dove sono.

Poi, separo, la colonna delle variabile in due. Una sara il momento de la valutazione e l’altra sara propriamente la variabile.

data <- separate(mydatamelt,
              variable,
              into = c("temp", "var"),
              sep = " - ")
data$temp <- revalue(data$temp, c("Acc" = "Accestamento",
                                  "Lev"=  "Levata",
                                  "Spi"=  "Spigatura",
                                  "Fio"= "Fioritura",
                                  "Rac"= "Raccolta",
                                  "PostR"= "PostRaccolta"))
data$temp <- fct_relevel(data$temp, c("Accestamento","Levata","Spigatura",
                                      "Fioritura","Raccolta", "PostRaccolta")) 

Finiamo con una struttura de dati cosi, il numero dentro della tabella sono i potenziali osservazioni (170 e il numero di plots).

#Creare la tavola
df <- table(data$var, data$temp)

#Ordinare gli elementi
df <- df[,c("Accestamento","Levata","Spigatura",
                                      "Fioritura","Raccolta", "PostRaccolta")]

kable(df)
Accestamento Levata Spigatura Fioritura Raccolta PostRaccolta
Allettamento 0 0 170 170 170 0
Allettamento.Causa 0 0 170 170 170 0
Campione di piante 0 0 0 0 0 170
Campione di spighe 0 0 0 0 0 170
Colore.Altro 0 170 170 0 0 0
Colore.Piante 170 170 170 170 0 0
Copertura.Parcella 170 170 170 170 0 0
Danni 170 170 170 170 170 0
Danni.Foto 170 170 170 170 170 0
Infestanti.Numero 170 170 170 170 0 0
Infestanti.Tipo 170 170 170 170 0 0
location.GPS 170 170 170 170 0 0
Malattie 0 0 170 170 170 0
Malattie.Foto 0 0 170 170 170 0
Malattie.Notes 0 0 170 170 170 0
Maturita Spighe 0 0 0 170 0 0
Modalita di Rac 0 0 0 0 0 170
Nome.Campionatore 170 170 170 170 0 0
Nuovo store code 0 0 0 0 0 170
Osservazioni 170 170 170 170 170 170
Osservazioni.Foto 170 170 170 170 170 170
P1_Alt 1 rachide 0 0 0 170 0 0
P1_Alt 2 spiga 0 0 0 170 0 0
P1_Alt 3 reste 0 0 0 170 0 0
P10_Alt 1 rachide 0 0 0 170 0 0
P10_Alt 2 spiga 0 0 0 170 0 0
P10_Alt 3 reste 0 0 0 170 0 0
P2_Alt 1 rachide 0 0 0 170 0 0
P2_Alt 2 spiga 0 0 0 170 0 0
P2_Alt 3 reste 0 0 0 170 0 0
P3_Alt 1 rachide 0 0 0 170 0 0
P3_Alt 2 spiga 0 0 0 170 0 0
P3_Alt 3 reste 0 0 0 170 0 0
P4_Alt 1 rachide 0 0 0 170 0 0
P4_Alt 2 spiga 0 0 0 170 0 0
P4_Alt 3 reste 0 0 0 170 0 0
P5_Alt 1 rachide 0 0 0 170 0 0
P5_Alt 2 spiga 0 0 0 170 0 0
P5_Alt 3 reste 0 0 0 170 0 0
P6_Alt 1 rachide 0 0 0 170 0 0
P6_Alt 2 spiga 0 0 0 170 0 0
P6_Alt 3 reste 0 0 0 170 0 0
P7_Alt 1 rachide 0 0 0 170 0 0
P7_Alt 2 spiga 0 0 0 170 0 0
P7_Alt 3 reste 0 0 0 170 0 0
P8_Alt 1 rachide 0 0 0 170 0 0
P8_Alt 2 spiga 0 0 0 170 0 0
P8_Alt 3 reste 0 0 0 170 0 0
P9_Alt 1 rachide 0 0 0 170 0 0
P9_Alt 2 spiga 0 0 0 170 0 0
P9_Alt 3 reste 0 0 0 170 0 0
Parcella 170 170 170 170 170 0
Parcella.Foto 0 170 170 170 0 0
Parcella.Numero.Piante 170 170 170 170 170 0
Presenza di cere 0 0 0 170 0 0
Presenza reste 0 0 0 170 0 0
Quantita Rac 0 0 0 0 0 170
RGV/FAO 0 0 0 170 0 0
RGV/FAO.Foto 0 0 0 170 0 0

Il Report

Ecco come si potrebbe vedere il report fato automaticamente con R con i dati caricati.

La mia idea e che questi report si possono fare automaticamente una volta caricati i dati. Lo potresti vedere da subito in campo nel telefono oppure nel Tablet o computer.

Possiamo pensare che questo report ha stato generato giusto dopo il secondo rilievo (maggio) o solo ci mostra i dati de aprile e maggio ( anche ci sono tutti gli altri collone ma vuote)

Controllo dati mancanti!

Prima cosa, serve vedere quanti dati mancanti ci sono.

Si fa un tabellone con la summa de dati mancanti. che sia interattiva e ti lasci vedere cosa manca.

Ci sono variabile dove e normale avere dati mancanti (come gli osservazioni) ma in altre non va bene (Come la presenzia/assenza de la parcella)

In questo caso, si hai appena fato il rilievo in spigatura, poi filtrare nella collona Rilievo con solo quelle da “Spigatura”. Si puo vedere che ci mancano alcuni dati, especialmente importanti quelli de “Parcella”.

mytable <- aggregate(value ~ var*temp,
                    data=data, 
                    function(x) {sum(is.na(x))}, na.action = NULL)
#Order properly         
mytable <- mytable[order(mytable$value, mytable$temp),]

#Change names
colnames(mytable) <- c("Variabile","Rilievo","Dati Mancanti") 

datatable(mytable,
          caption= "Variabili con dati mancanti",
          filter = 'top', options = list(pageLenght= 20,
                                         autoWidth = TRUE))

Prezencia della parcella

La variabile parcella e da solito la prima che si fa in campo, e ci dice se ci sono le piante oppure no. Se ci sono missing data per questa variabile siamo nei guai.

data2plot_parcella <- subset(data, data$var == "Parcella")

kable(table(data2plot_parcella$value, data2plot_parcella$temp, useNA="ifany"), caption= "Presenzia delle Parcelle nei Rilievi")
Presenzia delle Parcelle nei Rilievi
Accestamento Levata Spigatura Fioritura Raccolta PostRaccolta
1_Tutta 0 59 59 0 0 0
2_Metà 0 24 25 0 0 0
3_Piante 0 45 39 0 0 0
4_Assente 0 40 44 0 0 0
NA 170 2 3 170 170 0

Si vede che in questo rilevo sono 44 parcelle che non ci sono, e 3 dove non c’e neanche il dato. Posso capire meglio quale sono con un grafico cosi. Poi andare su e vedere i valori, anche cliccare nella leggenda per selezionare i valori NA (mancanti).

parcella <- ggplot(data2plot_parcella,
                  aes(y= plot_id, x= temp, fill= value))+
            geom_tile()+
            labs(y= "Plot ID",x= "Momento di Rilievo", 
                 fill= "Presenza Parcella", main= "Presenzia delle parcelle nei disticti relievi")

ggplotly(parcella)
AccestamentoLevataSpigaturaFiorituraRaccoltaEPG01EPG02EPG03EPG04EPG05EPG06EPG07EPG08MA01MA02MA03MA04MA05MA06MA07MA08MA09MA10MA11MA12MA13MA14MA15MA16MA17MA18MD01MD02MD03MD04MD05MD06MD07MD08MD09MD10MD11MD12MD13MD14MD15MD16MD17MD18MD19MD20MD21MD22MD23MD24MD25MD26MD27MD28MD29MD30MD31MD32MD33MD34MD35MD36MD37MD38MD39MD40MD41MD42MD43MD44MD45MD46MD47MD48MD49MD50MD51MD52MD53MD54MD55MD56MD57MD58MD59MD60MD61MD62MD63MD64MD65MD66MD67MD68MD69MD70MD71MD72MP40MT01MT02MT03MT04MT05MT06MT07MT08MT09MT10MT11MT12MT13MT14MT15MT16MT17MT18MT19MT20MT21MT22MT23MT24MT25MT26MT27MT28MT29MT30MT31MT32MT33MT34MT35MT36MT37MT38MT39MT40MT41MT42MT43MT44MT45MT46MT47MT48MT49MT50MT51MT52MT53MT54MT55MT56MT57MT58MT59MT60MT61MT62MT63MT64MT65MT66MT67MT68MT69MT70
1_Tutta2_Metà3_Piante4_AssenteNAMomento di RilievoPlot IDPresenza Parcella

Numero de Infestanti

Per i variabili numerici, como il numero de infestanti, sarebbe utile una visualizzazione che ci permetta vedere si c’è un dato tropo alto o troppo basso. In questo caso (Numero de Infestanti) non essiste troppo basso, ma con la altezza si potrebbe vedere.

data2plot_infestanti<- subset(data, data$var == "Infestanti.Numero")
data2plot_infestanti$value <- as.numeric(data2plot_infestanti$value)
data2plot_infestanti$temp <- as.factor(data2plot_infestanti$temp)

infestanti<- ggplot(data2plot_infestanti,
               aes(y= value, x=temp, color=plot_id))+
                       geom_point()+
            labs(y= "Numero de Infestanti / m²",x= "Momento di Rilievo",
                 color = "Plot ID")

ggplotly(infestanti)
AccestamentoLevataSpigaturaFioritura050100150
EPG01EPG02EPG03EPG04EPG05EPG06EPG07EPG08MA01MA02MA03MA04MA05MA06MA07MA08MA09MA10MA11MA12MA13MA14MA15MA16MA17MA18MD01MD02MD03MD04MD05MD06MD07MD08MD09MD10MD11MD12MD13MD14MD15MD16MD17MD18MD19MD20MD21MD22MD23MD24MD25MD26MD27MD28MD29MD30MD31MD32MD33MD34MD35MD36MD37MD38MD39MD40MD41MD42MD43MD44MD45MD46MD47MD48MD49MD50MD51MD52MD53MD54MD55MD56MD57MD58MD59MD60MD61MD62MD63MD64MD65MD66MD67MD68MD69MD70MD71MD72MP40MT01MT02MT03MT04MT05MT06MT07MT08MT09MT10MT11MT12MT13MT14MT15MT16MT17MT18MT19MT20MT21MT22MT23MT24MT25MT26MT27MT28MT29MT30MT31MT32MT33MT34MT35MT36MT37MT38MT39MT40MT41MT42MT43MT44MT45MT46MT47MT48MT49MT50MT51MT52MT53MT54MT55MT56MT57MT58MT59MT60MT61MT62MT63MT64MT65MT66MT67MT68MT69MT70Momento di RilievoNumero de Infestanti / m²Plot ID

Questo e tutto per addesso, se vi piace e vi serve andiamo oltre.