Commit bae9fe8c authored by Ronald Perez's avatar Ronald Perez

Archivos fuentes de scrpts English

parent 7acb517e
#!/usr/bin/env python3
#load user list and fine grained activities
# Este script permite mapear la infomración recuperada de los reportes de Cousera y crear los archivos:
# 1) Recursos academicos definidos en cada curso (Resources_nombreCurso)
# 2) Ediciones abiertas en cada curso (Editions_nombreCurso)
# 3) Estudiantes matriculados (Students_nombreCurso)
# Este script toma la informacion desde el informe provisto por Coursera.
#IMPORTE DE LIBRERIA NECESARIA PARA LA LECTURA DE LOS ARCHIVOS, EN ESTE CASO .CSV
import pandas as pd
#IMPORTE DE LIBRERIA PARA UBICAR LAS RUTAS DE LOS ARCHIVOS
import os
# SE DEFINE UN ARREGLO DE CURSO CON LOS CURSOS POSIBLES A ANALIZAR
cursos=['aula_constructivista','gestion_organizaciones','electrones','analisis_transporte',
'gestion_proyectos','silicon_valey','equilibrio','energia_sustentable','gestion_empresarial',
'python','demanda_transporte','web_semantica', 'liderazgo_educativo']
# SE SELECCIONAR EL INDICE DEL CURSO A ANALIZAR
curso_path=cursos[0]
# Establece la carpeta de origen de los archivos csv descargados de Coursera
path_lectura = '/media/ronald/9fc4d5f6-ed17-4e71-a9f3-481527644bf5/datosCoursera/'+curso_path+'/'
# SE DEFINE LA RUTA DONDE SE GUARDARAN LOS ARCHIVOS GENERADOS
path_escritura = '/media/ronald/9fc4d5f6-ed17-4e71-a9f3-481527644bf5/datosCoursera/data/'
# SE DEFINE LA RUTA DE ORIGEN DONDE SE ENCUENTRAN LOS ARCHIVOS A LEER
os.chdir(path_lectura)
# Función para valores de la columna de course_item_type_category por valores acordes a las rutas o URL
def convert_items_types(cell):
if cell=="quiz":
return 'exam'
else:
if cell == " ":
return 'otros'
return cell
def ajustar_numero_foro (cell):
return int(cell)-1
##################### CARGA DE ARCHIVOS PARA OBTENER INFORMACIÓN DEL ESTADO DEL ESTDUDIANTE EN EL CURSO (COMPLETE O NO COMPLETE) #############################
course_grades = pd.read_csv('course_grades.csv', usecols=['course_id','ucchile_user_id','course_grade_ts','course_passing_state_id'])
##################### CARGA DE ARCHIVOS PARA OBTENER LOS RECURSOS DEL CURSO #############################
course_items = pd.read_csv('course_items.csv', usecols=['course_lesson_id','course_item_type_id','course_item_id','course_id','course_item_order','course_item_name'])
course_item_types = pd.read_csv('course_item_types.csv', usecols=['course_item_type_id','course_item_type_category'], converters={
'course_item_type_category': convert_items_types
})
course_lessons = pd.read_csv('course_lessons.csv', usecols=['course_lesson_id','course_lesson_order','course_module_id'])
course_modules = pd.read_csv('course_modules.csv', usecols=[0,1,2], quotechar='"', escapechar='\\', error_bad_lines=False)
course_foros = pd.read_csv('discussion_course_forums.csv', usecols=['discussion_forum_id','course_branch_id','discussion_course_forum_title','discussion_course_forum_order'], converters={
'discussion_course_forum_order': ajustar_numero_foro
} )
##################### CARGA DE ARCHIVOS PARA OBTENER LAS EDICIONES EN QUE SE HA OFRECIDO EL CURSO #############################
on_demand_sessions = pd.read_csv('on_demand_sessions.csv', usecols=['course_id','on_demand_session_id','on_demand_sessions_start_ts','on_demand_sessions_end_ts','on_demand_sessions_enrollment_end_ts'])
##################### CARGA DE ARCHIVOS PARA OBTENER LOS ESTUDIANTES DEL CURSO #############################
users = pd.read_csv('users.csv', usecols=['ucchile_user_id','country_cd'])
course_memberships= pd.read_csv('course_memberships.csv',usecols=['ucchile_user_id','course_membership_ts'])
# SELECT u.ucchile_user_id as id_user_lms, cg.course_id as id_course_lms, cg.course_grade_ts as date_completed
# FROM public.users as u
# INNER JOIN course_grades cg ON (u.ucchile_user_id=cg.ucchile_user_id)
# where (cg.course_passing_state_id=1 or cg.course_passing_state_id=2) order by cg.course_grade_ts ASC
################################## MANIPULAR DATOS PARA GENERAR LOS RECURSOS DEL CURSO ################################################
#
#print (users_state.columns)
### Se hacen los JOIN de los archivos necesarios para extraer la información
#users_grades = pd.merge(users,course_grades[['ucchile_user_id','course_passing_state_id']], on = 'ucchile_user_id', how = 'inner')
items_types = pd.merge(course_items , course_item_types, on= 'course_item_type_id', how='inner')
items_types_lesson= items_types.merge(course_lessons, on='course_lesson_id', how='inner')
items_types_lesson_modules= items_types_lesson.merge(course_modules, on='course_module_id', how='inner')
# Se ordenan las filas para dejar el modulO cero en las primeras filas
items_types_lesson_modules.sort_values(['course_module_order', 'course_item_id'], inplace = True)
# Se crea un dataFrame con la tabla resultante de los JOIN
tableJOIN = pd.DataFrame(items_types_lesson_modules)
# RENOMBRAMOS LAS COLUMNAS PARA AJUSTAR LOS NOMBRES A LOS NOMBRES USADOS EN NOTEMYPROGRESS
resources= tableJOIN.rename(index=str, columns={"course_id_x":"course_id_lms","course_item_id":"resource_id_lms","course_item_order":"sequence",
"course_lesson_order":"section","course_module_order":"modulo","course_item_name":"name","course_item_type_category":"type"})
## GENERAR EL DATAFRAME PARA LOS FOROS
id_resources_lms= course_foros['discussion_forum_id'].values.tolist()
course_id_lms = course_foros['course_branch_id'].values.tolist()
names = course_foros['discussion_course_forum_title'].values.tolist()
modules = course_foros['discussion_course_forum_order'].values.tolist()
sequences = []
sections = []
types_foros = []
for pos in id_resources_lms:
sequences.append(-1)
sections.append(-1)
types_foros.append('discussions')
# foros_item = {}
# foros_item['course_id_lms']=id_resources_lms
# foros_item['resource_id_lms']
foros_items= pd.DataFrame({'course_id_lms':course_id_lms,
'resource_id_lms':id_resources_lms,
'name':names,
'sequence':sequences,
'section':sections,
'modulo':modules,
'type':types_foros})
resources_foros = pd.concat([resources,foros_items])
#logSRL['courseId'] = course_progress['course_id'][0]
#### Se crear un arreglo de las categorias de Coursera para generar las categorias definidas en la herramienta
#types = items_types_lesson_modules['course_item_type_category'].values.tolist()
types = resources_foros['type'].values.tolist()
print (types)
# DEFINIR COLUMNAS PARA LAS CATEGORIAS Y LA DURACIÓN DE LA ACTIVIDAD, QUE NO EXISTEN EN COURSERA
# LA DURACIÓN SE ESTABLE EN CERO PARA TODAS LAS ACTIVIDADES
categories=[]
duration=[]
# CICLO PARA RECORRER LOS TIPOS Y ASIGNAR UNA CATEGORIA A CADA TIPO
for tipo in types:
duration.append(0)
if tipo in ['supplement']:
categories.append("Complementos")
print("hola")
else:
if tipo in ['peer','feedback','review','exam','programming']:
categories.append("Evaluaciones")
else:
if tipo=='lecture':
categories.append("Videos")
else:
if tipo == 'discussions':
categories.append("Foros")
# SE AGREGAR LAS COLUMNAS AL DATAFRAME
# resources['category'] = categories
# resources['duration'] = duration
resources_foros['category'] = categories
resources_foros['duration'] = duration
# SE OBTIENE EL ID DEL CURSO PARA CREAR 4 NUEVAS FILAS DE RECURSOS QUE NO EXISTEN EN LAS TABLAS DE COURSERA
# Estas lineas se comenta dado que estas actividades son generales, y es mejor que se agreguen como actividades
# diractamenta a la base de datos de los recursos.
#course_id_lms=resources_foros["course_id_lms"][0]
# SE CREA UN NUEVO DATAFRAME CON LAS FILAS NECESARIAS
#df=pd.DataFrame({'course_id_lms':[course_id_lms,course_id_lms,course_id_lms,course_id_lms],
# 'resource_id_lms':["none","none","none","none"],
# 'name':["welcome","info","week","otros"],
# 'sequence':[-1,-1,-1,-1],
# 'section':[-1,-1,-1,-1],
# 'modulo':[-1,-1,-1,-1],
# 'type':["info","info","info","procrastination"],
# 'category':["complementos","complementos","complementos","otros"],
# 'duration':[0,0,0,0],})
#print (df)
# SE CREA UN NUEVO DATAFRAME CONCATENANDO LAS FILAS NUVEVAS Y ELIMINANDO LAS COLUNMAS INNECESARIAS
#resources_concat=pd.concat([resources_foros,df])
# SE CREAR EL ARCHIVOS DE RECURSOS
os.chdir(path_escritura)
name_file='Resources_'+curso_path+'.csv'
resources_concat.to_csv(name_file, index = False, columns=['course_id_lms','resource_id_lms','name','sequence','section','modulo','type','category','duration'])
################################## MANIPULAR DATOS PARA GENERAR LAS SESSIONES ################################################
editions= on_demand_sessions.rename(index=str,columns={"course_id":"course_id_lms","on_demand_session_id":"id_edition_lms","on_demand_sessions_start_ts":"date_start","on_demand_sessions_end_ts":"date_end",
"on_demand_sessions_enrollment_end_ts":"date_enrolled_end"})
name_file='Editions_'+curso_path+'.csv'
editions.to_csv(name_file,index=False)
################################## MANIPULAR DATOS PARA GENERAR LAS SESSIONES ################################################
# users_state=pd.merge(users,course_grades,on='ucchile_user_id', how='inner')
# users_state_enroled=pd.merge(users_state,course_memberships,on='ucchile_user_id', how='inner')
# users_course=users_state_enroled.rename(index=str,columns={"ucchile_user_id":"id_user_lms","country_cd":"pais","course_id":"id_course_lms",
# "course_grade_ts":"date_completed","course_passing_state_id":"state","course_membership_ts":"date_enrolled"})
# name_file='Students_'+curso_path+'.csv'
# users_course.to_csv(name_file,index=False)
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment