Empieza tu análisis en Pi System con R

Si trabajas en una industria que utiliza la suite Pi System de Osisoft para historizar los datos este tutorial es para ti, si no igual leelo, aprederás algo.
Quizas tienes ganas de ir mas allá de analisis con excel, utilizando datos con el datalink, y te haz preguntado como puedes trabajar de una manera más eficiente, utilizar mas datos y poder ver lo que pasa en tu proceso.
Este tutorial sigue los pasos explicados en este post, para mayor puedes consultar el artículo completo.
Instalación
Una vez instalado R y de preferencia utilizando RStudio como IDE para programar. El primer paso es instalar una herramienta que nos permitirá instalar el paquete de conexión que no se encuentra en CRAN.
install.packages("devtools")
Luego, levantamos la librería instalada e instalamos el packete PI Web API R desde
library(devtools)
install_github("rbechalany/PI-Web-API-Client-R")
Para probar que funciona:
library(piwebapi)
Con esto funcionando podemos empezar.
Conexión
Previamente deberás de asegurarte que tipo autenticación está definida en los servidores Pi para la conexión con Pi Web APi (bastaría con probar las dos opciones aqui mostradas). Encontré un servicio con autenticación basic que usaremos y con el que podremos hacer algunos experimentos.
library(piwebapi)
useKerberos <- FALSE
username <- "webapiuser"
password <- "!try3.14webapi!"
validateSSL <- TRUE
debug <- TRUE
piWebApiService <- piwebapi$new("https://devdata.osisoft.com/piwebapi", useKerberos, username, password, validateSSL, debug)
Para probar que la conexión funciona correctamente
response1 = piWebApiService$home$get()
response1
## $Links
## $Links$Self
## [1] "https://devdata.osisoft.com/piwebapi/"
##
## $Links$AssetServers
## [1] "https://devdata.osisoft.com/piwebapi/assetservers"
##
## $Links$DataServers
## [1] "https://devdata.osisoft.com/piwebapi/dataservers"
##
## $Links$Search
## [1] "https://devdata.osisoft.com/piwebapi/search"
##
## $Links$System
## [1] "https://devdata.osisoft.com/piwebapi/system"
##
##
## attr(,"className")
## [1] "PILanding"
Los valores obtenidos vienen a ser los mismos si ingresamos directamente a https://devdata.osisoft.com/piwebapi y utilizamos las credenciales mostradas líneas arriba.
Consulta de datos
Los métodos principales de recuperación de datos son Recorded para datos compresos e Interpolated valores y podemos elejir entre consultar uno o varios al mismo tiempo
data <- piWebApiService$data$getRecordedValues(path = "pi:\\\\PISRV1\\BA:TEMP.1",
startTime = "t-10d", endTime = "t",
maxCount = 90000,timeZone = "America/Lima")
head(data)
## value timestamp unitsAbbreviation good questionable substituted
## 1 19.65877 2020-08-28T05:00:58Z 1 0 0
## 2 20.23804 2020-08-28T05:01:28Z 1 0 0
## 3 19.09039 2020-08-28T05:01:58Z 1 0 0
## 4 19.88308 2020-08-28T05:02:28Z 1 0 0
## 5 18.94377 2020-08-28T05:02:58Z 1 0 0
## 6 19.03958 2020-08-28T05:03:28Z 1 0 0
Para consultar datos interpolados y quedarnos solo con los valores podemos usar
library("dplyr")
paths <-c("pi:\\\\PISRV1\\BA:ACTIVE.1",
"pi:\\\\PISRV1\\BA:CONC.1",
"pi:\\\\PISRV1\\BA:LEVEL.1",
"pi:\\\\PISRV1\\BA:TEMP.1")
data2 <- piWebApiService$data$getMultipleInterpolatedValues(paths = paths, startTime = "t-2d", endTime = "t",
interval = "1m",timeZone = "America/Lima")%>%
select("timestamp","value1","value2","value3","value4")
head(data2)
## timestamp value1 value2 value3 value4
## 1 2020-09-05T05:00:00Z Active 20.80128 39.52166 21.89482
## 2 2020-09-05T05:01:00Z Active 21.83165 38.84865 22.40835
## 3 2020-09-05T05:02:00Z Active 20.49986 38.96337 22.25714
## 4 2020-09-05T05:03:00Z Active 21.69394 39.78484 22.43602
## 5 2020-09-05T05:04:00Z Active 22.88801 39.57635 22.07614
## 6 2020-09-05T05:05:00Z Active 23.15508 39.42623 25.34974
EDA (Exploratory Data Analysis)
Una vez recuperada la data podemos visualizarla y hacer una exploración preliminar, como ver la tendencia de alguna señal en particular
colnames(data2) <- c("TimeStamp","Activate_Reactor","Conc_Reactor_1",
"Level_Reactor_1","Temperature_Reactor_1")
library("ggplot2")
data2 <- data2 %>%
mutate(Activate_Reactor = ifelse(Activate_Reactor=="Inactive",0,1)) %>%
mutate(TimeStamp= as.POSIXct(TimeStamp,format="%Y-%m-%dT%H:%M:%OS"))
data2 %>%
ggplot()+
geom_line(aes(x=TimeStamp, y=Temperature_Reactor_1))
O ver los histogramas de todas las variables
library("tidyr")
data2 %>%
select(-c(TimeStamp))%>%
gather() %>%
ggplot(aes(value)) +
geom_histogram(bins = 10) +
facet_wrap(~key, scales = 'free_x')
Una de mis herramientas favoritas es plotly para ver las tendencias
library("plotly")
data.graph = data2
a <- data.graph %>%
tidyr::gather(variable, value, -TimeStamp) %>%
transform(id = as.integer(factor(variable))) %>%
plot_ly(x = ~TimeStamp, y = ~value, color = ~variable, colors = "Dark2",
yaxis = ~paste0("y", id)) %>%
add_lines() %>%
subplot(nrows = ncol(data.graph)-1, shareX = TRUE)
a %>% layout(legend = list(orientation = 'h'))
Con esto podrias iniciar tu camino por la exploración y analisis de datos, espero te ayude. Si tienes consultas puedes enviarme un email y apenas pueda te constestaré.