Forum Discussion
Azure Machine Learning - Python Query Script with Power BI dataset
- Anonymous6 years ago
This post started with how to code Python to consume Azure ML predictive model. I ended up with scripting in "R", as i found good examples.
1: Have a Azure ML predictive model
2: Want to use Power BI to consume and get the prediction from azure ML (web service)3: Add the prediction to the original dataset in Power BI.
1. Added datasource in Power BI.
2. Edit Queries
3. Transform, and choose "Run R- script"
Added this code (dataset is Power BI data, you get it directly):
# 'dataset' holds the input data for this script library("RCurl") library("rjson") library("bitops") # Accept SSL certificates issued by public Certificate Authorities options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) dataset <- dataset[complete.cases(dataset), ] ##remove NaN h = basicTextGatherer() hdr = basicHeaderGatherer() req = list( Inputs = list( input1 = setNames(lapply(split(dataset, seq(nrow(dataset))), FUN = as.list), NULL) ), GlobalParameters = setNames(fromJSON('{}'), character(0)) ) body = enc2utf8(toJSON(req)) api_key = "<replace key>" # Replace this with the API key for the web service authz_hdr = paste('Bearer', api_key, sep=' ') h$reset() curlPerform(url = "<replace url>", # Replace this with the URL for the web service httpheader=c('Content-Type' = "application/json", 'Authorization' = authz_hdr), postfields=body, writefunction = h$update, headerfunction = hdr$update, verbose = TRUE ) headers = hdr$value() httpStatus = headers["status"] if (httpStatus >= 400){ result.error <- data.frame("Error") }else{ result.json = h$value() result.list = fromJSON(result.json)$Results$output1 result.list.final <- lapply(result.list, FUN = function(x) lapply(x, FUN = function(y) if( is.null(y) ){y <- NA}else{y <- y})) result.df <- data.frame(do.call(rbind.data.frame, result.list.final)) result.df = merge(dataset,result.df,by.x="row_id",by.y="row_id") #to combine original dataset with prediction }Found most of this code in this website:In this way, it is possible to consume Azure ML without Premium license.
Hi Anonymous,
has your question been answered?
Did you solve your problem?
If I answered your question, please mark my post as solution, this will also help others.
Please give Kudos for support.
This post started with how to code Python to consume Azure ML predictive model. I ended up with scripting in "R", as i found good examples.
1: Have a Azure ML predictive model
2: Want to use Power BI to consume and get the prediction from azure ML (web service)
3: Add the prediction to the original dataset in Power BI.
1. Added datasource in Power BI.
2. Edit Queries
3. Transform, and choose "Run R- script"
Added this code (dataset is Power BI data, you get it directly):
# 'dataset' holds the input data for this script
library("RCurl")
library("rjson")
library("bitops")
# Accept SSL certificates issued by public Certificate Authorities
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))
dataset <- dataset[complete.cases(dataset), ] ##remove NaN
h = basicTextGatherer()
hdr = basicHeaderGatherer()
req = list(
Inputs = list(
input1 = setNames(lapply(split(dataset, seq(nrow(dataset))), FUN = as.list), NULL)
),
GlobalParameters = setNames(fromJSON('{}'), character(0))
)
body = enc2utf8(toJSON(req))
api_key = "<replace key>" # Replace this with the API key for the web service
authz_hdr = paste('Bearer', api_key, sep=' ')
h$reset()
curlPerform(url = "<replace url>", # Replace this with the URL for the web service
httpheader=c('Content-Type' = "application/json", 'Authorization' = authz_hdr),
postfields=body,
writefunction = h$update,
headerfunction = hdr$update,
verbose = TRUE
)
headers = hdr$value()
httpStatus = headers["status"]
if (httpStatus >= 400){
result.error <- data.frame("Error")
}else{
result.json = h$value()
result.list = fromJSON(result.json)$Results$output1
result.list.final <- lapply(result.list, FUN = function(x) lapply(x, FUN = function(y) if( is.null(y) ){y <- NA}else{y <- y}))
result.df <- data.frame(do.call(rbind.data.frame, result.list.final))
result.df = merge(dataset,result.df,by.x="row_id",by.y="row_id") #to combine original dataset with prediction
}