Las encuestas son uno de los métodos más potentes de recopilación de información para investigaciones estadísticas y se han usado desde hace siglos para conocer gustos, hábitos, ideas y opiniones de ciertos sectores de la sociedad. Estas se han adaptado a la implantación de Internet y las han hecho más accesibles y con una capacidad mayor de difusión y alcance.

Una herramienta cuya finalidad es la generación de encuestas es Survey Monkey, que nos ofrece una gran cantidad de tipos de encuestas y la posibilidad de compartirlas con nuestros contactos.

Mediante las respuestas dadas en nuestra encuesta, podremos analizar y extraer información valiosa de los resultados obtenidos. Para ello nuestra intención es conocer como extraer la información de Survey Monkey mediante PowerBI, sin centrarnos en el desarrollo del panel de forma visual, pero aprendiendo a como acceder a la información de las encuestas.

Power BI proporciona una gran cantidad de conectores para obtener datos de muchos orígenes diferentes.Para conectarse, seleccionaremos “Get Data” y daremos en “More”. Observando la categoría de orígenes de datos “Online Services” podemos comprobar que no existe ningún origen de datos con conexión a Survey Monkey, por lo que tendremos que realizar la conexión programáticamente desde el Editor Avanzado de PowerBI

Survey Monkey proporciona para las cuentas Free el acceso a una API desde donde vamos a poder extraer la información que queramos para poder trabajar con ella.

El primer paso es acceder a la página destinada a desarrolladores, donde tendremos que crearnos un usuario para acceder a todo el contenido que nos ofrecen.

Una vez estemos logados y estemos dentro del portal, haremos lo siguiente:

  • En la barra superior: My Apps-> Create new app/Add new

Dentro de los tipos de aplicaciones podemos distinguir entre:

  • Private
  • Public

En nuestro caso vamos a crear una App Publica ya que tenemos un usuario con una cuenta Free por lo que no podremos crear aplicaciones privadas y no podremos acceder a nuestros datos mediante la API que nos facilitan.

Añadimos un nombre a la aplicación que estamos creando y la marcamos como Public.

Tras esto, en el siguiente panel le damos a Settings

  • Ponemos los Scopes a Required y damos a Update Scopes
  • En la parte donde pone Oauth redirect ponemos por ejemplo: https://www.google.com o la dirección de una web personal. (Si dejas la que viene por defecto dará error)
  • Por último, en la misma página aparece el apartado Credentials, ahí aparece el Access Token que se necesita.

Antes de terminar el proceso de creación, damos a Deploy y listo, tendriamos nuestra aplicación creada. 🙂

Una vez ya hemos creado la aplicación, podremos acceder al contenido que nos ofrece la API de Survey Monkey.

La API, nos ofrece una respuesta a las peticiones de los datos en formato Json, del cual extraeremos los datos en Power BI mediante el uso de Lenguaje M.

Pese a eso, con la finalidad de mostrar la estructura de datos devuelta por la API se ha extraído mediante el uso de un pequeño script en Python el contenido del Json.

#Importamos librerias/Import libraries
import requests
import json
from pprint import pprint

client = requests.session()
#Añadimos Access Token/Add Access Token
headers = {
"Authorization": "bearer %s" % "7zBBb12wP4WhvmtPMLiCmFi3omf2P8yIrrNvM5P9MPg7SDep4i4mamVCrm1qQNt39WhlFq5-CZt7Ll9he6FwLqqTmbvoKHXFk2UPIp7sTgNP4Jufv0.cxcf4lhnO7TcT",
"Content-Type": "application/json"
}
data = {}
HOST = "https://api.surveymonkey.net"
SURVEY_LIST_ENDPOINT = "/v3/surveys/150783550/pages/27080794/questions"

uri = "%s%s" % (HOST, SURVEY_LIST_ENDPOINT)
response = client.get(uri, headers=headers)
response_json = response.json()
pprint (response_json)

Y obtendremos como respuesta lo siguiente:

