Condividi tramite


Eseguire il componente Script R

Questo articolo descrive come usare il componente Esegui script R per eseguire il codice R nella pipeline di progettazione di Azure Machine Learning.

Con R, è possibile eseguire attività che non sono supportate dai componenti esistenti, ad esempio:

  • Creare trasformazioni dati personalizzate
  • Usare le proprie metriche per valutare le stime
  • Creare modelli che usano algoritmi non implementati come componenti autonomi nella finestra di progettazione

Supporto della versione R

Progettazione di Azure Machine Learning usa la distribuzione CRAN (Complete R Archive Network) di R. La versione attualmente usata è CRAN 3.5.1.

Pacchetti R supportati

L'ambiente R è preinstallato con più di 100 pacchetti. Per un elenco completo, vedere la sezione Pacchetti R preinstallati.

È anche possibile aggiungere il codice seguente a qualsiasi componente Esegui script R per visualizzare i pacchetti installati.

azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  dataframe1 <- data.frame(installed.packages())
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Nota

Se la pipeline contiene più componenti Execute R Script che necessitano di pacchetti che non sono presenti nell'elenco preinstallato, installare i pacchetti in ogni componente.

Installazione di pacchetti R

Per installare pacchetti R aggiuntivi, usare il install.packages() metodo . I pacchetti vengono installati per ogni componente Esegui script R. Non sono condivisi tra altri componenti Esegui script R.

Nota

Non è consigliabile installare il pacchetto R dal bundle di script. È consigliabile installare i pacchetti direttamente nell'editor di script. Specificare il repository CRAN quando si installano pacchetti, ad esempio install.packages("zoo",repos = "https://cloud.r-project.org").

Avviso

Il componente R Script excute non supporta l'installazione di pacchetti che richiedono la compilazione nativa, ad esempio qdap il pacchetto che richiede JAVA e drc pacchetto che richiede C++. Questo perché questo componente viene eseguito in un ambiente preinstallato con autorizzazione non amministratore. Non installare i pacchetti predefiniti/per Windows, poiché i componenti della finestra di progettazione sono in esecuzione in Ubuntu. Per verificare se un pacchetto è predefinito nelle finestre, è possibile passare a CRAN e cercare il pacchetto, scaricare un file binario in base al sistema operativo e selezionare Built: part nel file DESCRIPTION . Di seguito è riportato un esempio: Descrizione del pacchetto R

Questo esempio illustra come installare Zoo:

# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
#   Param<dataframe1>: a R DataFrame
#   Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  
  if(!require(zoo)) install.packages("zoo",repos = "https://cloud.r-project.org")
  library(zoo)
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Nota

Prima di installare un pacchetto, verificare se esiste già in modo da non ripetere un'installazione. Le installazioni ripetute potrebbero causare il timeout delle richieste del servizio Web.

Accesso al set di dati registrato

È possibile fare riferimento al codice di esempio seguente per accedere ai set di dati registrati nell'area di lavoro:

azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  run = get_current_run()
  ws = run$experiment$workspace
  dataset = azureml$core$dataset$Dataset$get_by_name(ws, "YOUR DATASET NAME")
  dataframe2 <- dataset$to_pandas_dataframe()
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Come configurare Esegui script R

Il componente Execute R Script contiene codice di esempio come punto di partenza.

Diagramma degli input per un componente R

I set di dati archiviati nella finestra di progettazione vengono convertiti automaticamente in un frame di dati R quando caricato con questo componente.

  1. Aggiungere il componente Esegui script R alla pipeline.

  2. Connettere tutti gli input necessari allo script. Gli input sono facoltativi e possono includere dati e codice R aggiuntivo.

    • Set di dati1: fare riferimento al primo input come dataframe1. Il set di dati di input deve essere formattato come file CSV, TSV o ARFF. In alternativa, è possibile connettere un set di dati di Azure Machine Learning.

    • Set di dati2: fare riferimento al secondo input come dataframe2. Questo set di dati deve essere formattato anche come file CSV, TSV o ARFF o come set di dati di Azure Machine Learning.

    • Bundle script: il terzo input accetta file .zip. Un file compresso può contenere più file e più tipi di file.

  3. Nella casella di testo script R digitare o incollare uno script R valido.

    Nota

    Prestare attenzione durante la scrittura dello script. Assicurarsi che non siano presenti errori di sintassi, ad esempio l'uso di variabili non dichiarate o componenti o funzioni non importate. Prestare attenzione all'elenco dei pacchetti preinstallati alla fine di questo articolo. Per usare i pacchetti non elencati, installarli nello script. Un esempio è install.packages("zoo",repos = "https://cloud.r-project.org").

    Per iniziare, la casella di testo R Script è prepopolata con codice di esempio, che è possibile modificare o sostituire.

    # R version: 3.5.1
    # The script MUST contain a function named azureml_main,
    # which is the entry point for this component.
    
    # Note that functions dependent on the X11 library,
    # such as "View," are not supported because the X11 library
    # is not preinstalled.
    
    # The entry point function MUST have two input arguments.
    # If the input port is not connected, the corresponding
    # dataframe argument will be null.
    #   Param<dataframe1>: a R DataFrame
    #   Param<dataframe2>: a R DataFrame
    azureml_main <- function(dataframe1, dataframe2){
    print("R script run.")
    
    # If a .zip file is connected to the third input port, it's
    # unzipped under "./Script Bundle". This directory is added
    # to sys.path.
    
    # Return datasets as a Named List
    return(list(dataset1=dataframe1, dataset2=dataframe2))
    }
    

    La funzione del punto di ingresso deve avere gli argomenti Param<dataframe1> di input e Param<dataframe2>, anche quando questi argomenti non vengono usati nella funzione.

    Nota

    I dati passati al componente Esegui script R vengono a cui viene fatto riferimento e dataframe1dataframe2, diverso da Azure Machine Learning Designer (riferimento alla finestra di progettazione come dataset1, dataset2). Assicurarsi che i dati di input siano a cui si fa riferimento correttamente nello script.

    Nota

    Il codice R esistente potrebbe richiedere modifiche secondarie da eseguire in una pipeline di progettazione. Ad esempio, i dati di input forniti in formato CSV devono essere convertiti in modo esplicito in un set di dati prima di poterli usare nel codice. I tipi di dati e colonne usati nel linguaggio R differiscono anche in alcuni modi dai tipi di dati e colonne usati nella finestra di progettazione.

  4. Se lo script è maggiore di 16 KB, usare la porta bundle di script per evitare errori come CommandLine supera il limite di 16597 caratteri.

    1. Raggruppare lo script e altre risorse personalizzate in un file zip.
    2. Caricare il file zip come set di dati file nello studio.
    3. Trascinare il componente del set di dati dall'elenco Set di dati nel riquadro del componente sinistro nella pagina di creazione della finestra di progettazione.
    4. Connettere il componente del set di dati alla porta bundle script del componente Esegui script R .

    Di seguito è riportato il codice di esempio per usare lo script nel bundle di script:

    azureml_main <- function(dataframe1, dataframe2){
    # Source the custom R script: my_script.R
    source("./Script Bundle/my_script.R")
    
    # Use the function that defined in my_script.R
    dataframe1 <- my_func(dataframe1)
    
    sample <- readLines("./Script Bundle/my_sample.txt")
    return (list(dataset1=dataframe1, dataset2=data.frame("Sample"=sample)))
    }
    
  5. Per Inizializzazione casuale immettere un valore da usare all'interno dell'ambiente R come valore di inizializzazione casuale. Questo parametro è equivalente alla chiamata di set.seed(value) nel codice R.

  6. Inviare la pipeline.

Risultati

Eseguire i componenti di script R può restituire più output, ma devono essere forniti come frame di dati R. La finestra di progettazione converte automaticamente i frame di dati in set di dati per la compatibilità con altri componenti.

I messaggi e gli errori standard da R vengono restituiti al log del componente.

Se è necessario stampare i risultati nello script R, è possibile trovare i risultati stampati in 70_driver_log nella scheda Outputs+logs nel pannello destro del componente.

Script di esempio

Esistono molti modi per estendere la pipeline usando script R personalizzati. Questa sezione fornisce codice di esempio per le attività comuni.

