Cristian Benalcázar
02-04-2018
Productos de datos son el resultado de un análisis de datos.
Ejemplo:
Un análisis de datos podría generar algoritmo que calcule un score para un grupo de posibles clientes.
Producto de datos:
Estáticos
Productos que no permiten modificar tipo de visualización
Dinámicos
Productos que permiten modificar el tipo de visualización, además de cambiar el tipo de gráfico, permiten añadir nuevas variables, nuevos registros, realizar filtros, actualizar y consolidar los resultados, etc.
Potencial y ventajas de R se incorporan directamente a nuestros productos de datos.
Facilidad, dentro de lo necesario para desarrollar productos de datos se incluye HTML, Javascript, D3, Web Services, etc. etc.
Con las herramientas que estudiaremos podemos generar productos finales o podemos usarlas como herramientas prototipo antes de construir un desarrollo más grande en dependencia de nuestras necesidades.
library(xlsx)
exportar <- function(datos, archivo){
wb <- createWorkbook(type="xlsx")
# Estilos de celdas
# Estilos de titulos y subtitulos
titulo <- CellStyle(wb)+ Font(wb, heightInPoints=16, isBold=TRUE)
subtitulo <- CellStyle(wb) + Font(wb, heightInPoints=12,
isItalic=TRUE, isBold=FALSE)
# Estilo de tablas
filas <- CellStyle(wb) + Font(wb, isBold=TRUE)
columnas <- CellStyle(wb) + Font(wb, isBold=TRUE) +
Alignment(vertical="VERTICAL_CENTER",wrapText=TRUE, horizontal="ALIGN_CENTER") +
Border(color="black", position=c("TOP", "BOTTOM"),
pen=c("BORDER_THICK", "BORDER_THICK"))+Fill(foregroundColor = "lightblue", pattern = "SOLID_FOREGROUND")
# Crear una hoja
sheet <- createSheet(wb, sheetName = "Información - R Users Group - Ecuador")
# Funcion linea (agregar texto)
linea<-function(sheet, rowIndex, title, titleStyle){
rows <- createRow(sheet, rowIndex=rowIndex)
sheetTitle <- createCell(rows, colIndex=1)
setCellValue(sheetTitle[[1,1]], title)
setCellStyle(sheetTitle[[1,1]], titleStyle)
}
# Agregamos titulos, subtitulos, etc.
linea(sheet, rowIndex=8,
title=paste("Fecha:", format(Sys.Date(), format="%Y/%m/%d")),
titleStyle = subtitulo)
linea(sheet, rowIndex=9,
title="Elaborado por: R Users Group - Ecuador",
titleStyle = subtitulo)
linea(sheet, rowIndex=11,
paste("Información de prueba"),
titleStyle = titulo)
# Tablas
addDataFrame(datos,
sheet, startRow=13, startColumn=1,
colnamesStyle = columnas,
rownamesStyle = filas,
row.names = F)
# Ancho de columnas
setColumnWidth(sheet, colIndex=c(1:ncol(datos)), colWidth=15)
# Imagen Cambia la ruta por la que de tu imagen
addPicture("C:/final5x5.png", sheet, scale=0.75, startRow = 1, startColumn = 1)
# Guardar
saveWorkbook(wb, archivo)
}
exportar(mtcars, "R Users Group - Ecuador - mtcars.xlsx")
Con lo cual vamos a obtener un archivo excel como este:
ggplot2
Presentación actual
Presentación BI - R Users Group - Ecuador
Dashboard reactivos - R Users Group - Ecuador
Estudio, análisis completamente replicable -captura de datos, limpieza, procesamiento y resultados-.
Debe incluir descripción, objetivos, etc.
Ejemplos:
Markdown es un lenguaje de marcado ligero que trata de conseguir la máxima legibilidad y facilidad de publicación tanto en su forma de entrada como de salida, inspirándose en muchas convenciones existentes para marcar mensajes de correo electrónico usando texto plano.
La clave del diseño de Markdown es la facilidad de su lectura que hace que el lenguaje sea fácilmente interpretado, sin lucir como si hubiera sido marcado con etiquetas o instrucciones de estilo, como RTF o HTML, los cuales tienen etiquetas que hacen mas difícil su lectura e interpretación.
Fundamental para la web semántica
Markdown ofrece integración con varios lenguajes de programación, dentro de estos R, la manera más sencilla de escribir un informe rápido, mezclando un poco de R, es usar rmarkdown, una variante de Markdown desarrollada por la gente de Rstudio.
R Markdown es una variante de Markdown basada en pandoc que tiene incrustados trozos de código R, que se utiliza con knitr para facilitar la creación de informes basados en web reproducibles.
install.packages("rmarkdown")
library(rmarkdown)
La sintaxis de Markdown tiene algunas mejoras;
La clave para integración con R son los trozos de código, que se incluyen en cualquier parte del código rmarkdown, dentro del trozo se puede incluir cualquier función o paquete de R:
`` `{r}
head(iris)
`` `
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
File >> New File >> R Markdown >> OK >> Knit
Publicarlos en rpubs y subir el código a github
Shiny es una paquete de R con el cual podemos crear aplicaciones web interactivas (apps) que permiten a los usuarios interactuar con sus datos sin tener que manipular el código.
No hace falta conocimiento de HTML o JavaScript, solo conocer R.
install.packages("shiny")
library(shiny)
La aplicación tiene 3 componentes:
UI : Interfaz de usuario, controla el diseño, entradas y salidas de la aplicación.
SERVER : Funciones, cálculos, resultados, etc., contiene las instrucciones necesarias para el funcionamiento de la aplicación.
GLOBAL : Data - puede omitirse y colocarse antes del resto de componentes.
APP : Combina las anteriores
Comprensión y práctica
Las aplicaciones shiny tienen 2 layouts(tipos de diseño):
Sidebar Layout
Grid Layout
Fluidrow
Default 12
shinyUI(fluidPage(
fluidRow(
column(2,
"sidebar"
),
column(10,
"main"
)
)
))
Fluidrow
Personalizable
shinyUI(fluidPage(
fluidRow(
column(4,
"4"
),
column(4, offset = 4,
"4 offset 4"
)
),
fluidRow(
column(3, offset = 3,
"3 offset 3"
),
column(3, offset = 3,
"3 offset 3"
)
)
))
Fixedrow
fixedRow(
column(9,
"Level 1 column",
fixedRow(
column(6,
"Level 2"
),
column(3,
"Level 2"
)
)
)
)
Comprensión y práctica
Independientemente del layout podemos agregar paneles, subpaneles, entre otros.
Tabsets
shinyUI(fluidPage(
...
titlePanel("Tabsets"),
tabsetPanel(
tabPanel("Plot", plotOutput("plot")),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Table", tableOutput("table"))
)
)
)
Navlists
shinyUI(fluidPage(
...
navlistPanel(
"Header A",
tabPanel("Component 1"),
tabPanel("Component 2"),
"Header B",
tabPanel("Component 3"),
tabPanel("Component 4"),
"-----",
tabPanel("Component 5")
)
))
NavbarPages
shinyUI(navbarPage("My Application",
tabPanel("Component 1"),
tabPanel("Component 2"),
navbarMenu("More",
tabPanel("Sub-Component A"),
tabPanel("Sub-Component B"))
))
Comprensión y práctica
Entrada ui >> input
sliderInput(“bins”, “Number of bins:”, min = 1, max = 50, value = 30)
input$bins
Procesimento server >> output
output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') })
output$distPlot
Visualización ui >> input & output
plotOutput(“distPlot”)
Comprensión y práctica
actionButton(“boton”, “Buscar”)
actionLink(“link”, “Enlace”)
downloadButton('descarga', 'Descargar')
Demostración
Comprensión y práctica
runExample("01_hello")
“01_hello”
“02_text”
“03_reactivity”
“04_mpg”
“05_sliders”
“06_tabsets”
“07_widgets”
“08_html”
“09_upload”
“10_download”
“11_timer”
install.packages("shinydashboard")
## app.R ##
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody()
)
server <- function(input, output) { }
shinyApp(ui, server)
dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Widgets", tabName = "widgets", icon = icon("th"))
)
)
dashboardBody(
tabItems(
# First tab content
tabItem(tabName = "dashboard",
fluidRow(
box(plotOutput("plot1", height = 250)),
box(
title = "Controls",
sliderInput("slider", "Number of observations:", 1, 100, 50)
)
)
),
# Second tab content
tabItem(tabName = "widgets",
h2("Widgets tab content")
)
)
)
#### ui
selectInput("variable1", "Selecciones la variable a visualizar:", choices = c("Cooperativa","Marca", "Sector")
)
#### server
resumen <- reactive({
data <- data %>% group_by(data[,grep(input$variable1, colnames(data))]) %>% summarize(N=n())
data <- as.data.frame(data)
colnames(data) <- c("variable", "N")
data
})
output$graf <- renderHighchart({
hchart(resumen(), "pie", hcaes(x=variable , y = N))
})
output$tab <- renderTable({
resumen()
})
actionButton("gen_tabla", "Generar resumen SIE NO SIE")
tabla <- eventReactive(input$gen_tabla, {
funcion_tabla(buscado())
})
#### ui
ui <- fluidPage(
tabsetPanel(
tabPanel("Evolución",
fluidRow(column(2,
wellPanel(
conditionalPanel(condition = "input.conditionedPanels_matriz == 'Evolución' | input.conditionedPanels_matriz == 'Seguimiento'",
................
)),
column(10,
navbarPage("",collapsible=T,
tabPanel("Ranking",
................
),
tabPanel("Perfil",
selectInput("grupo","Selección de grupo", choices=c("Público", "Privado")),
conditionalPanel(condition="input.grupo=='Privado'",
......................
),
conditionalPanel(condition="input.grupo=='Público'",
......................
)
),id="conditionedPanels_matriz"
)
)
)
)
),
tabPanel("Consolidado",
.....................
),
tabPanel("Metodología",
.....................
),
tabPanel("Twitter",
navbarPage("",collapsible=T,
tabPanel("Buscar tema",
..............
),
tabPanel("Buscar tweets de usuario",
..............
)
)
),id="conditionedPanels_matriz"
)
)
R Permite integración con bases de datos relacionales Postgres, MySql, Oracle, etc.
En dependencia del tipo de base podemos utilizar un determinado paquuete o función.
Postgres
library(sqldf)
options(sqldf.RPostgreSQL.user ="user",
sqldf.RPostgreSQL.password ="pass",
sqldf.RPostgreSQL.dbname ="base",
sqldf.RPostgreSQL.host ="ip",
sqldf.RPostgreSQL.port =5432)
sqldf("select * from tabla_x")
library(RPostgreSQL)
db <- dbConnect(PostgreSQL(), dbname = "base", host = "localhost", port = 5432, user = "postgres", password = "pass")
query <- "select * from tabla_x"
data <- dbGetQuery(db, query)
dbDisconnect(db)
data
Oracle
drv <- JDBC(driverClass="oracle.jdbc.driver.OracleDriver",
classPath="/ojdbc6.jar",
identifier.quote="`")
conn <- dbConnect(drv=drv,
url="jdbc:oracle:thin:@//192.168.1.132:1521/ORAI",
user="user",
password="pass")
dbGetQuery(conn, "select * from tabla_x")
Demostración
Demostración
Ejecución programada de scripts R.
Rscript.exe --vanilla --slave script.r
Windows - batch y tareas automáticas
"C:\Program Files\R\R-3.4.1\bin\Rscript.exe" --vanilla --slave "C:\automaticos\script.r"
-vanilla (no save, no restore, quick startup) and –slave (makes R run quiet).
30 20 * * * R CMD BATCH /automaticos/script.r
Los asteriscos de izquierda a derecha representan:
Minutos: de 0 a 59.
Horas: de 0 a 23.
Día del mes: de 1 a 31.
Mes: de 1 a 12.
Día de la semana: de 0 a 6, siendo 0 el domingo.
Si se deja un asterisco, quiere decir “cada” (minuto, hora, día de mes, mes o día de la semana)