{'data': [{'heading': '¿Actualmente tienes\xa0perfiles en redes\xa0sociales?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69645571',
           'id': '69645571',
           'position': 1},
          {'heading': '¿Podrías marcar, entre las más conocidas en cuales te '
                      'encuentras?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69645974',
           'id': '69645974',
           'position': 2},
          {'heading': '¿Cuantas horas diarias dedicas a ellas?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69646312',
           'id': '69646312',
           'position': 3},
          {'heading': 'Has leído los\xa0<strong>Terminos y '
                      'Condiciones</strong> del Uso de tus datos personales?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69647012',
           'id': '69647012',
           'position': 4},
          {'heading': '¿Eres consciente\xa0de que muchas de estas\xa0'
                      'aplicaciones acceden a la localización,microfono y '
                      'cámara de tu dispositivo?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69647761',
           'id': '69647761',
           'position': 5},
          {'heading': 'Aplicaciones como\xa0Instagram "escuchan" en segundo '
                      'plano para ofrecerte publicidad personalizada, pudiendo '
                      'tener acceso a todas tus conversaciones privadas. ¿Es '
                      'este un aspecto que te incomoda y por el que dejarias '
                      'de usar la aplicación?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69648682',
           'id': '69648682',
           'position': 6},
          {'heading': 'A pesar\xa0de todos lo ocurrido con el caso Cambridge '
                      'Analytica y la compra de los datos de 87 millones de '
                      'usuarios de Facebook, seguirás usando las redes '
                      'sociales sin tomar las medidas oportunas para proteger '
                      'tu privacidad?',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69651677',
           'id': '69651677',
           'position': 7}],
 'links': {'self': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions?page=1&per_page=50'},
 'page': 1,
 'per_page': 50,
 'total': 7}

Conociendo ya la estructura, nos dirigiremos a Power BI para llevar a  cabo la extracción de los datos desde la herramienta.

Nos dirigiremos a “Get Data” y seleccionaremos “Blank Query”

Dentro de Blank Query, seleccionamos de la barra superior “Advanced Editor”.

Dentro del advanced Editor desarrollaremos el siguiente Script:

En el siguente código se hace la llamada a la API con la autentificación del Access Token.

Atacaremos sobre «v3/surveys/150783550/pages/27080794/questions», donde están contenidas las características de las preguntas de la encuesta (Id, formato, longitud, etc).

let
    Source = Json.Document(Web.Contents("https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions", 
    [Headers=[Authorization="bearer 7zBBb12wP4WhvmtPMLiCmFi3omf2P8yIrrNvM5P9MPg7SDep4i4mamVCrm1qQNt39WhlFq5-CZt7Ll9he6FwLqqTmbvoKHXFk2UPIp7sTgNP4Jufv0.cxcf4lhnO7TcT"]])),
    data = Source[data],
       data1  = data{0},
        datah=data1[heading],
       data21  = data{1},
        datah2=data21[heading],
       data31  = data{2},
        datah3=data31[heading],
       data41  = data{3},
        datah4=data41[heading],
       data51  = data{4},
        datah5=data51[heading],
       data61  = data{5},
        datah6=data61[heading],
       data71  = data{6},
        datah7=data71[heading],


    #"Converted to Table"=Table.FromRows({{datah},{datah2},{datah3},{datah4},{datah5},{datah6},{datah7}}),
    #"Replaced Value" = Table.ReplaceValue(#"Converted to Table","<strong>","",Replacer.ReplaceText,{"Column1"})
in
    #"Replaced Value"

Mediante el siguiente Script, siendo este de dificultar básica, obtendremos los enunciados de las preguntas contenidas en una encuesta.

Tras esto, pincharemos en “Cloase and Apply”

Añadiremos un título a la tabla que saldrá como resultado y obtendremos lo siguiente:

Además de esto, existen muchas rutas diferentes desde donde podremos sacar diferente información. A continuación, se mostrará una tabla con las diferentes rutas que podemos usar y que nos han parecido más útiles y qué podremos sacar de ellas.

URL Des Datos
https://api.surveymonkey.com/v3/surveys Listado de nuestras encuestas, desde aquí podremos obtener los Id de cada una de ellas “Id”
https://api.surveymonkey.com/v3/surveys/{survey_id}/details Obtenemos las características generales de nuestra encuesta “Title”.”Language”,”Questions count”
https://api.surveymonkey.com/v3/surveys/{survey_id}/pages/{page_id} Obtenemos la información de cada una de las páginas que forma nuestra encuesta “title”,”Description”,”id”(id de la pagina)
https://api.surveymonkey.com/v3/surveys/{survey_id}/pages/{page_id}/questions Obtenemos cada una de las preguntas y el id de cada una de ellas sobre la pagina en la que nos encontremos mediante el Id “Heading”
https://api.surveymonkey.com /v3/surveys/150783550/pages/27080794/rollups Obtenemos la respuesta de cada una de las preguntas answered”,”choices”,”stats”,”id”,Skiped”
https://api.surveymonkey.com/v3/groups/{group_id}/members Obtenemos cada uno de los usuarios que han participado en la encuesta “Id”,”username”

 

 

 

 

 

 

 

 

 

Podemos encontrar más información en :https://developer.surveymonkey.com/api/v3/
Por ejemplo, desde : /v3/surveys/150783550/pages/27080794/rollups , donde  es el ID de la encuesta podemos sacar la información de las respuestas obtenidas, tanto cantidad, como las selecciones realizadas.

{'data': [{'family': 'single_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69645571/rollups',
           'id': '69645571',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 4, 'id': '552798254'},
                                    {'count': 0, 'id': '552798255'}],
                        'skipped': 0,
                        'stats': {'max': 1,
                                  'mean': 1.0,
                                  'median': 1.0,
                                  'min': 1,
                                  'std': 0.0}}]},
          {'family': 'multiple_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69645974/rollups',
           'id': '69645974',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 3, 'id': '552803126'},
                                    {'count': 1, 'id': '552803127'},
                                    {'count': 2, 'id': '552803128'},
                                    {'count': 4, 'id': '552803129'}],
                        'skipped': 0,
                        'stats': {'max': 4,
                                  'mean': 2.7,
                                  'median': 3.0,
                                  'min': 1,
                                  'std': 1.268857754}}]},
          {'family': 'open_ended',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69646312/rollups',
           'id': '69646312',
           'subtype': 'single',
           'summary': [{'answered': 4, 'skipped': 0, 'text': 4}]},
          {'family': 'single_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69647012/rollups',
           'id': '69647012',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 2, 'id': '552811375'},
                                    {'count': 2, 'id': '552811376'},
                                    {'count': 0, 'id': '552811377'}],
                        'skipped': 0,
                        'stats': {'max': 2,
                                  'mean': 1.5,
                                  'median': 1.5,
                                  'min': 1,
                                  'std': 0.5}}]},
          {'family': 'single_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69647761/rollups',
           'id': '69647761',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 4, 'id': '552816729'},
                                    {'count': 0, 'id': '552816730'}],
                        'skipped': 0,
                        'stats': {'max': 1,
                                  'mean': 1.0,
                                  'median': 1.0,
                                  'min': 1,
                                  'std': 0.0}}]},
          {'family': 'single_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69648682/rollups',
           'id': '69648682',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 3, 'id': '552822195'},
                                    {'count': 1, 'id': '552822197'},
                                    {'count': 0, 'id': '552822199'}],
                        'skipped': 0,
                        'stats': {'max': 2,
                                  'mean': 1.25,
                                  'median': 1.0,
                                  'min': 1,
                                  'std': 0.4330127019}}]},
          {'family': 'single_choice',
           'href': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/questions/69651677/rollups',
           'id': '69651677',
           'subtype': 'vertical',
           'summary': [{'answered': 4,
                        'choices': [{'count': 2, 'id': '552843947'},
                                    {'count': 2, 'id': '552843948'}],
                        'skipped': 0,
                        'stats': {'max': 2,
                                  'mean': 1.5,
                                  'median': 1.5,
                                  'min': 1,
                                  'std': 0.5}}]}],
 'links': {'self': 'https://api.surveymonkey.net/v3/surveys/150783550/pages/27080794/rollups?page=1&per_page=50'},
 'page': 1,
 'per_page': 50,
 'total': 7}

Con ello mostramos la finalidad de encontrar un método  directo de extracción y explotación de datos de Survey Monkey mediante el uso de Power BI, sin necesidad de depender de herramientas de terceros ni realizar exportaciones a otros tipos de datos y todo esto usando una cuenta Free.

Cristian Tomás Sáez
Últimas entradas de Cristian Tomás Sáez (ver todo)