Aggiungere uno script R come input

Il componente Execute R Script supporta i file di script R arbitrari come input. Per usarli, è necessario caricarli nell'area di lavoro come parte del file di .zip.

  1. Per caricare un file .zip contenente codice R nell'area di lavoro, passare alla pagina Asset Set di dati . Selezionare Crea set di dati e quindi selezionare Dal file locale e l'opzione Tipo di set di dati File .

  2. Verificare che il file compresso venga visualizzato in Set di dati personali nella categoria Set di dati nell'albero dei componenti sinistro.

  3. Connettere il set di dati alla porta di input del bundle di script .

  4. Tutti i file del file .zip sono disponibili durante l'esecuzione della pipeline.

    Se il file di bundle di script contiene una struttura di directory, la struttura viene mantenuta. È tuttavia necessario modificare il codice per prependare la directory ./Script Bundle nel percorso.

Elaborazione dei dati

L'esempio seguente illustra come ridimensionare e normalizzare i dati di input:

# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
#   Param<dataframe1>: a R DataFrame
#   Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  # If a .zip file is connected to the third input port, it's
  # unzipped under "./Script Bundle". This directory is added
  # to sys.path.
  series <- dataframe1$width
  # Find the maximum and minimum values of the width column in dataframe1
  max_v <- max(series)
  min_v <- min(series)
  # Calculate the scale and bias
  scale <- max_v - min_v
  bias <- min_v / dis
  # Apply min-max normalizing
  dataframe1$width <- dataframe1$width / scale - bias
  dataframe2$width <- dataframe2$width / scale - bias
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Leggere un file .zip come input

Questo esempio illustra come usare un set di dati in un file .zip come input per il componente Esegui script R.

  1. Creare il file di dati in formato CSV e denominarlo mydatafile.csv.
  2. Creare un file .zip e aggiungere il file CSV all'archivio.
  3. Caricare il file compresso nell'area di lavoro di Azure Machine Learning.
  4. Connettere il set di dati risultante all'input ScriptBundle del componente Esegui script R .
  5. Usare il codice seguente per leggere i dati CSV dal file compresso.
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  mydataset<-read.csv("./Script Bundle/mydatafile.csv",encoding="UTF-8");  
  # Return datasets as a Named List
  return(list(dataset1=mydataset, dataset2=dataframe2))
}

Replicare le righe

Questo esempio illustra come replicare record positivi in un set di dati per bilanciare l'esempio:

azureml_main <- function(dataframe1, dataframe2){
  data.set <- dataframe1[dataframe1[,1]==-1,]  
  # positions of the positive samples
  pos <- dataframe1[dataframe1[,1]==1,]
  # replicate the positive samples to balance the sample  
  for (i in 1:20) data.set <- rbind(data.set,pos)  
  row.names(data.set) <- NULL
  # Return datasets as a Named List
  return(list(dataset1=data.set, dataset2=dataframe2))
}

Passare oggetti R tra i componenti Esegui script R

È possibile passare oggetti R tra istanze del componente Esegui script R usando il meccanismo di serializzazione interna. In questo esempio si presuppone che si voglia spostare l'oggetto R denominato A tra due componenti Execute R Script.

  1. Aggiungere il primo componente Esegui script R alla pipeline. Immettere quindi il codice seguente nella casella di testo R Script per creare un oggetto A serializzato come colonna nella tabella dei dati di output del componente:

    azureml_main <- function(dataframe1, dataframe2){
      print("R script run.")
      # some codes generated A
    
      serialized <- as.integer(serialize(A,NULL))  
      data.set <- data.frame(serialized,stringsAsFactors=FALSE)
    
      return(list(dataset1=data.set, dataset2=dataframe2))
    }
    

    La conversione esplicita in tipo integer viene eseguita perché la funzione di serializzazione restituisce i dati nel formato R Raw , che la finestra di progettazione non supporta.

  2. Aggiungere una seconda istanza del componente Esegui script R e connetterla alla porta di output del componente precedente.

  3. Digitare il codice seguente nella casella di testo R Script per estrarre l'oggetto A dalla tabella dati di input.

    azureml_main <- function(dataframe1, dataframe2){
      print("R script run.")
      A <- unserialize(as.raw(dataframe1$serialized))  
      # Return datasets as a Named List
      return(list(dataset1=dataframe1, dataset2=dataframe2))
    }
    

