تنفيذ مكون Execute R Script

توضح هذه المقالة كيفية استخدام مكون Execute R Script لتشغيل التعليمة البرمجية R في البنية الأساسية لبرنامج ربط العمليات التجارية لمصمم التعلم الآلي من Azure.

باستخدام R، يمكنك القيام بمهام غير مدعومة من قبل المكونات الموجودة، مثل:

  • إنشاء تحويلات بيانات مخصصة
  • استخدام المقاييس الخاصة بك لتقييم التنبؤات
  • إنشاء نماذج باستخدام خوارزميات لا يتم تنفيذها كمكونات مستقلة في المصمم

دعم الإصدار R

يستخدم مصمم التعلم الآلي من Azure توزيع CRAN (شبكة أرشيف R الشاملة) لـ R. الإصدار المستخدم حاليا هو CRAN 3.5.1.

حزم R المدعومة

يتم تثبيت منظومة R مسبقا بأكثر من 100 حزمة. للحصول على قائمة كاملة، راجع القسم حزم R المثبّتة مسبقاً.

يمكنك أيضا إضافة التعليمات البرمجية التالية إلى أي مكون Execute R Script، لمشاهدة الحزم المثبتة.

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

ملاحظة

إذا كان التدفق يحتوي على العديد من مكوّنات Execute R Script التي تحتاج إلى حزم غير موجودة في القائمة المركّبة مسبقاً، فقم بتثبيت الحزم في كل مكوّن.

تثبيت حزم R

لتثبيت حزم R إضافية، استخدم الأسلوب install.packages(). يتم تثبيت الحزم لكل مكون من مكونات Execute R Script. لا تتم مشاركتها عبر مكونات Execute R Script الأخرى.

ملاحظة

لا يوصى بتثبيت حزمة R من حزمة البرنامج النصي. يوصى بتثبيت الحزم مباشرة في محرر البرنامج النصي. حدد مستودع CRAN عند تثبيت الحزم، مثل install.packages("zoo",repos = "https://cloud.r-project.org").

تحذير

لا يدعم مكون Excute R Script تثبيت الحزم التي تتطلب التحويل البرمجي الأصلي، مثل qdap الحزمة التي تتطلب JAVA والحزمة drc التي تتطلب C++. وذلك لأن هذا المكون يتم تنفيذه في بيئة مثبتة مسبقا بإذن غير مسؤول. لا تقم بتثبيت الحزم التي تم إنشاؤها مسبقا على/Windows، نظرا لأن مكونات المصمم تعمل على Ubuntu. للتحقق مما إذا كانت الحزمة مبنية مسبقا على النوافذ، يمكنك الانتقال إلى CRAN والبحث في الحزمة الخاصة بك، وتنزيل ملف ثنائي واحد وفقا لنظام التشغيل الخاص بك، والتحقق من الجزء Built: في ملف DESCRIPTION. فيما يلي مثال: R package description

يوضح هذا النموذج كيفية تثبيت 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))
}

ملاحظة

قبل تثبيت حزمة، تحقق مما إذا كانت موجودة بالفعل حتى لا تكرر التثبيت. قد تتسبب عمليات التثبيت المتكررة في انتهاء مهلة طلبات خدمة الويب.

الوصول إلى مجموعة البيانات المسجلة

يمكنك الرجوع إلى عينة التعليمات البرمجية التالية للوصول إلى مجموعات البيانات المسجلة في مساحة عملك:

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

كيفية تكوين Execute R Script

يحتوي مكون Execute R Script على نموذج التعليمات البرمجية كنقطة بداية.

رسم تخطيطي للمدخلات لمكون R

يتم تحويل مجموعات البيانات المخزنة في المصمم تلقائيا إلى إطار بيانات R عند تحميلها مع هذا المكون.

  1. أضف مكوّن Execute R Script إلى مسار التدفق الخاص بك.

  2. قم بتوصيل أي مدخلات يحتاجها البرنامج النصي. المدخلات اختيارية ويمكن أن تتضمن بيانات والتعليمة البرمجية R الإضافية.

    • Dataset1: الرجوع إلى الإدخال الأول كـ dataframe1. يجب تنسيق مجموعة بيانات الإدخال كملف CSV أو TSV أو ARFF. أو يمكنك توصيل مجموعة بيانات التعلم الآلي من Azure.

    • Dataset2: الرجوع إلى الإدخال الثاني كـ dataframe2. يجب أيضا تنسيق مجموعة البيانات هذه كملف CSV أو TSV أو ARFF أو كمجموعة بيانات التعلم الآلي من Azure.

    • حزمة البرنامج النصي: يقبل الإدخال الثالث ملفات .zip. يمكن أن يحتوي الملف المضغوط على ملفات متعددة وأنواع ملفات متعددة.

  3. في مربع النص R script، اكتب أو الصق نص R صالح.

    ملاحظة

    كن حذراً عند كتابة البرنامج النصي الخاص بك. تأكد من عدم وجود أخطاء في بناء الجملة، مثل استخدام متغيّرات غير معلنة أو مكوّنات أو دالات غير محددة. انتبه أكثر لقائمة الحزم المثبتة مسبقا في نهاية هذه المقالة. لاستخدام الحزم غير المدرجة، قم بتثبيتها في البرنامج النصي الخاص بك. المثال هو install.packages("zoo",repos = "https://cloud.r-project.org").

    لمساعدتك على البدء، يتم ملء مربع النص R Script مسبقا بنموذج التعليمات البرمجية، والذي يمكنك تحريره أو استبداله.

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

    يجب أن تحتوي دالة نقطة الإدخال على وسيطتي الإدخال Param<dataframe1> وParam<dataframe2> حتى عندما لا يتم استخدام هذه الوسيطات في الدالة.

    ملاحظة

    تتم الإشارة إلى البيانات التي تم تمريرها إلى مكون Execute R Script كـ dataframe1 وdataframe2، والتي تختلف عن مصمم التعلم الآلي من Azure (مرجع المصمم كـ dataset1، dataset2). تأكد من الإشارة إلى بيانات الإدخال بشكل صحيح في البرنامج النصي الخاص بك.

    ملاحظة

    قد تحتاج التعليمات البرمجية R الموجودة إلى تغييرات طفيفة لتشغيلها في لمسار المصمم. على سبيل المثال، يجب تحويل بيانات الإدخال التي تقدمها بتنسيق CSV بشكل صريح إلى مجموعة بيانات قبل أن تتمكن من استخدامها في التعليمات البرمجية خاصتك. تختلف أنواع البيانات والأعمدة المستخدمة في لغة R أيضا في بعض الطرق عن أنواع البيانات والأعمدة المستخدمة في المصمم.

  4. إذا كان البرنامج النصي الخاص بك أكبر من 16 كيلوبايت، فاستخدم منفذ حزمة البرنامج النصي لتجنب أخطاء مثل CommandLine يتجاوز الحد الأقصى وهو 16597 حرفاً.

    1. قم بتجميع البرنامج النصي والموارد المخصصة الأخرى في ملف مضغوط.
    2. قم بتحميل الملف المضغوط كمجموعة بيانات ملف إلى الاستوديو.
    3. اسحب مكوّن مجموعة البيانات من قائمة Datasets في جزء المكوّن الأيسر في صفحة تأليف المصمم.
    4. قم بتوصيل مكوّن مجموعة البيانات إلى منفذ حزمة البرنامج النصي لمكوّن Execute R 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. بالنسبة لـ Random Seed، أدخل قيمة لاستخدامها داخل بيئة R كقيمة أولية عشوائية. هذه المعلمة تعادل استدعاء set.seed(value) في التعليمة البرمجية R.

  6. إرسال المسار.

النتائج

يمكن لمكونات تنفيذ R Script إرجاع مخرجات متعددة، ولكن يجب توفيرها كإطارات بيانات R. يقوم المصمم تلقائيا بتحويل إطارات البيانات إلى مجموعات بيانات للتوافق مع المكونات الأخرى.

يتم إرجاع الرسائل والأخطاء القياسية من R إلى سجل المكون.

إذا كنت بحاجة إلى طباعة النتائج في البرنامج النصي R، يمكنك العثور على النتائج المطبوعة في 70_driver_log ضمن علامة التبويب Outputs+logs في اللوحة اليمنى للمكون.

عينات البرامج النصية

