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 tienesxa0perfiles en redesxa0sociales?', '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 losxa0<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 conscientexa0de que muchas de estasxa0' '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 comoxa0Instagram "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 pesarxa0de 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.
2 comments
Hola, me da el siguiente error, me podrías ayudar a solucionarlo por favor
DataSource.Error: Web.Contents failed to get contents from ‘https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions’ (404): Not Found
Details:
DataSourceKind=Web
DataSourcePath=https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions
Url=https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions
Hola estimado, me surge el siguente problema:
DataSource.Error: Web.Contents failed to get contents from ‘https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions’ (404): Not Found
Details:
DataSourceKind=Web
DataSourcePath=https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions
Url=https://api.surveymonkey.com/v3/surveys/150783550/pages/27080794/questions
Me podrias ayudar porfavor.