Pacchetti R preinstallati

I pacchetti R preinstallati seguenti sono attualmente disponibili:

Pacchetto Versione
askpass 1.1
assertthat 0.2.1
backports 1.1.4
base 3.5.1
base64enc 0.1-3
BH 1.69.0-1
bindr 0.1.1
bindrcpp 0.2.2
bitops 1.0-6
boot 1.3-22
broom 0.5.2
callr 3.2.0
accento circonflesso 6.0-84
caTools 1.17.1.2
cellranger 1.1.0
classe 7.3-15
cli 1.1.0
clipr 0.6.0
cluster 2.0.7-1
codetools 0.2-16
colorspace 1.4-1
compiler 3.5.1
crayon 1.3.4
curl 3.3
data.table 1.12.2
set di dati 3.5.1
DBI 1.0.0
dbplyr 1.4.1
digest 0.6.19
dplyr 0.7.6
e1071 1.7-2
evaluate 0.14
fansi 0.4.0
forcats 0.3.0
foreach 1.4.4
foreign 0.8-71
fs 1.3.1
gdata 2.18.0
generics 0.0.2
ggplot2 3.2.0
glmnet 2.0-18
glue 1.3.1
gower 0.2.1
gplots 3.0.1.1
graphics 3.5.1
grDevices 3.5.1
griglia 3.5.1
gtable 0.3.0
gtools 3.8.1
haven 2.1.0
highr 0,8
hms 0.4.2
htmltools 0.3.6
httr 1.4.0
ipred 0.9-9
iterators 1.0.10
jsonlite 1.6
KernSmooth 2.23-15
knitr 1.23
labeling 0.3
lattice 0.20-38
lava 1.6.5
lazyeval 0.2.2
lubridate 1.7.4
magrittr 1.5
markdown 1
MASS 7.3-51.4
Matrice 1.2-17
methods 3.5.1
mgcv 1.8-28
mime 0,7
ModelMetrics 1.2.2
modelr 0.1.4
munsell 0.5.0
nlme 3.1-140
nnet 7.3-12
numDeriv 2016.8-1.1
openssl 1.4
parallel 3.5.1
pillar 1.4.1
pkgconfig 2.0.2
plogr 0.2.0
plyr 1.8.4
prettyunits 1.0.2
processx 3.3.1
prodlim 2018.04.18
progress 1.2.2
ps 1.3.0
purrr 0.3.2
quadprog 1.5-7
quantmod 0.4-15
R6 2.4.0
randomForest 4.6-14
RColorBrewer 1.1-2
Rcpp 1.0.1
RcppRoll 0.3.0
readr 1.3.1
readxl 1.3.1
recipes 0.1.5
rematch 1.0.1
reprex 0.3.0
reshape2 1.4.3
reticulate 1.12
rlang 0.4.0
rmarkdown 1.13
ROCR 1.0-7
rpart 4.1-15
rstudioapi 0,1
rvest 0.3.4
scales 1.0.0
selectr 0.4-1
spatial 7.3-11
splines 3.5.1
SQUAREM 2017.10-1
stats 3.5.1
stats4 3.5.1
stringi 1.4.3
stringr 1.3.1
survival 2.44-1.1
sys 3.2
tcltk 3.5.1
tibble 2.1.3
tidyr 0.8.3
tidyselect 0.2.5
tidyverse 1.2.1
timeDate 3043.102
tinytex 0.13
tools 3.5.1
tseries 0.10-47
TTR 0.23-4
utf8 1.1.4
utils 3.5.1
vctrs 0.1.0
viridisLite 0.3.0
whisker 0.3-2
withr 2.1.2
xfun 0,8
xml2 1.2.0
xts 0.11-2
yaml 2.2.0
zeallot 0.1.0
zoo 1.8-6

Passaggi successivi

Vedere il set di componenti disponibili per Azure Machine Learning.