هناك العديد من الطرق لتوسيع البنية الأساسية لمسارك باستخدام البرامج النصية R المخصصة. يوفر هذا المقطع نموذج التعليمات البرمجية للمهام الشائعة.

إضافة برنامج نصي R كمدخل

يدعم مكون Execute R Script ملفات البرنامج النصي R العشوائية كمدخلات. لاستخدامها، يجب تحميلها إلى مساحة العمل كجزء من ملف .zip.

  1. لتحميل ملف .zip يحتوي على تعليمة برمجية R إلى مساحة العمل الخاصة بك، انتقل إلى صفحة أصول مجموعات البيانات. حدد إنشاء مجموعة بيانات، ثم حدد من ملف محلي وخيار نوع مجموعة البيانات ملف.

  2. تحقق من ظهور الملف المضغوط في مجموعات البيانات خاصتي ضمن فئة مجموعات البيانات في شجرة المكون الأيسر.

  3. قم بتوصيل مجموعة البيانات إلى منفذ إدخال حزمة البرنامج النصي.

  4. تتوفر جميع الملفات في ملف .zip أثناء وقت تشغيل مسار التدفق.

    إذا احتوى ملف حزمة البرنامج النصي على بنية دليل، يتم الاحتفاظ بالبنية. ولكن يجب عليك تعديل التعليمات البرمجية الخاصة بك لإرفاق الدليل ./Script Bundle بالمسار.

معالجة البيانات

يوضح النموذج التالي كيفية تحجيم بيانات الإدخال وتطبيعها:

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

قراءة ملف .zip كإدخال

يوضح هذا النموذج كيفية استخدام مجموعة بيانات في ملف .zip كإدخال إلى مكون Execute R Script.

  1. قم بإنشاء ملف البيانات بتنسيق CSV، وقم بتسمية mydatafile.csv.
  2. إنشاء ملف .zip وإضافة ملف CSV إلى الأرشيف.
  3. قم بتحميل الملف المضغوط إلى مساحة عمل التعلم الآلي في Azure.
  4. قم بتوصيل مجموعة البيانات الناتجة إلى إدخال ScriptBundle لمكون Execute R Script.
  5. استخدم التعليمات البرمجية التالية لقراءة بيانات CSV من الملف المضغوط.
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))
}

نسخ الصفوف نسخا متماثلا

يوضح هذا النموذج كيفية النسخ المتماثل للسجلات الموجبة في مجموعة بيانات لموازنة العينة:

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

قم بتمرير كائنات R بين مكونات Execute R Script

يمكنك تمرير كائنات R بين مثيلات مكون Execute R Script باستخدام آلية التسلسل الداخلية. يفترض هذا المثال أنك تريد نقل كائن R المسمى A بين مكوني Execute R Script.

  1. أضف مكوّن Execute R Script إلى مسار التدفق خاصتك. ثم أدخل التعليمات البرمجية التالية في مربع النص R Script لإنشاء كائن متسلسل A كعمود في جدول بيانات إخراج المكون:

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

    يتم إجراء التحويل الصريح إلى نوع عدد صحيح لأن دالة التسلسل تُخرج البيانات بتنسيق R Raw، وهو ما لا يدعمه المصمم.

  2. أضف مثيلا ثانيا من مكون Execute R Script، وقم بتوصيله بمنفذ الإخراج للمكون السابق.

  3. اكتب التعليمات البرمجية التالية في مربع النص R Script لاستخراج الكائن A من جدول بيانات الإدخال.

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

حزم R المثبتة مسبقا

تتوفر حزم R المثبتة مسبقا التالية حاليا:

الحزمة إصدار
askpass 1.1
assertthat 0.2.1
backports 1.1.4
التمركز 3.5.1
base64enc 0.1-3
البوسنة والهرسك 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
فئة 7.3-15
cli 1.1.0
clipr 0.6.0
نظام المجموعة 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
مجموعات البيانات 3.5.1
DBI 1.0.0
dbplyr 1.4.1
digest 0.6.19
dplyr 0.7.6
e1071 1.7-2
التقييم 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
مصفوفة 1.2-17
الأساليب 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
الأدوات 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

الخطوات التالية

راجع مجموعة المكونات المتوفرة للتعلم الآلي من Azure.