Google Form: Importando datos en R y publicando resultados en AnalyStats-App

Categorías: R

Actualmente existen varios servicios de encuestas en la web que permiten crear formularios en línea de forma gratuita, sin embargo, hay un par de razones por las que los formularios de Google Forms (basados en hoja de cálculo) son más amigables y útiles que los otros.

En este post queremos mostrar la facilidad con que pueden ser importados en R datos de un formulario construido en Goolge Forms y simultáneamente publicar sus resultados en AnalyStats-App. Para esto el primer requisito es lógicamente tener un formulario creado, aquí, para dar ilustración, hemos creado un formulario con 6 variables que indagan sobre la intención de voto en las próximas elecciones presidenciales en Colombia (para mayor información sobre como crear formularios puede consultar aquí). Una vez se cuenta con un formulario creado, el paso a seguir sera crear una Hoja de repuestas, esto se puede realizar en el recuadro de respuestas del formulario, dando clic en recuadro de color verde que aparece en la parte superior derecha.

el siguiente paso ahora es obtener el link de descarga, para eso, se debe descargar la hoja de respuestas en la computadora (preferiblemente en formato csv)

una vez descargada la hoja de respuestas en la computadora es posible tener el link de descarga, basta con abrir la carpeta de descargas del navegador web y copiar el link.

Ahora, el siguiente paso es cargar los datos de nuestro formulario en R, para eso, hacemos uso de la librería RCurl

library(RCurl)
#URL es el link de descarga obtenido en el paso anterior
URL <- "LinkDeDescarga"
fileCSV <- getURL(URL,.opts=list(ssl.verifypeer=FALSE),.encoding='UTF-8')
MyDf <-  read.csv(textConnection(fileCSV))

Los datos almacenados son

#Damos nombres más cortos que faciliten la lectura
names(MyDf) <- c("Fecha", "Nacimiento","Genero", "Depto","Ha votado","Candidato")
head(MyDf)
##                 Fecha Nacimiento Genero           Depto Ha votado
## 1 17/07/2017 22:13:21 25/12/1988 Hombre           Cesar        Sí
## 2 17/07/2017 22:16:33 11/07/1985 Hombre    Cundinamarca        No
## 3 17/07/2017 23:10:16 26/11/1987  Mujer       Antioquia        Sí
## 4 17/07/2017 23:33:54            Hombre    Cundinamarca        Sí
## 5 17/07/2017 23:46:05  4/02/1983 Hombre         Córdoba        Sí
## 6 17/07/2017 23:58:41 16/06/1984 Hombre Valle del Cauca        Sí
##       Candidato
## 1 Gustavo Petro
## 2 Gustavo Petro
## 3 Claudia López
## 4 Claudia López
## 5 Claudia López
## 6 Claudia López

Así, los datos han quedado disponibles para ser analizados, por ejemplo, para hacer conteos de cada una de las variables.

library(tidyverse)
# Número de votos por Candidato
candidatos <- MyDf%>% 
              group_by(Candidato) %>% 
              count(Candidato, sort = TRUE)
candidatos
## # A tibble: 8 x 2
## # Groups:   Candidato [8]
##   Candidato                 n
##   <fct>                 <int>
## 1 Claudia López             6
## 2 Voto en blanco            4
## 3 Gustavo Petro             3
## 4 Sergio Fajardo            3
## 5 Germán Vargas LLeras      1
## 6 Iván Duque                1
## 7 Jorge Enrique Robledo     1
## 8 Piedad Córdoba            1
# Número de participantes por departamento
Deptos <- MyDf %>% 
          group_by(Depto) %>% 
          count(Depto, sort = TRUE)
Deptos
## # A tibble: 7 x 2
## # Groups:   Depto [7]
##   Depto               n
##   <fct>           <int>
## 1 Antioquia           8
## 2 Cundinamarca        6
## 3 Valle del Cauca     2
## 4 Atlántico:          1
## 5 Cesar               1
## 6 Córdoba             1
## 7 Santander           1
# Número de participantes por género
sexo <- MyDf %>% 
        group_by(Genero) %>% 
        count(Genero, sort = TRUE)
sexo
## # A tibble: 2 x 2
## # Groups:   Genero [2]
##   Genero     n
##   <fct>  <int>
## 1 Hombre    13
## 2 Mujer      7

todos los resultados pueden ser publicados en Analystats-App simultaneamente

# Url de la aplicación 
url<-"https://app.analystats.com/api/24421902328004610/topics/26/content/upload"

# Enviando los datos para app.analystats:
to_AnalyStats <- list( candidatos, Deptos,sexo)
r <- POST(url, body = to_AnalyStats, encode = "json",authenticate("User","pass"))

Cada vez que se corre el script de R los gráficos son actualizados con las nuevas respuestas. El tablero de control del formulario puede ser visto en www.analystats.com -> Go to demo -> DataFromGoogleSheet.

Traducciones

Ver también