Menjalankan komponen Skrip R

Artikel ini menjelaskan cara menggunakan komponen Jalankan Skrip R untuk menjalankan kode R di alur perancang Azure Machine Learning Anda.

Dengan R, Anda dapat melakukan tugas-tugas yang tidak didukung oleh komponen yang ada, seperti:

  • Membuat transformasi data kustom
  • Menggunakan metrik Anda sendiri untuk mengevaluasi prediksi
  • Membangun model menggunakan algoritma yang tidak diimplementasikan sebagai komponen mandiri dalam perancang

Dukungan versi R

Perancang Azure Machine Learning menggunakan distribusi CRAN (Comprehensive R Archive Network) dari R. Versi yang saat ini digunakan adalah CRAN 3.5.1.

Paket R yang didukung

Lingkungan R sudah diinstal sebelumnya dengan lebih dari 100 paket. Untuk daftar lengkap, lihat bagian Paket R yang sudah diinstal sebelumnya.

Anda juga dapat menambahkan kode berikut ke komponen Jalankan Skrip R apa pun, untuk melihat paket yang diinstal.

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

Catatan

Jika alur Anda berisi beberapa komponen Jalankan Skrip R yang memerlukan paket yang tidak ada dalam daftar yang sudah diinstal sebelumnya, instal paket di setiap komponen.

Menginstal paket R

Untuk menginstal paket R tambahan, gunakan metode install.packages(). Paket diinstal untuk setiap komponen Jalankan Skrip R. Paket tersebut tidak dibagikan di komponen Jalankan Skrip R lainnya.

Catatan

JANGAN instal paket R dari bundel skrip. Sebaiknya instal paket langsung di editor skrip. Tentukan repositori CRAN saat Anda menginstal paket, seperti install.packages("zoo",repos = "https://cloud.r-project.org").

Peringatan

Komponen Jalankan Skrip R tidak mendukung penginstalan paket yang memerlukan kompilasi asli, seperti paket qdap yang memerlukan JAVA dan paket drc yang memerlukan C++. Hal ini karena komponen ini dijalankan di lingkungan yang sudah diinstal sebelumnya dengan izin non-admin. Jangan menginstal paket yang sudah dibuat sebelumnya/untuk Windows, karena komponen perancang berjalan di Ubuntu. Untuk memeriksa apakah paket sudah dibuat sebelumnya di windows, Anda bisa membuka CRAN dan mencari paket Anda, mengunduh satu file biner sesuai dengan OS Anda, dan memeriksa bagian Built: dalam file DESKRIPSI. Berikut ini adalah contoh: Deskripsi paket R

Sampel ini memperlihatkan cara menginstal 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))
}

Catatan

Sebelum Anda menginstal paket, periksa apakah paket sudah ada agar Anda tidak mengulangi penginstalan. Penginstalan berulang dapat menyebabkan waktu habis permintaan layanan web.

Akses ke himpunan data terdaftar

Anda bisa merujuk ke kode sampel berikut untuk mengakses himpunan data terdaftar di ruang kerja Anda:

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))
}

Cara mengonfigurasi Execute R Script

Komponen Jalankan Skrip R berisi kode sampel sebagai titik awal.

Diagram input untuk komponen R

Himpunan data yang disimpan dalam perancang secara otomatis dikonversi ke bingkai data R saat dimuat dengan komponen ini.

  1. Tambahkan komponen Jalankan Skrip R ke alur Anda.

  2. Sambungkan input apa pun yang diperlukan skrip. Input bersifat opsional dan dapat mencakup data serta kode R tambahan.

    • Dataset1: Merujuk input pertama sebagai dataframe1. Himpunan data input harus diformat sebagai file CSV, TSV, atau ARFF. Atau Anda dapat menyambungkan himpunan Azure Machine Learning.

    • Dataset2: Merujuk input kedua sebagai dataframe2. Himpunan data ini juga harus diformat sebagai file CSV, TSV, atau ARFF, atau sebagai himpunan data Azure Machine Learning.

    • Bundel Skrip: Input ketiga menerima file .zip. File zip dapat berisi beberapa file dan beberapa jenis file.

  3. Dalam kotak teks Skrip R, ketik atau tempelkan skrip R yang valid.

    Catatan

    Hati-hati saat menulis skrip Anda. Pastikan tidak ada kesalahan sintaks, seperti menggunakan variabel yang tidak dideklarasikan atau komponen atau fungsi yang tidak dilaporkan. Beri perhatian lebih pada daftar paket yang sudah diinstal sebelumnya di akhir artikel ini. Untuk menggunakan paket yang tidak ada dalam daftar, instal paket di skrip Anda. Contohnya adalah install.packages("zoo",repos = "https://cloud.r-project.org").

    Untuk membantu Anda memulai, kotak teks Skrip R sudah diisi dengan kode sampel, yang dapat Anda edit atau ganti.

    # 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))
    }
    

    Fungsi titik entri harus memiliki argumen input Param<dataframe1> dan Param<dataframe2>, bahkan ketika argumen ini tidak digunakan dalam fungsi.

    Catatan

    Data yang diteruskan ke komponen Jalankan Skrip R direferensikan sebagai dataframe1 dan dataframe2, yang berbeda dari perancang Azure Machine Learning (referensi perancang sebagai dataset1, dataset2). Pastikan data input direferensikan dengan benar di skrip Anda.

    Catatan

    Kode R yang ada mungkin memerlukan perubahan kecil untuk dijalankan dalam alur perancang. Misalnya, data input yang Anda berikan dalam format CSV harus secara eksplisit dikonversi ke himpunan data sebelum Anda dapat menggunakannya dalam kode Anda. Jenis data dan kolom yang digunakan dalam bahasa R juga berbeda dalam beberapa hal mulai dari jenis data dan kolom yang digunakan dalam desainer.

  4. Jika skrip Anda lebih besar dari 16 KB, gunakan port Script Bundle untuk menghindari kesalahan seperti CommandLine exceeds the limit of 16597 characters.

    1. Gabungkan skrip dan sumber daya kustom lainnya ke file zip.
    2. Unggah file zip sebagai Himpunan Data File ke studio.
    3. Seret komponen himpunan data dari daftar Himpunan data di panel kiri komponen di halaman penulisan perancang.
    4. Hubungkan komponen himpunan data ke port Paket Skrip dari komponen Jalankan Skrip R.

    Berikut adalah kode sampel untuk menggunakan skrip dalam bundel skrip:

    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. Untuk Random Seed, masukkan nilai untuk digunakan di dalam lingkungan R sebagai nilai awal acak. Parameter ini sama dengan pemanggilan set.seed(value) dalam kode R.

  6. Kirim alur.

Hasil

Komponen Jalankan Skrip R dapat menampilkan beberapa output, tetapi harus disediakan sebagai bingkai data R. Perancang secara otomatis mengubah bingkai data ke himpunan data agar kompatibel dengan komponen lain.

Pesan dan kesalahan standar dari R ditampilkan ke log komponen.

Jika Anda perlu mencetak hasil dalam skrip R, Anda dapat menemukan hasil cetaknya di 70_driver_log di bagian tab Output +log di panel kanan komponen.

Skrip sampel

Ada banyak cara untuk memperluas alur Anda menggunakan skrip R kustom. Bagian ini menyediakan kode sampel untuk tugas umum.

Menambahkan skrip R sebagai input

Komponen Jalankan Skrip R mendukung file skrip R yang berubah-ubah sebagai input. Untuk menggunakannya, Anda harus mengunggahnya ke ruang kerja sebagai bagian dari file .zip Anda.

  1. Untuk mengunggah file .zip yang berisi kode R ke ruang kerja Anda, buka halaman aset Himpunan Data. Pilih Buat himpunan data, lalu pilih Dari file lokal dan opsi Jenis himpunan data file.

  2. Pastikan bahwa file zip muncul di Himpunan Data Saya di bagian kategori Himpunan data di pohon komponen kiri.

  3. Sambungkan himpunan data ke port input Script Bundle.

  4. Semua file dalam file .zip tersedia selama runtime alur.

    Jika file bundel skrip berisi struktur direktori, struktur dipertahankan. Namun, Anda harus mengubah kode Anda untuk menambahkan direktori ./Script Bundle ke jalur.

Proses data

Sampel berikut memperlihatkan cara menskalakan dan menormalkan data 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))
}

Membaca file .zip sebagai input

Sampel ini menunjukkan cara menggunakan himpunan data dalam file .zip sebagai input ke komponen Jalankan Skrip R.

  1. Buat file data dalam format CSV, dan beri nama mydatafile.csv.
  2. Buat file .zip dan tambahkan file CSV ke arsip.
  3. Unggah file zip ke ruang kerja Azure Machine Learning Anda.
  4. Hubungkan himpunan data yang dihasilkan ke input ScriptBundle dari komponen Jalankan Skrip R Anda.
  5. Gunakan kode berikut untuk membaca data CSV dari file zip.
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))
}

Mereplikasi baris

Sampel ini memperlihatkan cara mereplikasi rekaman positif dalam himpunan data untuk menyeimbangkan sampel:

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))
}

Teruskan objek R di antara komponen Jalankan Skrip R

Anda dapat meneruskan objek R antara contoh komponen Jalankan Skrip R dengan menggunakan mekanisme serialisasi internal. Contoh ini mengasumsikan bahwa Anda ingin memindahkan objek R yang diberi nama A di antara dua komponen Jalankan Skrip R.

  1. Tambahkan komponen Jalankan Skrip R pertama ke alur Anda. Kemudian masukkan kode berikut dalam kotak teks Skrip R untuk membuat objek serial A sebagai kolom dalam tabel data output komponen:

    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))
    }
    

    Konversi eksplisit ke jenis bilangan bulat dilakukan karena fungsi serialisasi menghasilkan data dalam format Raw R, yang tidak didukung perancang.

  2. Tambahkan instans kedua dari komponen Jalankan Skrip R, dan hubungkan ke port output komponen sebelumnya.

  3. Ketik kode berikut dalam kotak teks Skrip R untuk mengekstrak A objek dari tabel data 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))
    }
    

Paket R yang sudah diinstal sebelumnya

Paket R berikut yang sudah diinstal sebelumnya saat ini tersedia:

Paket Versi
askpass 1.1
assertthat 0.2.1
backports 1.1.4
basis 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
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
klaster 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
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
graphics 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
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
Matrix 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
alat 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

Langkah berikutnya

Lihat set komponen yang tersedia untuk Azure Machine Learning.