Eseguire il componente script R
Questo articolo descrive come usare il componente Execute R Script (Esegui script R) per eseguire il codice R nella pipeline della finestra di progettazione di Azure Machine Learning.
Con R è possibile eseguire attività non supportate dai componenti esistenti, ad esempio:
- Creare trasformazioni di dati personalizzate
- Usare le metriche personalizzate per valutare le stime
- Compilare modelli usando algoritmi non implementati come componenti autonomi nella finestra di progettazione
Supporto della versione R
La finestra di progettazione di Azure Machine Learning usa la distribuzione CRAN (Comprehensive 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 Execute R Script (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 richiedono pacchetti che non sono inclusi 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 Execute R Script. Non vengono condivisi tra altri componenti Execute R Script.
Nota
Non è consigliabile installare il pacchetto R dal bundle di script. È consigliabile installare i pacchetti direttamente nell'editor di script.
Specificare il repository CRAN durante l'installazione di pacchetti, ad esempio install.packages("zoo",repos = "https://cloud.r-project.org")
.
Avviso
Il componente Excute R Script non supporta l'installazione di pacchetti che richiedono la compilazione nativa, ad esempio qdap
il pacchetto che richiede JAVA e drc
il pacchetto che richiede C++. Questo perché questo componente viene eseguito in un ambiente preinstallato con autorizzazione non amministratore.
Non installare pacchetti predefiniti per Windows, perché 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:
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 Execute R Script
Il componente Execute R Script contiene il codice di esempio come punto di partenza.
I set di dati archiviati nella finestra di progettazione vengono convertiti automaticamente in un frame di dati R quando viene caricato con questo componente.
Aggiungere il componente Execute R Script (Esegui script R) alla pipeline.
Connettere gli input necessari allo script. Gli input sono facoltativi e possono includere dati e codice R aggiuntivo.
Dataset1: 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.Dataset2: fare riferimento al secondo input come
dataframe2
. Questo set di dati deve anche essere formattato come file CSV, TSV o ARFF o come set di dati di Azure Machine Learning.Bundle di script: il terzo input accetta .zip file. Un file compresso può contenere più file e più tipi di file.
Nella casella di testo Script R digitare o incollare uno script R valido.
Nota
Prestare attenzione quando si scrive lo script. Assicurarsi che non siano presenti errori di sintassi, ad esempio l'uso di variabili non dichiarate o componenti o funzioni non importanti. Prestare particolare attenzione all'elenco di pacchetti preinstallati alla fine di questo articolo. Per usare pacchetti non elencati, installarli nello script. Un esempio è
install.packages("zoo",repos = "https://cloud.r-project.org")
.Per iniziare, la casella di testo Script R è prepopolata con il 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 eParam<dataframe2>
, anche quando questi argomenti non vengono usati nella funzione .Nota
Ai dati passati al componente Execute R Script viene fatto riferimento come
dataframe1
edataframe2
, che è diverso dalla finestra di progettazione di Azure Machine Learning (riferimento alla finestra di progettazione comedataset1
,dataset2
). Assicurarsi che il riferimento ai dati di input sia corretto 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 di colonna usati nel linguaggio R differiscono anche in alcuni modi rispetto ai tipi di dati e di colonna usati nella finestra di progettazione.
Se lo script è maggiore di 16 KB, usare la porta bundle di script per evitare errori come CommandLine supera il limite di 16597 caratteri.
- Aggregare lo script e altre risorse personalizzate a un file ZIP.
- Caricare il file ZIP come set di dati di file nello studio.
- 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.
- Connettere il componente del set di dati alla porta bundle script del componente Execute R Script .
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))) }
Per Valore di inizializzazione casuale immettere un valore da usare all'interno dell'ambiente R come valore di inizializzazione casuale. Questo parametro equivale a chiamare
set.seed(value)
nel codice R.Inviare la pipeline.
Risultati
I componenti Execute R Script possono 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 di 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 Output e log 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 .zip.
Per caricare un file di .zip che contiene codice R nell'area di lavoro, passare alla pagina asset Set di dati . Selezionare Crea set di dati e quindi selezionare Da file locale e l'opzione Tipo di set di dati file.
Verificare che il file compresso venga visualizzato in My Datasets ( Set di dati personali) nella categoria Set di dati nell'albero dei componenti sinistro.
Connettere il set di dati alla porta di input del bundle di script.
Tutti i file nel file .zip sono disponibili durante l'esecuzione della pipeline.
Se il file bundle di script contiene una struttura di directory, la struttura viene mantenuta. È tuttavia necessario modificare il codice per anteporre la directory ./Script Bundle al 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 Execute R Script ( Esegui script R).
- Creare il file di dati in formato CSV e denominarlo mydatafile.csv.
- Creare un file .zip e aggiungere il file CSV all'archivio.
- Caricare il file compresso nell'area di lavoro di Azure Machine Learning.
- Connettere il set di dati risultante all'input ScriptBundle del componente Esegui script R.
- 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 Execute R Script
È possibile passare oggetti R tra istanze del componente Execute R Script usando il meccanismo di serializzazione interno. In questo esempio si presuppone che si voglia spostare l'oggetto R denominato A
tra due componenti Execute R Script.
Aggiungere il primo componente Execute R Script (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 dati nel formato R
Raw
, che la finestra di progettazione non supporta.Aggiungere una seconda istanza del componente Execute R Script e connetterla alla porta di output del componente precedente.
Digitare il codice seguente nella casella di testo R Script per estrarre l'oggetto
A
dalla tabella dei 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
Sono attualmente disponibili i pacchetti R preinstallati seguenti:
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 |
Scopa | 0.5.2 |
callr | 3.2.0 |
caret | 6.0-84 |
caTools | 1.17.1.2 |
cellranger | 1.1.0 |
class | 7.3-15 |
cli | 1.1.0 |
clipr | 0.6.0 |
cluster | 2.0.7-1 |
codetools | 0.2-16 |
colorspace | 1.4-1 |
compilatore | 3.5.1 |
crayon | 1.3.4 |
curl | 3.3 |
data.table | 1.12.2 |
datasets | 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 |
grafica | 3.5.1 |
grDevices | 3.5.1 |
grid | 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 |
Iteratori | 1.0.10 |
jsonlite | 1.6 |
KernSmooth | 2.23-15 |
knitr | 1.23 |
Etichettatura | 0,3 |
Lattice | 0.20-38 |
Java | 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 |
Concetto fondamentale | 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 |
Avanzamento | 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 |
ricette | 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 |
Scalabilità | 1.0.0 |
selectr | 0.4-1 |
spaziale | 7.3-11 |
Spline | 3.5.1 |
SQUAREM | 2017.10-1 |
stats | 3.5.1 |
stats4 | 3.5.1 |
stringi | 1.4.3 |
stringr | 1.3.1 |
Sopravvivenza | 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.