G UÍA DE I NICIACIÓN A LOS DATOS DE E DX
1. Introducción
Esta guía está dirigida a todo aquel que requiera información sobre los registros creados por la plataforma edX. En esta guía se resumen los conocimientos básicos necesarios para tratar los datos de edX generados de los MOOCs, creados por la Unidad de Tecnologías para la Información UAMx e impartidos por la Universidad Autónoma de Madrid (UAM).
Comenzaremos definiendo varios conceptos relacionados, veremos los ficheros de datos y sus contenidos, haciendo referencia a la documentación existente dónde se pueden hallar más detalles sobre los mismos.
En general, podemos encontrar toda la documentación de edX sobre la investigación de datos en el siguiente enlace: http://edx.readthedocs.io/projects/devdata/en/latest/
También es posible encontrar más información de interés en edX Insights.
http://edx.readthedocs.io/projects/edx-insights/en/latest/index.html#using-edx-insights
2. Conceptos básicos
En esta guía se da por hecho que el lector ya conoce el funcionamiento de la plataforma edX desde el punto de vista de un estudiante. Si no es así, recomendamos inscribirse y realizar el curso Demo de edX (https://www.edx.org/course/demox-edx-demox-1) o consultar su documentación (http://edx-guide-for-students.readthedocs.io/en/latest/), para familiarizarse con la estructura de aprendizaje secuencial que sigue la filosofía de edX.
Según edX, los representantes responsables de manejar los datos de los cursos se denominan Data Czar. Estos deberían estar familiarizados con el manejo de archivos CSV, hojas de cálculo, JSON, etc. para el manejo masivo de datos.
3. Ficheros de datos
A continuación, se listan los archivos que proporciona UAMx, posteriormente se detallan los registros de cada uno de ellos. Cada curso dispone de los siguientes archivos separados por ediciones:
COURSE: contiene la información general del curso.
- <id_curso>-course_structure-prod-analytics.json Estructura del curso en formato json.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/course_
structure.html
- <id_curso>-student_courseenrollment-prod-analytics.sql Alumnos matriculados.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/sql_sch ema.html#columns-in-the-student-courseenrollment-table
CSV: contiene datos anonimizados en formato CSV del perfil de los usuarios, la generación de certificados y el contenido de los foros.
- Profile<id_curso>.csv (Anonimizado) / <id_curso>-auth_userprofile-prod- analytics.sql (Original)
Perfil de los usuarios, anonimizado.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/sql_sch ema.html#columns-in-the-auth-userprofile-table
- Certificates<id_curso>.csv (Anonimizado) / <id_curso>- certificates_generatedcertificate-prod-analytics.sql (Original) Generación de certificados, anonimizado.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/sql_sch ema.html#certificate-data
- Social<id_curso>.csv (Anonimizado) / <id_curso>-prod.mongo (Original) Comentarios de los foros, anonimizado.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/discussi on_data.html
EVENTOS: logs diarios de las interacciones de los usuarios anonimizados.
Para más información consultar:
http://edx.readthedocs.io/projects/devdata/en/latest/internal_data_formats/tracking_log s.html
4. Registros
En este apartado, se detallan los ficheros originales que el sistema registra. A partir de estos ficheros es necesario considerar qué campos pueden contener información sensible.
Para cada uno de los campos se pueden realizar tres opciones:
Si el campo no contiene información sensible, dejarlo tal y como está.
Si el campo contiene información sensible, encriptar o sustituir la información para que se pueda agrupar por ese campo pero no se pueda identificar la misma.
Si el campo contiene información sensible, eliminar el campo para que no se pueda agrupar por ese campo ni acceder a la información.
La información presentada a continuación se estructura de la siguiente manera: primero el título del fichero. A continuación, una breve descripción del mismo. Seguida de la información de los campos que lo componen. Luego se muestra un ejemplo de una entrada del fichero. Y por último, se propone qué se puede hacer con los campos que se consideran sensibles.
USER_ID_MAP
Este fichero sirve como información auxiliar para relacionar el código hash asignado al id y al nombre de usuario de cada usuario registrado en el curso.
Campos
Hash_id: código hash que identifica a un usuario.
Id: identificador numérico de cada usuario
Username: nombre de usuario.
Ejemplo
hash_id id username
e4010105de5ed48a4d4547ee72b707a8 1490478 KristerEdx
Propuesta
Este fichero es de uso interno y nunca se proporcionará a los profesores. Contiene la correspondencia entre el username (que consideramos debe permanecer anónimo y por lo tanto no debe ser revelado) y el código id, también llamado en otros ficheros user_id (y que sin la información de username no permite identificar al usuario).
EVENTS
Este fichero se obtiene a partir de la composición de varios ficheros. En él mismo se almacena información relacionada a los eventos generados durante el uso de la plataforma por parte de los estudiantes.
Campos
Username: nombre del usuario que origina el evento generado.
Event_type: indica el tipo de evento lanzado. Tiene la siguiente estructura:
/courses/[identificador del curso]/[tipo de evento]
Ej: /courses/course-v1:UAMx+Android301x+3T2015/info
IP: contiene la dirección ip del usuario desde el que se realiza la actividad.
Ej: 150.244.208.55
Agent: especifica el navegador web desde el que se está realizando la actividad.
Ej: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0 Gecko/20100101 Firefox/41.0
Host: el host es el servidor que provee de servicio al resto de ordenadores conectados.
En este caso siempre va a ser “courses.edx.org”.
Referer: indica la dirección del curso en cuestión.
Ej: https://studio.edx.org/course/course-v1:UAMx+Android301x+3T2015
Accept_language: proporciona información sobre el idioma en el que el usuario está realizando la actividad.
Ej: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Event: contiene información específica del evento que se está realizando.
Ej. 1: {\"POST\": {}, \"GET\": {}}
Ej. 2: {"course_id": "course-v1:UAMx+Android301x+3T2015", "user_id":
8530682, "mode": "honor"}
Event_source: indica quien ha procesado la actividad. Puede ser:
o ‘browser’
o ‘mobile’
o ‘server’
o ‘task
Context: contiene información más específica del evento. Está compuesta por los siguientes campos:
o User_id: identificador del usuario que está realizando la acción.
o Org_id: organización responsable de los eventos. En este caso siempre va a ser
“UAMx”
o Course_id: identificador del curso desde el que se está realizando la actividad.
o Path: es la url que genera el evento.
Ej: {"course_user_tags": {}, "user_id": 6348688, "org_id": "UAMx", "course_id":
"course-v1:UAMx+Android301x+3T2015", "path": "/courses/course- v1:UAMx+Android301x+3T2015/info"}
Time: fecha y hora del momento en el que se produce el evento.
Ej: 2015-10-05T14:48:04.482163+00:00
Page: es un campo para eventos de vídeo que han sido generados desde dispositivos móviles. Identifica la URL del componente de vídeo.
Ej:"http://courses.edx.org/courses/edX/DemoX/Demo_Course/courseware/d8 a6192ade314473a78242dfeedfbf5b/edx_introduction"
Name: identificador del evento disparado.
Ej: “edx.course.enrollment.activated”
Session: valor de 32 caracteres que identifica la sesión del usuario.
Ej: "4abde8fe1ac9959de16e1d0aa462ebbb"
Para una explicación más extensa y detallada es recomendable visitar la documentación original:
http://docstrings.readthedocs.io/en/latest/internal_data_formats/tracking_logs.html#commo n-fields
Ejemplo
No se incluye aquí pues se han ido detallando en cada uno de los campos
Propuesta
1. Sustituir el valor de username por el identificador numérico de usuario (campo id del fichero anterior, USER_ID_MAP)
2. Encriptar la dirección IP utilizando el algoritmo de reducción criptográfico MD5 3. Dejar el resto de campos como están
AUTH_USER
Este fichero muestra información sobre los usuarios que tienen acceso un curso específico.
Campos
Id: identificador único de un usuario.
o Ej: 1490478
Username: Nombre elegido por el usuario.
o Ej: KristerEdx
first_name: Nombre del usuario o Ej: Krister
last_name: Apellido del usuario o Ej: Svensson
email: Correo del usuario o Ej: [email protected]
password: indica la contraseña del usuario. Este campo está vacio.
is_staff: Indica si un usuario es staff o no. Se representa con un ‘1’ si lo es y con un ‘0’
en caso contrario.
is_active: Indica si un usuario ha activado su cuenta a través del correo de activación enviado por edx. El valor de éste campo se pondrá a ‘1’ si el usuario ha llevado a cabo la activación y ‘0’ en caso contrario.
is_superuser: Indica si un usuario es un usuario con privilegios. Se representa con un
‘1’ si lo es y con un ‘0’ en caso contrario.
last_login: Campo que indica el último momento en el que se ha identificado en la plataforma
o Ej: 2016-05-05 14:31:59.722332
date_joined: indica la fecha en la que el usuario se registró en la plataforma o Ej: 2013-03-27 17:19:57
Las siguientes columnas, aunque aparezcan en el fichero de registro son obsoletas. A partir del 2012 se dejó de recoger información sobre ellas por lo que los campos se muestran vacíos:
status
email_key
avatar_type
country
show_country
date_of_birth
interesting_tags
ignored_tags
email_tag
filter_strategy
display_tag_filter_strategy
consecutive_days_visit_count
Ejemplo
id username first_name last_name email password is_staff is_active
is_superuser last_login date_joined status email_key avatar_typ country show_country date_of_birth interesting_tags ignored_tags email_tag_filter_strategy display_tag_filter_strategy
consecutive_days_visit_count
9999999 AAAAAAAAA AAAAAA AAAAAA 1 1 0 2014-01-01 17:28:27 2012- 03-04 00:57:49 NULL 0 NULL 0 0
Propuesta
1. Eliminar:
a. username b. first_name c. last_name d. email e. password
2. Dejar el resto de campos como están
AUTH_USERPROFILE
Este fichero almacena datos demográficos de los usuarios.
Campos
Id: es la clave primaria del registro, no hace referencia a nada.
user_id: identificador del usuario.
name: Nombre completo de un usuario.
language: Campo no usado
location: Campo no usado
meta: Campo opcional con infomación en formato JSON. Permite asociar metainformación con cada usuario.
courseware: Campo no usado.
gender: Indica el género del usuario. Puede ser ‘f’ para el género femenino, ‘m’
masculino, ‘o’ para otro o no especificado, ‘(blank)’ para los usuarios que no especifican su género y NULL para los usuarios que no respondieron a esta cuestión, o para los que se registraron antes de que pidiesen esta información.
mailing_address: Campo no usado.
year_of_birth: Fecha de nacimiento.
level_of_education: Nivel educativo
goals: En este campo, se introduce el motivo por el que el usuario ha querido registrarse en la plataforma. Esta información se recoge durante el registro.
allow_certificate: Está siempre a ‘1’.
country: Indica mediante dos caracteres, el país de procedencia del usuario.
city: Campo vacío.
bio: Almacena información comentada sobre la biografía del usuario ingresada por el mismo.
profile_image_uploaded_at: Indica la fecha y la hora en la que el usuario subió una foto de perfil.
Ejemplo
id user_id name language location meta courseware gender
mailing_address year_of_birth level_of_education goals allow_certificate
country city bio profile_image_uploaded_at
9999999 AAAAAAAA AAAAAAAAA English MIT {"old_emails":
[["[email protected]", "2012-11-16T10:28:10.096489"]], "old_names":
[["BBBBBBBBBBBBB", "I wanted to test out the name-change functionality",
"2012-10-22T12:23:10.598444"]]} course.xml NULL NULL NULL NULL NULL
1 NULL Hi! I'm from the US and I've taken 4 edX courses so far.
I want to learn how to confront problems of wealth inequality. 2016- 04-19 16:41:27
Propuesta
1. Eliminar:
a. name
b. mailing_address
2. Los siguientes campos pueden ser útiles para las investigaciones pero desconocemos hasta qué punto se puede dejar el valor de gender, year_of_birth, level_of_education, country y bio como está o es necesario eliminarlos.
3. Dejar el resto de campos como están
CERTIFICATES_GENERATEDCERTIFICATE
Este fichero almacena el estado de los certificados y la nota final que ha sacado cada usuario en el curso.
Campos
Id: clave primaria de la tabla. No contiene información relevante.
user_id: identificador del usuario.
download_url: contiene la URL completa para acceder al certificado.
grade: calificación que ha obtenido el usuario en el curso
course_id: identificador del curso.
key: campo usado de forma interna por edX. Lo utilizan para unir las peticiones del servidor con las respuestas enviadas por LMS (herramienta que usan los estudiantes para acceder al contenido del curso).
distinction: campo no usado.
status: una vez que el curso ha sido evaluado, y los certificados han sido emitidos, el campo puede obtener los siguientes valores:
o downloadable
o audit_passing
o notpassing
o audit_notpassing
verify_uuid: código hash que verifica la validación del certificado.
download_uuid: código hash que identifica al usuario del certificado.
name: almacena el nombre del estudiante.
created_date: fecha en la que el registro de la tabla ha sido creado.
modified_date: fecha en la que el registro de la tabla ha sido modificado.
error_reason: usado de forma interna por edX. Indica logs de mensajes que son usados para corregir errores si el proceso de generación del certificado falla.
mode: Indica el modo en el que el usuario está siguiendo el curso.
Ejemplo
id user_id download_url grade course_id key distinction status verify_uuid download_uuid name created_date modified_date error_reason mode
15906225 29298 0.0 course-v1:UAMx+Equidad801x+1T2016 0
notpassing Alan Omar Torres Lopez 2016-05-03 19:58:21
2016-05-03 19:58:21 honor
Propuesta
1. Dejar los campos como están
PROD.MONGO
Este fichero muestra una descripción sobre los comentarios (Comment) o los hilos que siguen un comentario (CommentThread).
Campos
_id: Identificador único generado automáticamente por la base de datos MongoDB.
_type: Puede tener dos valores posibles, ‘Comment’ y ‘CommentThread’.
anonymous: Si el valor está a true, el comentario ha sido publicado como anónimo.
Anonymous_to_peers: Si el valor está a true, el mensaje será publicado como anónimo para los usuarios, pero el equipo organizador del curso podrá ver el nombre del usuario.
At_position_list: campo no usado.
Author_username: es el nombre de usuario de la persona que ha escrito una discusión o un comentario.
Body: texto del comentario que haya escrito un usuario.
Course_id: identificador del curso donde se ha escrito el comentario.
Created_at: fecha en la que se ha creado el comentario.
Update_ad: fecha en la que se ha actualizado el comentario.
Votes: indica las votaciones positivas y negativas que ha recibido cada comentario.
Closed: si este campo se encuentra a true, significa que el hilo del comentario ha sido cerrado por el moderador o el administrador.
Comment_count: indica el número de comentarios que contestan a uno en específico.
Commentable_id: este campo permite asignar un comentario o un hilo de comentarios a una categoría específica del curso.
Last_activity_at: indica la última fecha en la que ha habido alguna actividad en un hilo de comentarios.
Tags_array: campo no usado.
Title: título del hilo.
Thread_type: indica el tipo de hilo del que se trata. Pudiendo ser una pregunta o una discusión.
Visible: no usado.
Abuse_flaggers: almacena el id del usuario que ha seleccionado la opción de reportar un incidente en un comentario.
Historical_abuse_flagger: si el moderador del curso desactiva la opción de reportar un incidente, los id´s de abuse_flaggers son eliminados y movidos a este campo.
Endorsed: indica la fecha y el id del usuario que ha contestado a un comentario.
Comment_thead_id: identificador si un comentario pertenece a un hilo de comentarios.
Parent_ids: contiene el id del comentario al que un usuario ha contestado.
Sk: número generado de forma aleatoria para mejorar el rendimiento en el uso online de la plataforma.
Ejemplo
{"_id":{"$oid":"5706c135209a65051e00003b"},"votes":{"up":[],"down":[],"up_count":0,"down _count":0,"count":0,"point":0},"visible":true,"abuse_flaggers":[],"historical_abuse_flaggers":[],
"_type":"CommentThread","thread_type":"discussion","context":"course","comment_count":
0,"at_position_list":[],"title":"Equidad y situación actual","body":"Para el caso de Honduras La tasa neta de cobertura de los niveles 0 - 2 alcanza hasta un 90%. Sin embargo la problemática de acceso según la Secretaría de Educación, 2015 comienza a descender en el tercer nivel llegando hasta un 26.2%, por tanto en el sexto apenas se logra una cobertura del 15%
información compartida por la Dirección de Educación Superior.\n\nEn el nivel 6 para el año 2013 alrededor de 1.15 millones de jóvenes entre 18 a los 24 años, apenas 183,626 mil asistieron a un centro de educación superior, siendo aislados 975,000 ese año la tasa de cobertura neta alcanza solamente un 15.8% (Dirección de Educación Superior, 2015) .\n\nPara el caso de las mujeres el Instituto Nacional de Estadísticas de Honduras (INE) señala que 1,542,947 mujeres se encuentran entre los 0 a 14 años; pero de estas pequeñas hondureñas, La Tasa de Cobertura Escolar a nivel nacional es del 56.9 por ciento para las mujeres y de 57.8 para los hombres. Esta información se extiende en otros ámbitos políticos y económicos.\nSolís \u0026 Moncada explican \"Es claro que la igualdad de acceso no es suficiente para garantizar la calidad educativa sino se proporcionan programas de similar calidad a todos\" en especial cuando al analizar los datos estadísticos la evidencia señala que el aprendizaje tanto en instituciones privadas como en públicas no tienen una diferencia significativa .\nInterprétese lo anterior en la elección educativa de los padres que por su condición socioeconómica prefieren elegir el sector privado, no necesariamente van a existir diferencias significativas a excepción del idioma que en términos prácticos eso es lo que están pagando, a pesar que en el sector público se tienen menos recursos e infraestructura en beneficio de los estudiantes.\n","course_id":"course- v1:UAMx+Equidad801x+1T2016","commentable_id":"2a839d149b80b49f0bf47872e7aa8fc5c3 96e661","anonymous":false,"anonymous_to_peers":false,"closed":false,"author_id":"8606268
","author_username":"RinaMunguia","updated_at":{"$date":"2016-04- 07T20:21:09.553Z"},"created_at":{"$date":"2016-04-
07T20:21:09.553Z"},"last_activity_at":{"$date":"2016-04-07T20:21:09.553Z"}}
Propuesta
1. Sustituir el valor de Author_username por el identificador numérico de usuario (campo id del fichero anterior, USER_ID_MAP)
2. Desconocemos hasta qué punto se puede dejar el valor del campo Body como está o es necesario eliminarlo.
3. Dejar el resto de campos como están
COURSE_STRUCTURE
Fichero usado para almacenar la estructura del curso.
Campos
Category: indica la categoría de cada elemento del curso. Puede ser ‘chapter’, ‘course’,
‘discussion’, ‘html’, ‘problem’, ‘sequential’, ‘vertical’ o ‘video’.
Children: identifica el modulo al que pertenece el elemento del curso.
Metadata: campo del tipo clave-valor que describe configuración definida en el curso y cada uno de los módulos que lo contiene.
Course_data: describe una lista con todas las secciones definidas en el curso.
Ejemplo
"block-
v1:UAMx+Equidad801x+1T2016+type@chapter+block@6d023bde7bbd427bb88f2636f89278d 3": {
"category": "chapter", "children": [
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@dcbe146cd880453ca613c2de81e2e 39b",
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@8bd8cc5779894028a016e2e6b4331 242",
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@eecb172143e640cc9b4481a21912b b93",
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@7430ca37be74442fa02ac1d77057c ab6",
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@78bf4355a9104d4d8a7b6491c4f77 9e3",
"block-
v1:UAMx+Equidad801x+1T2016+type@sequential+block@b6838db3dd2042f9b0dc71bccdd25 d3c"
],
"metadata": {
"display_name": "6. Hacia escuelas y sociedades m\u00e1s inclusivas", "start": "2016-04-05T00:00:00Z"
} }
Propuesta
1. Dejar los campos como están
STUDENT_COURSEENROLLMENT
En este fichero, cada registro que se genere representa a un usuario matriculado en el curso.
Campos
Id: Clave primaria de la tabla.
user_id: id del usuario matriculado.
course_id: id del curso al que el usuario se ha registrado.
Created: Almacena la fecha y la hora en la que el registro ha sido creado.
is_active: Indica si el registro ha sido confirmado y activado.
Mode: indica el modo en el que se ha registrado el usuario.
Ejemplo
id user_id course_id created is_active mode
1135683 9999999 edX/DemoX/Demo_course 2013-03-19 17:20:58 1 honor
Propuesta
1. Dejar los campos como están
Los datos de la que dan en lesta parte de la información