1. Syllabi Analysis and NLP for potential course selection#

This notebook constructs a dataframe containing information about potential courses of interest for an RCT. It begins by extracting text from a large database of syllabi and identifying relevant characteristics using regular expressions. Then, it extracts additional course data from a complex tabulated PDF and enriches the main dataframe by matching course codes.

The resulting dataframe was instrumental in selecting the course for the randomized control trial, as it facilitated the visualization of crucial course characteristics, such as potential observations, references to group projects in the syllabus, faculty details, and more.

Setup#

import os
import fitz  # PyMuPDF
import random
from concurrent.futures import ThreadPoolExecutor
import pandas as pd
import re
from IPython.display import display, HTML
from collections import defaultdict
import numpy as np
os.getcwd()
'C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\code'
os.chdir("../")
root = os.getcwd()
data = root + r'\data'

Syllabi text Analysis#

Text Extraction#

We define functions to programatically extract the text of all of our syllabus pdf files.

def extract_text_from_pdf(pdf_path):
    """
    Extracts text from a PDF file.

    Parameters:
    pdf_path (str): The path to the PDF file.

    Returns:
    str: The extracted text from the PDF.
    """
    # Open the PDF file
    pdf_document = fitz.open(pdf_path)
    
    # Initialize an empty string to hold the text
    text = ""

    # Iterate through each page
    for page_num in range(pdf_document.page_count):
        # Get the page
        page = pdf_document[page_num]
        # Extract text from the page
        text += page.get_text()

    # Close the PDF file
    pdf_document.close()

    return text
extract_text_from_pdf(data + r'\syllabus\1_Administración\(1) 142085 - Gestión de la Sostenibilidad Social y Ambiental en las Empresas (2023-I).pdf')
'Sílabo\n142085 - Gestión de la Sostenibilidad Social y Ambiental en las Empresas\nI.\nInformación general\nNombre del Curso: Gestión de la Sostenibilidad Social y Ambiental en las Empresas\nCódigo del curso: 142085\nDepartamento Académico: Administración\nCréditos: 4\nHoras Teoría: 4\nHoras Práctica: 0\nPeriodo Académico: 2023-01-PRE\nSección: A\nModalidad: Presencial\nIdioma: Español\nDocente: SILVANA CARO VARGAS\nEmail docente: s.carov@up.edu.pe\nII.\nIntroducción\nEl curso promueve en los alumnos una actitud proactiva hacia la sostenibilidad social y ambiental de las\nempresas, que ha de evidenciarse en el ejercicio de los diversos roles que asumirán a lo largo de su\ntrayectoria profesional. A través del desarrollo del curso los alumnos conocerán, desde una perspectiva\nestratégica,  los  procesos  e  instrumentos  relacionados  con  la  gestión  sostenible  y  socialmente\nresponsable. Además, se espera aportar a la formación de un profesional técnicamente competente y\nsocialmente comprometido capaz de elaborar propuestas organizacionales que contribuyan al desarrollo\nsostenible y a la creación de valor económico y social.\nIII.\nLogro de aprendizaje final del curso\nAl concluir el curso, el estudiante presentará, en un informe escrito, que luego será sustentado, una\niniciativa de sostenibilidad social y ambiental para una organización existente. La iniciativa debe estar\nalineada con la estrategia de la organización, haberse generado considerando tanto el método como los\nconceptos teóricos trabajados en el curso, contemplar los resultados del diagnóstico de la gestión\nsostenible de la organización y, equilibrar la generación de valor económico, social y ambiental, de forma\nque fortalezca la posición competitiva de la organización y beneficie al menos a uno de sus grupos de\ninterés. En la sustentación oral de la propuesta, el estudiante debe responder preguntas sobre el informe\npresentado y sobre los contenidos trabajados a lo largo del curso.\nIV.\nUnidades de aprendizaje\nUNIDAD DE APRENDIZAJE 1: El contexto y el marco conceptual\nLogro de Aprendizaje / propósito de la unidad:\nFinalizada la primera unidad, el estudiante presentará una ficha resumen con información básica acerca\nde la organización seleccionada, sus procesos y su estrategia, así como un informe escrito breve en el \nque dé cuenta de los oportunidades y riesgos, relacionados con la sostenibilidad, en el sector en el que \nopera la organización.\nContenidos:\n142085 A 2023-01-PRE\nPág. 1 de 13\n1.1 Contexto de la sostenibilidad \n1.2 Mirada crítica al modelo de desarrollo \n1.3 Compromisos globales promotores del desarrollo sostenible\nUNIDAD DE APRENDIZAJE 2: Ámbitos de la sostenibilidad social y ambiental\nLogro de Aprendizaje / propósito de la unidad:\nAl terminar la segunda unidad, el estudiante presentará un informe escrito en el que identifique, \ndescriba, interprete y analice sistemática, fundamentada y objetivamente el enfoque de la gestión de la \nsostenibilidad social y ambiental en la organización  . Deberá determinar el tipo de iniciativas de \nsostenibilidad que desarrolla la organización, el aporte y alineamiento de las mismas a su estrategia \ncompetitiva y a la generación de valor social y ambiental; los recursos disponibles para el desarrollo de \niniciativas de sostenibilidad y; el compromiso formal y percibido asumido por la organización con la \nsostenibilidad. A partir de ello deberá determinar las fortalezas y debilidades de la empresa en relación \ncon la gestión  sostenible y socialmente responsable.\nContenidos:\n2.1 Marcos y estándares de sostenibilidad \n2.2 Gobierno corporativo\n2.3 Cuestiones ambientales \n2.4 Interacción con la comunidad\n2.5 Asuntos de consumidores y clientes\n2.6 Condiciones de trabajo y prácticas laborales\nUNIDAD DE APRENDIZAJE 3: Perspectiva estratégica y gestión de la sostenibilidad en las \norganizaciones\nLogro de Aprendizaje / propósito de la unidad:\nAl terminar la tercera unidad el estudiante presentará, en un informe escrito, que luego será sustentado, \nuna iniciativa de sostenibilidad social y ambiental para una organización existente. La iniciativa debe \nestar alineada con la estrategia de la organización, haberse generado considerando tanto el método \ncomo los conceptos teóricos trabajados en el curso, contemplar los resultados del diagnóstico de la \ngestión sostenible de la organización y, equilibrar la generación de valor económico, social y ambiental, \nde forma que fortalezca la posición competitiva de la organización y beneficie al menos a uno de sus \ngrupos de interés. En la sustentación oral de la propuesta, el estudiante debe responder preguntas \nsobre el informe presentado y sobre los contenidos trabajados a lo largo del curso.  \nContenidos:\n3.1 Perspectiva estratégica en la gestión de la sostenibilidad de las organizaciones \n3.2 Elementos de gestión y su relación com la sostenibilidad social y ambiental \n3.3 Diseño de iniciativas de sostenibilidad \n3.4 Selección de iniciativas \nV.\nEstrategias Didácticas\nLa asignatura ha sido pensada con un enfoque eminentemente participativo y aplicativo que incluye el \nestudio de casos, el trabajo colaborativo y el acercamiento a la realidad de la gestión de la sostenibilidad \nsocial y ambiental en las organizaciones peruanas\n142085 A 2023-01-PRE\nPág. 2 de 13\nA la dinámica práctica mencionada seguirá el desarrollo teórico, a través de la exposición dialogante del \ndocente, la presentación de videos y eventualmente la participación de expositores invitados.\nEl desarrollo teórico deberá ser acompañado por preguntas y opiniones del alumno generadas en un \ncontexto propicio al diálogo y la discusión constructiva.\nLa participación esperada del estudiante se concretará además en las siguientes acciones: lectura del \nmaterial bibliográfico (la lectura debe ser previa a la sesión de clase correspondiente) ; participación en \nlas sesiones de clase ; exposiciones grupales ; estudio de casos ; trabajos y/o discusiones en equipo \nfuera y dentro de clase ; entrevistas fuera de clase a personal de empresas que implementan acciones de\nsostenibilidad.\nVI.\nSistemas de evaluación\nNombre evaluación\n%\nFecha\nCriterios\nComentarios\n1.\nControles\n30\n Asertividad \n \n Manejo conceptual. \n \n2.\nCasos\n10\n Capacidad  analítica  y\nsintética.\n Capacidad  propositiva\ncon\n \nenfoque\nmultidisciplinario\n \ny\nholístico\n3.\nDinámicas\n10\n Capacidad  analítica  y\nsintética.\n Capacidad  propositiva\ncon\n \nenfoque\nmultidisciplinario\n \ny\nholístico.\n \n4.\nTrabajo final (primera \nentrega)\n10\n Aplicación de la teoría a\nla práctica.\n Capacidad  analítica  y\nsintética\n Capacidad crítica\n Habilidad  comunicativa\n(escrita)\n5.\nTrabajo final (segunda \nentrega)\n40\n Aplicación de la teoría a\nla práctica.\n Habilidad  comunicativa\n(oral y escrita).\n Capacidad propositiva.\n \nCapacidad  para  el\ntrabajo en equipo.\n142085 A 2023-01-PRE\nPág. 3 de 13\nVII.\nCronograma referencial de actividades\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\nSemana 1: del 20/03/2023 al 25/03/2023\n\uf0b7UNIDAD DE APRENDIZAJE 1: El \ncontexto y el marco conceptual \nUnidad  1:   El  contexto  y  el  marco\nconceptual:\n \nContexto\n \nde\n \nla\nsostenibilidad \n \n Revisión de los contenidos del curso.\nNormas sobre el desarrollo del curso y\nde los trabajos.\n.  Reflexiones  sobre  el  desarrollo.\nEstado, empresa y sociedad Civil\n \n\uf0b7LO1:  Stiglitz y otros (2009). Medición\ndel desarrollo y progreso social\n\uf0b7LO 31: De la RSC a la sostenibilidad \ncorporativa\n\uf0b7LO 32: Sostenibilidad y RSC\nSemana 2: del 27/03/2023 al 01/04/2023\n\uf0b7UNIDAD DE APRENDIZAJE 1: El \ncontexto y el marco conceptual \nUnidad  1:   El  contexto  y  el  marco\nconceptual: Mirada crítica al modelo de\ndesarrollo \n \n \nReflexiones  sobre  el  desarrollo.\nEstado, empresa y sociedad civil\nUnidad  1:   El  contexto  y  el  marco\nconceptual:  Compromisos  globales\npromotores del desarrollo sostenible\n \n \n \n\uf0b7LO1:  Stiglitz y otros (2009). Medición\ndel desarrollo y progreso social\n\uf0b7LO 31: De la RSC a la sostenibilidad \ncorporativa\n\uf0b7LO 32: Sostenibilidad y RSC\n\uf0b7LO2: OIT (2001). Declaración \nTripartita.\n\uf0b7LO3: ONU (2015). CM Cambio \nclimático\n\uf0b7LO4: PNUMA (2015) Hacia una \neconomía verde\n\uf0b7LO5: EU (2020). A new Circular \nEconomy Action Plan\n\uf0b7Dinámicas\n142085 A 2023-01-PRE\nPág. 4 de 13\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\nSemana 3 con feriados el jueves 06, viernes 07 y sábado 08: del 03/04/2023 al 08/04/2023\n\uf0b7UNIDAD DE APRENDIZAJE 1: El \ncontexto y el marco conceptual \nUnidad  1:    El  contexto  y  el  marco\nconceptual:   Compromisos  globales\npromotores del desarrollo sostenible\n \nDinámica 1:  Compromisos globales\n \n\uf0b7LO6: ONU (2015). Agenda 2030\n\uf0b7LO7: UNCTAD (2016). Directrices \npara la protección del consumidor.\n\uf0b7Dinámicas\nSemana 4: del 10/04/2023 al 15/04/2023\n\uf0b7UNIDAD DE APRENDIZAJE 1: El \ncontexto y el marco conceptual \nUnidad  1:    El  contexto  y  el  marco\nconceptual:   Responsabilidad  social\nempresarial y sostenibilidad\n \nDinámica  2:    Reflexión  sobre  el\nsistema eco y el rol de la empresa .\nConcepto de RS\n \n \n\uf0b7LO8:  Friedman, M. (1970). The \nSocial Responsibility of Business. The\nNYT\n\uf0b7LO9:  Handy (2002), Para qué son los\nnegocios\n\uf0b7LO10: Jones (2013).  Debating the \nresponsibility of capitalism in \nhistorical\n\uf0b7LO11: Harari (2013) El credo \ncapitalista\n\uf0b7Dinámicas\nSemana 5: del 17/04/2023 al 22/04/2023\n\uf0b7UNIDAD DE APRENDIZAJE 1: El \ncontexto y el marco conceptual \n\uf0b7UNIDAD DE APRENDIZAJE 2: \nÁmbitos de la sostenibilidad social y \nambiental \nUnidad  1:    El  contexto  y  el  marco\nconceptual  :   Responsabilidad  social\nempresarial y sostenibilidad\n \nUnidad 2: Ámbitos de la sostenibilidad\nsocial  y  ambiental:  Marcos  y\nestándares  de  sostenibilidad  -\nGobierno corporativo\n \nExposición y debate en clase\n \nControl 1\n \n\uf0b7LO12: ISO 26000 (2010)\n\uf0b7LO13: GRI (2022). Grupo de \nestándares consolidados\n\uf0b7LO14: Indicadores Ethos Iarse (2019)\n\uf0b7LO15: WEF (2020). Measuring \nStakeholders Capitalism\n\uf0b7LO16: Perera (2011). Gob corporativo\n\uf0b7Controles\n\uf0b7Dinámicas\nSemana 6: del 24/04/2023 al 29/04/2023\n142085 A 2023-01-PRE\nPág. 5 de 13\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\n\uf0b7UNIDAD DE APRENDIZAJE 2: \nÁmbitos de la sostenibilidad social y \nambiental \nUnidad 2:  Ámbitos de la sostenibilidad\nsocial  y  ambiental  :  Condiciones  de\ntrabajo y prácticas laborales\n \n \nUnidad 2:   Ámbitos de la sostenibilidad\nsocial  y  ambiental:   Asuntos  de\nconsumidores y clientes\n \n \nDinámica  3:  Ámbitos  y  estándares  y\nmapeo de grupos de interés\n \n \n\uf0b7LO17: Peinado-Vara (2011). Grandes \ncompradores y cadena de valor\n\uf0b7LO18:  Guzmán (2016). Dimensión \ninterna de la RSE.\n\uf0b7LO19: Schwalb (2011). RS ante \nconsumidores.  Cap 4 en Vives y \nPeinado-Vara (2011)\n\uf0b7LO20: Cortina (2002). Por una ética \ndel consumo\n\uf0b7Dinámicas\nSemana 7: del 01/05/2023 al 06/05/2023\n\uf0b7UNIDAD DE APRENDIZAJE 2: \nÁmbitos de la sostenibilidad social y \nambiental \n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad 2:  Ámbitos de la RSE. Medio\nambiente  y  comunidad:  Cuestiones\nambientales  -  Interacción  con  la\ncomunidad\n \n \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:\n \nPerspectiva\nestratégica  en  la  gestión  de  la\nsostenibilidad de las organizaciones \n \n \nDinámica  3:  Ámbitos  y  estándares  y\nmapeo de grupos de interés\n \nControl 2\n \n\uf0b7LO21:  Lash y Wellington (2007).  \nCompetitive advantage on a warning \nplanet\n\uf0b7LO24:  Mitchell y otros (1997). Teoría \nde los stakeholders  (fundamento \npara caso Antamina)\n\uf0b7Controles\n\uf0b7Dinámicas\nSemana 8 de exámenes parciales: del 08/05/2023 al 13/05/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nUnidad 3:   Perspectiva estratégica y\n\uf0b7LO22:  Slaper y Hall (2011). The TBL\n\uf0b7Casos\n142085 A 2023-01-PRE\nPág. 6 de 13\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \ngestión  de  la  sostenibilidad  en  las\norganizaciones:\n \n \nPerspectiva\nestratégica  en  la  gestión  de  la\nsostenibilidad de las organizaciones\n \nExposición y debate en clase\n \n \nCaso 1\n \n \n\uf0b7LO23: Vives y Peinado-Vara 2011.  \nRS como factor de competitividad\n\uf0b7LO24:  Mitchell y otros (1997). Teoría \nde los stakeholders\nSemana 9: del 15/05/2023 al 20/05/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad  3:  Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:\n \nPerspectiva\nestratégica  en  la  gestión  de  la\nsostenibilidad de las organizaciones\n \n \nExposición y debate en clase\n \n \nCaso 1\n \n \nENTREGA  DE  AVANCE  DEL\nTRABAJO FINAL - PARTE I\n \n\uf0b7LO22:  Slaper y Hall (2011). The TBL\n\uf0b7LO23: Vives y Peinado-Vara 2011.  \nRS como factor de competitividad\n\uf0b7LO24:  Mitchell y otros (1997). Teoría \nde los stakeholders\n\uf0b7Casos\n\uf0b7Trabajo final (primera \nentrega)\nSemana 10: del 22/05/2023 al 27/05/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:\n \n \nPerspectiva\nestratégica  en  la  gestión  de  la\nsostenibilidad de las organizaciones\n \n\uf0b7Trabajo final (primera \nentrega)\n142085 A 2023-01-PRE\nPág. 7 de 13\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\nEvaluación  oral  sobre  la  primera\nentrega del trabajo final \n \nSemana 11: del 29/05/2023 al 03/06/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad 3:   Perspectiva estratégica y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:  Elementos de gestión\ny  su  relación  con  la  sostenibilidad\nsocial y ambiental \n \nCaso 2\n \n\uf0b7LO27:  Correa y Estevez (2011). \nCambio y diseño organizacional. Cap \n12 en Vives y Peinado-Vara (2011)\n\uf0b7Casos\nSemana 12: del 05/06/2023 al 10/06/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:  Diseño  de  iniciativas\nde sostenibilidad \n \nDinámica  4  -  Parte  I:  Análisis  del\ncontexto competitivo\n \nDinámica  4   Parte  II:  Análisis  de  la\ncadena de valor\n \n \n\uf0b7LO28: Porter y Karmer (2006). \nVentaja competitiva y RSE\n\uf0b7LO29:  Porter y Karmer (2011). \nCreando valor compartido\n\uf0b7Dinámicas\nSemana 13: del 12/06/2023 al 17/06/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:  Diseño de iniciativas\nde sostenibilidad \n \n \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\n\uf0b7LO30:  Epstein y Wisner (2011). \nBalance Scorecard for sustainability.\n\uf0b7Casos\n142085 A 2023-01-PRE\nPág. 8 de 13\nUnidades de aprendizaje \nContenidos y actividades a realizar\nRecursos y materiales\nEvaluaciones\norganizaciones:  \n Selección  de\niniciativas \n \n \nCaso 3\n \n \nSemana 14: del 19/06/2023 al 24/06/2023\n\uf0b7UNIDAD DE APRENDIZAJE 3: \nPerspectiva estratégica y gestión de \nla sostenibilidad en las \norganizaciones \nUnidad  3:   Perspectiva  estratégica  y\ngestión  de  la  sostenibilidad  en  las\norganizaciones:  \n Selección  de\niniciativas\n \nControl 3\n24/06  :  ENTREGA  DEL  TRABAJO\nFINAL\n \n\uf0b7LO13: GRI. Grupo de estándares \nconsolidados (2016)\n\uf0b7LO 15: WEF (2020). Métricas ESG\n\uf0b7LO 14: Indicadores ETHOS IARSE \n(2019)\n\uf0b7Controles\nSemana 15 con feriado jueves 29: del 26/06/2023 al 01/07/2023\n \nEXPOSICIÓN TRABAJO FINAL \n \n\uf0b7Trabajo final (segunda\nentrega)\nSemana 16 de exámenes finales: del 03/07/2023 al 08/07/2023\n142085 A 2023-01-PRE\nPág. 9 de 13\nVIII. Indicaciones para el desarrollo del curso\nNORMAS Y DE PROCEDIMIENTOS QUE APLICAN EN EL DESARROLLO DEL CURSO\nControles de lectura: \nEl esquema del control puede ser de opción múltiple, de desarrollo, de aplicación práctica o una\ncombinación de estos. El contenido a ser evaluado corresponderá a las lecturas obligatorias señaladas\nen el programa. Todos los controles de lectura se desarrollarán a través del Blackboard.\nParticipación en dinámicas:\nLa calificación que obtenga el alumno en las dinámicas será el promedio simple de las calificaciones\ngrupales obtenidas en todos los trabajos y ejercicios entregables de las dinámicas. Adicionalmente, se\npodrá considerar la participación individual o el aporte del alumno durante las dinámicas. El profesor\nasignará la nota de las dinámicas de acuerdo con las rúbricas establecidas para cada caso. Los\nalumnos que estén ausentes durante las dinámicas tendrán cero de calificación, aun cuando hayan\nparticipado en un trabajo previo o posterior preparado por su grupo. Cuando se programen foros, la\nparticipación se evaluará de forma individual. Los lineamientos específicos a seguir durante el foro se\nindicarán oportunamente y se colgarán en el BB.\nAsistencia y participación a lo largo del semestre: \nLa asistencia y participación del alumno a lo largo de todo el curso se tomará en cuenta en el\nredondeo de la nota final del curso que comprende todos los trabajos desarrollados en el semestre.\nEsta es una nota de ajuste que puede modificar la calificación final obtenida por el alumno en el curso\nen un rango que va de -1 a +1.\nCalificación de casos:\nVer documento explicativo colgado en el Blackboard\nTrabajo final\nVer documento explicativo colgado en el Blackboard\nRecuperación de evaluaciones: \nTodos los alumnos tendrán una sola oportunidad para suplir un control de lectura o un caso que, por\ncualquier motivo, no pudieron rendir (las dinámicas no se recuperan ni se reemplaza la calificación\nobtenida). También podrán rendir esta prueba sustitutoria los alumnos que, habiendo dado todas sus\npruebas, deseen mejorar la nota obtenida en una de ellas. Este control sustitutorio se tomará en la\nfecha indicada en el cronograma e incluirá todo lo visto en el curso desde el inicio. La calificación\nobtenida en este control suplirá la nota más baja obtenida por el alumno en los controles de lectura\nanteriores, aun cuando la nota obtenida en el control sustitutorio sea más baja que la calificación más\nbaja que haya obtenido previamente el alumno. Ningún componente del trabajo final es recuperable.\nRegistro de faltas y puntualidad:\n1.Una vez transcurridos los 15 primeros minutos de clase, el alumno no podrá ingresar al aula. \n2.En caso de que el alumno llegara a clase luego de tomada la lista de asistencia, pero antes de los 15\nminutos de tolerancia para el ingreso al aula, podrá ingresar, pero deberá acercarse al profesor al\nfinalizar la sesión de clase para que éste registre su tardanza.\n3.Si el alumno llegara al salón de clase una vez iniciada una prueba, pero dentro de los 15 primeros\nminutos de tolerancia, podrá rendir la prueba, pero dispondrá solo del tiempo remanente que quede\npara su término.\n4.Las  inasistencias  a  las  sesiones  de  clase  en  las  que  se  programe  un  expositor  invitado  se\ncomputarán como doble falta para el ajuste de la nota final del curso. \n5.Todos los alumnos rendirán los controles de lecturadurantela sesión de clase que corresponda\nydentro del aula, a menos que el profesor indique expresamente una modalidad distinta.\n142085 A 2023-01-PRE\nPág. 10 de 13\n6.Cuando hay un expositor invitado, la inasistencia se computa doble y el contenido de la exposición\nserá materia de evaluación en los controles de lectura que se indiquen.\nIX.\nReferencias bibliográficas\nObligatoria\n  LO02: Oficina Internacional del Trabajo - OIT (2001). Declaración tripartita de principios sobre las\nempresas\n \nmultinacionales\n \ny\n \nla\n \npolítica\n \nsocial.\n \nRecuperado\n \nde\nhttp://www.ilo.org/wcmsp5/groups/public/@dgreports/@dcomm/documents/normativeinstrument/kd\n00121es.pdf.\n  LO03: Organización de las Naciones Unidas - ONU (2015). Convenio marco sobre el cambio climático.\nRecuperado de http://unfccc.int/resource/docs/2015/cop21/spa/l09s.pdf.\n  LO05: European Union - UE (2020). Comunicación de la Comisión al Parlamento Europeo, al Consejo,\nal Comité Económico y Social Europeo y al Comité de las Regiones. Nuevo Plan de acción para la\neconomía\n \ncircular\n \npor\n \nuna\n \nEuropa\n \nmás\n \nlimpia\n \ny\n \nmás\n \ncompetitiva.\nhttps://eurlex.europa.eu/resource.html?uri=cellar:9903b325-6388-11ea-b735-\n01aa75ed71a1.0018.02/DOC_1yformat=PDF\n \n(2020).\n \n.\n \n.\n \n.\n \n.\n \nRecuperado\n \nde\nhttps://eurlex.europa.eu/resource.html?uri=cellar:9903b325-6388-11ea-b735-\n01aa75ed71a1.0018.02/DOC_1yformat=PDF.\n  LO06: Organización de las Naciones Unidas ONU (2015). Transforming our World: the 2030 Agenda for\nSustainable  Development.  Recuperado  de  http://www.un.org/ga/search/view_doc.asp?\nsymbol=A/RES/70/1yLang=E.\n  LO11: Harari, Y. N. (2013) Sapiens. El credo capitalista. Cap. 1 en: De animales a dioses. Una breve\nhistoria de la humanidad. (pp.336-367). (2013). Sapiens. El credo capitalista. En (). De animales a\ndioses. Una breve historia de la humanidad. (pp. ). : .\n  LO12: Secretaria Central de ISSO (2010). ISO 26000:2010. Guía de responsabilidad social. Ginebra.\nSecretaria\n \nCentral\n \nde\n \nISO.\n \n21-75.\n \nRecuperado\n \nde\nhttp://fundahrse.org/wpcontent/uploads/2016/01/Borrador-ISO-26000.pdf.\n  LO13: GRI (2022) Consolidated set of the GRI Standards.\n  LO14: ETHOS-IARSE. Indicadores ETHOS IARSE para Negocios Sustentables y Responsables; versión\n3.3. (2019). . Recuperado de Recuperado de http://www.iarse.org/indicadores.\n  LO16:  Perera,  L.  (2011).  Gobierno  Corporativo.  En  A.  Vives,  y  E.  Peinado-Vara  (Eds).  La\nResponsabilidad  social  de  la  empresa  en  América  Latina.  (pp.  305-322).  New  York:  Banco\nInteramericano de Desarrollo.\n  LO21: Lash, J., y Wellington, F. (2007). Competitive advantage on a warming planet. Harvard Business\nReview. 85(3). 94-104. Recuperado de https://www.ncbi.nlm.nih.gov/pubmed/17348173.\n  LO22: Slaper, T. F., y Hall, T. J. (2011). The triple bottom line: what is it and how does it work?. Indiana\nBusiness\n \nReview.\n \n86(1).\n \n4-8.\n \nRecuperado\n \nde\nhttps://www.ibrc.indiana.edu/ibr/2011/spring/article2.html.\n  LO25: Del Castillo, E. (2011). Estrategias de responsabilidad social empresarial. En A. Vives, y E.\nPeinado-Vara (Eds). La Responsabilidad social de la empresa en América Latina. (pp. 229-248).\nNew York: Banco Interamericano de Desarrollo.\n142085 A 2023-01-PRE\nPág. 11 de 13\n  LO26: Vives A. (2020) Broadening the purpose of the corporation requires purposeful implementation.\nHarvard\n \nDeusto\n \nBusiness\n \nResearch,\n \nvolumen\n \n9,\n \nnúmero\n \n2.\nhttp://www.cumpetere.com/wpcontent/uploads/2020/12/Purpose-HBRDeusto.pdf  (2020).  .  .  .  .\nRecuperado de http://www.cumpetere.com/wp-content/uploads/2020/12/Purpose-HBRDeusto.pdf.\n  LO27: Correa, M. E., y Estévez, R (2011). Gestión de la RSE: cambio y diseño organizacional. En A.\nVives, y E. Peinado-Vara (Eds). La Responsabilidad social de la empresa en América Latina. (pp.\n249-264). New York: Banco Interamericano de Desarrollo\n  LO28: Porter, M. E., y Kramer, M. R. (2006). Strategy and society: The link between competitive\nadvantage  and  Corporate  Social  Responsibility.  Harvard  Business  Review.  84(12).  78-92.\nRecuperado\n \nde\n \nhttps://hbr.org/2006/12/strategy-and-society-the-link-between-\ncompetitiveadvantage-and-corporate-social-responsibility.\n  LO29: Porter, M. E., y Kramer, M. R. (2011). Creating shared value. How to reinvent capitalism-and\nunleash a wave of innovation and growth. Harvard Business Review. 89(1/2). 62-77. Recuperado\nde\n \nhttps://sharedvalue.org.au/wp-content/uploads/2015/12/Harvard-Business-Review-\nCreatingShared-Value.pdf.\n  LO30: Epstein, M. J., y Wisner, P. S. (2011). Using a balanced scorecard to implement sustainability.\nEnvironmental Quality Management. 11(2). 1-10. Recuperado de 10.1002/tqem.1300.\n \n \nLO33:  Rangan,  K.;  Chase,  L.;  Karim,  S.  (2015)  The  truth  about  CSR.  HBR.\nhttps://hbr.org/2015/01/thetruth-about-csr (2015). . . . . Recuperado de .\n LO01: Stiglitz, J., Sen, A., Fittoussi, J. (2009). Informe de la comisión sobre la medición del desarrollo\neconómico  y  del  progreso  social.  París:  Institut  National  de  la  Statistique  et  des  Études\nÉconomiques.\n \nRecuperado\n \nde\nhttp://www.palermo.edu/Archivos_content/2015/derecho/pobreza_multidimensional/bibliografia/Bibli\no_adic5.pdf.\n LO04: PNUMA - Programa de las Naciones Unidas para el Medio Ambiente (2011). Hacia una economía\nverde:  Guía  para  el  desarrollo  sostenible  y  erradicación  de  la  pobreza.  Recuperado  de\nhttps://web.unep.org/greeneconomy/sites/unep.org.greeneconomy/files/publications/ger/GER_synth\nesis_sp.pdf.\n \nLO07:  UNCTAD  (2016).  Directrices  para  la  Protección  del  Consumidor.  ONU.\nhttps://unctad.org/system/files/official-document/ditccplpmisc2016d1_es.pdf  (2016).  .  .  .  .\nRecuperado de .\n LO08: Friedman, M. (13 de Septiembre de 1970). The Social Responsibility of Business is to Increase its\nProfits. The New York Times Magazine. p. 32.\n LO09: Handy, C. (2002). ¿Para qué son los negocios?. Harvard Business Review America Latina. 80(12).\n41-46. Recuperado de 10.1108/17511341311286150.\n LO10: Jones (2013). Debating the responsibility of capitalism in historical y global perspective. Harvard\nBusiness  School.  (2013).  Debating  the  responibility  of  capitalism  in  historical  y  global\nperspective.  .  .  .  Recuperado  de  https://dash.harvard.edu/bitstream/handle/1/11508215/14-\n004.pdf?sequence=1yisAllowed=y .\n LO15: World Economic Forum (2020). Measuring Stakeholder Capitalism. Towards Common Metrics and\nConsistent Reporting of Sustainable Value Creation. White Paper. September 2020\n142085 A 2023-01-PRE\nPág. 12 de 13\n LO17: Peinado-Vara, E. (2011). RSE, grandes compradores y la cadena de valor.. En A. Vives, y E.\nPeinado-Vara (Eds). La Responsabilidad social de la empresa en América Latina. (pp. 143-160).\nNew York: Banco Interamericano de Desarrollo.\n LO18: Guzmán Gonzales, M. G. (2016). Dimensión interna de la responsabilidad social empresarial\ndesde la óptica de la gestión de recursos humanos / INTERNAL DIMENSION OF CORPORATE\nSOCIAL RESPONSIBILITY  FROM  THE  OPTICS  OF  HUMAN  RESOURCES  MANAGEMENT.\nSaber, 28(4), 794805. (). . . . . Recuperado de .\n LO19: Schwalb, M. M. (2011). La responsabilidad de la empresa ante los consumidores. En A. Vives, y\nE. Peinado-Vara (Eds). La Responsabilidad social de la empresa en América Latina. (pp. 87-110).\nNew York: Banco Interamericano de Desarrollo.\n LO20: Cortina A. (2002). Por una ética del consumo. Editorial Taurus. Introducción y Cap. 1 Pg. 11-40\n(2002). Por una ética del consumo. En (). . (pp. ). : .\n LO23: Vives, A. y Peinado Vara, E (2011). La responsabilidad social como factor de competitividad en la\nempresa. En A. Vives, y E. Peinado-Vara (Eds). La Responsabilidad social de la empresa en\nAmérica Latina. (pp. 203-224). New York: Banco Interamericano de Desarrollo.\n LO24: Mitchell, R., Agle, B., y Wood, D. (1997). Toward a Theory of Stakeholder Identification and\nSalience: Defining the Principle of Who and What Really Counts. The Academy of Management\nReview. 22(4). 853-886. Recuperado de 10.5465/AMR.1997.9711022105.\n LO31: Fernández-Fernández, José-Luis. (2011). De la RSC a la sostenibilidad corporativa: una evolución\nnecesaria para la creación de valor. Harvard-Deusto Business Review.\n LO32: Marín García Sergio (2019).  Sostenibilidad y RSC. Cuadernos de la Cátedra CaixaBank de\nResponsabilidad Social Corporativa - IESE, N 41, Mayo 2019. \n142085 A 2023-01-PRE\nPág. 13 de 13\n'
pdfs = data + r'\syllabus'
filenames = []

for base, dirs, files in os.walk(pdfs):
    for filename in files:
        if (filename.lower().endswith('.pdf')):
            filenames.append(os.path.join(base, filename))

random.choices(filenames, k=5)
['C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\data\\syllabus\\6_Finanzas\\1F0229 - Economía Financiera II (2023-I).pdf',
 'C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\data\\syllabus\\2_Ciencias_Sociales_y_Políticas\\150261 - El Perú desde la Cartografía Digital (2023-I).pdf',
 'C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\data\\syllabus\\1_Administración\\142501 - Gestión de la Calidad (2023-I).pdf',
 'C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\data\\syllabus\\5_Economía\\(2) 134203 - Macroeconomía I (2023-I).pdf',
 'C:\\Users\\Matias Villalba\\Documents\\GitHub\\VRI_UP_Networks\\data\\syllabus\\6_Finanzas\\1F0120 - Finanzas Corporativas I (2023-I).pdf']
len(filenames)
276
def extract_texts_from_pdfs(filepaths):
    """
    Extracts text from multiple PDF files using parallel processing.

    Parameters:
    filepaths (list): A list of file paths to the PDF files.

    Returns:
    pd.DataFrame: A DataFrame with the filenames and extracted texts.
    """
    # Use ProcessPoolExecutor for parallel processing
    with ThreadPoolExecutor() as executor:
        results = list(executor.map(extract_text_from_pdf, filepaths))

    filenames = [os.path.basename(filepath) for filepath in filepaths]

    # Create a DataFrame from the results and filenames
    df = pd.DataFrame({'filepath': filepaths, 'filename': filenames, 'text': results})

    return df
df = extract_texts_from_pdfs(filenames)
df.head(10)
filepath filename text
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 142085 - Gestión de la Sostenibilidad Soc... Sílabo\n142085 - Gestión de la Sostenibilidad ...
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 144741 - Gestión de Personas (2023-I).pdf Sílabo\n144741 - Gestión de Personas\nI.\nInfo...
2 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 142085 - Gestión de la Sostenibilidad Soc... \n1/12 \n \n \n \nSÍLABO \n \nI. \nInformació...
3 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 144741 - Gestión de Personas (2023-I).pdf \n \n \n1 \n \nSÍLABO \nI. Información g...
4 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 140663 - Negocios Inclusivos (2023-I).pdf Sílabo\n140663 - Negocios Inclusivos\nI.\nInfo...
5 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141036 - Análisis Multivariado para los Negoc... Sílabo\n141036 - Análisis Multivariado para lo...
6 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141038 - Fundamentos de las Ciencias Empresari... Sílabo\n141038 - Fundamentos de las Ciencias E...
7 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141041 - Gestión de la Cadena de Suministros ... Sílabo\n141041 - Gestión de la Cadena de Sumin...
8 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141042 - Investigación Aplicada a los Negocio... \n5/5 \n \n \n \nSÍLABO \n \nI. \nInformación...
9 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141401- Manejo Conflictos (2023 - I).pdf \n1/2 \n \n \n \nSÍLABO \n \nI. \nInformación...

Key characteristic identification#

# Define regex pattern to identify references to group projects
project_pattern = re.compile(r'\b(proyecto(|s)\s+grupal(|es)|proyecto(|s)\s+en\s+grupo|trabajo(|s)\s+grupal(|es)|proyecto\s+final|group\s+project(|s)|trabajo(|s)\s+en\s+grupo|grupo(|s)\s+de\s+trabajo|caso(|s)\s+grupal(|es))\b', re.IGNORECASE)

# Create a new column to indicate references to group projects
df['group_project'] = df['text'].apply(lambda x: bool(project_pattern.search(x)))
# Define regex pattern to identify references to teamwork
team_pattern = re.compile(r'\b(trabajo\s+en\s+equipo|teamwork)\b', re.IGNORECASE)

# Create a new column to indicate references to teamwork
df['teamwork'] = df['text'].apply(lambda x: bool(team_pattern.search(x)))
# Function to extract course code
def extract_course_code(filename):
    match = re.search(r'(\b\d{6}|1MN\d{3}|1F\d{4}\b)', filename)
    if match:
        return match.group(1)
    return None

# Apply the function to the 'filename' column and create a new column 'course_code'
df['course_code'] = df['filename'].apply(extract_course_code)
# Faculty mapping
faculty_mapping = {
    '12': 'Humanidades',
    '13': 'Economía',
    '14': 'Administración',
    '15': 'Ciencia Sociales',
    '16': 'Contabilidad',
    '17': 'Ingeniería',
    '18': 'Derecho',
    '1F': 'Finanzas',
    '1MN': 'Marketing y Negocios'
}


# Function to determine faculty based on course code
def get_faculty(course_code):
    if course_code:
        prefix = course_code[:2] if course_code[:2] in faculty_mapping else course_code[:3]
        return faculty_mapping.get(prefix, 'Unknown')
    return 'Unknown'

df['faculty'] = df['course_code'].apply(get_faculty)
df.head(10)
filepath filename text group_project teamwork course_code faculty
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 142085 - Gestión de la Sostenibilidad Soc... Sílabo\n142085 - Gestión de la Sostenibilidad ... False True 142085 Administración
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 144741 - Gestión de Personas (2023-I).pdf Sílabo\n144741 - Gestión de Personas\nI.\nInfo... False False 144741 Administración
2 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 142085 - Gestión de la Sostenibilidad Soc... \n1/12 \n \n \n \nSÍLABO \n \nI. \nInformació... False True 142085 Administración
3 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 144741 - Gestión de Personas (2023-I).pdf \n \n \n1 \n \nSÍLABO \nI. Información g... False False 144741 Administración
4 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 140663 - Negocios Inclusivos (2023-I).pdf Sílabo\n140663 - Negocios Inclusivos\nI.\nInfo... False False 140663 Administración
5 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141036 - Análisis Multivariado para los Negoc... Sílabo\n141036 - Análisis Multivariado para lo... True False 141036 Administración
6 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141038 - Fundamentos de las Ciencias Empresari... Sílabo\n141038 - Fundamentos de las Ciencias E... True False 141038 Administración
7 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141041 - Gestión de la Cadena de Suministros ... Sílabo\n141041 - Gestión de la Cadena de Sumin... False False 141041 Administración
8 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141042 - Investigación Aplicada a los Negocio... \n5/5 \n \n \n \nSÍLABO \n \nI. \nInformación... False False 141042 Administración
9 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141401- Manejo Conflictos (2023 - I).pdf \n1/2 \n \n \n \nSÍLABO \n \nI. \nInformación... False False 141401 Administración

Adding study plan information#

We use this table that contains the mandatory freshman courses for each major to create dummies

study_plan_df = pd.read_excel(data + r'\freshmen_courses.xlsx')
study_plan_df.head(10)
mat_carrera mat_plan_studio cur_nombre_del_curso course_code
0 Administración 2022-I PER Fundamentos de las Ciencias Empresariales 141038
1 Administración 2022-I PER Lenguaje I 120001
2 Administración 2022-I PER Matemáticas I 138649
3 Administración 2022-I PER Economía General I 132641
4 Contabilidad 2022-I PER Fundamentos de las Ciencias Empresariales 141038
5 Contabilidad 2022-I PER Lenguaje I 120001
6 Contabilidad 2022-I PER Matemáticas I 138649
7 Contabilidad 2022-I PER Economía General I 132641
8 Marketing 2022-I PER Lenguaje I 120001
9 Marketing 2022-I PER Matemáticas I 138649
study_plan_df['value'] = 1  # Create a column to use as values in the pivot table
study_plan_df['mat_carrera'] = "frshmn_" + study_plan_df['mat_carrera'].str.lower().str.replace('[ ,]+', '_', regex=True)
study_plan_df = study_plan_df.pivot_table(index=['course_code','cur_nombre_del_curso'], columns='mat_carrera', values='value', fill_value=0).reset_index()
study_plan_df['frshmn_any'] = 1
study_plan_df['course_code'] = study_plan_df['course_code'].astype(str)
study_plan_df.head()
mat_carrera course_code cur_nombre_del_curso frshmn_administración frshmn_contabilidad frshmn_derecho frshmn_economía frshmn_finanzas frshmn_humanidades_digitales frshmn_ingeniería_de_la_información frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any
0 120001 Lenguaje I 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1
1 120252 Lectura crítica de la prensa digital y en las ... 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1
2 120260 Introducción a la Política, Filosofía y Economía 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1
3 132641 Economía General I 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1
4 138649 Matemáticas I 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1
df = pd.merge(df, study_plan_df, on='course_code', how='left').drop(columns=['cur_nombre_del_curso'])
frshmn_columns = [col for col in df.columns if col.startswith('frshmn_')]
df[frshmn_columns] = df[frshmn_columns].fillna(0)
df.head()
filepath filename text group_project teamwork course_code faculty frshmn_administración frshmn_contabilidad frshmn_derecho frshmn_economía frshmn_finanzas frshmn_humanidades_digitales frshmn_ingeniería_de_la_información frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 142085 - Gestión de la Sostenibilidad Soc... Sílabo\n142085 - Gestión de la Sostenibilidad ... False True 142085 Administración 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 144741 - Gestión de Personas (2023-I).pdf Sílabo\n144741 - Gestión de Personas\nI.\nInfo... False False 144741 Administración 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 142085 - Gestión de la Sostenibilidad Soc... \n1/12 \n \n \n \nSÍLABO \n \nI. \nInformació... False True 142085 Administración 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 144741 - Gestión de Personas (2023-I).pdf \n \n \n1 \n \nSÍLABO \nI. Información g... False False 144741 Administración 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 140663 - Negocios Inclusivos (2023-I).pdf Sílabo\n140663 - Negocios Inclusivos\nI.\nInfo... False False 140663 Administración 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
df[df['course_code']=='141038']
filepath filename text group_project teamwork course_code faculty frshmn_administración frshmn_contabilidad frshmn_derecho frshmn_economía frshmn_finanzas frshmn_humanidades_digitales frshmn_ingeniería_de_la_información frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any
6 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141038 - Fundamentos de las Ciencias Empresari... Sílabo\n141038 - Fundamentos de las Ciencias E... True False 141038 Administración 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0

Tabulated PDF course data extraction#

This part of the notebook extracts structured data from a complexly formatted PDF file containing course information.

Said doocument is available here

text = extract_text_from_pdf(data+ r'\Oferta-Academica-2024-II-V5.pdf')
text.splitlines()[:30]
['Secc',
 'Tipo',
 'Docentes',
 'Cred',
 'Teoría o Práctica',
 'Día',
 'Horario',
 'Duración',
 'Cupo',
 's',
 'Aula',
 'CURSOS ACADÉMICOS',
 '120266 - Antiguo Perú, Arqueología, Museos y Nuevas Tecnologías',
 '4,00',
 'A',
 'CLASE  ',
 'JUE',
 '11:30',
 '13:20',
 '30',
 'A-303',
 'CLASE  ',
 'MAR',
 '11:30',
 '13:20',
 '30',
 'X -302',
 '120253 - Antropología Filosófica',
 '4,00',
 'A']
course_sections = defaultdict(list)
course_credits = defaultdict(list)

current_course_code = None

# Split text by lines and process
for line in text.splitlines():
    # Match course code
    course_match = re.search(r"(\b\d{6}|1MN\d{3}|1F\d{4}\b)\s+-\s+", line)
    if course_match:
        current_course_code = course_match.group(1)
        # Check if the course code is in the list of interest
        if current_course_code not in list(df['course_code']):
            current_course_code = None  # Reset if not interested
        continue
    
    # Match section code if we have a current course of interest
    if current_course_code:
        section_match = re.search(r"\b^[A-Z]{1,2}$\b", line)
        credits_match = re.search(r"\b^(\d{1})\,\d{2}$\b", line)
        if section_match:
            section_code = section_match.group(0).strip()
            course_sections[current_course_code].append(section_code)
        if credits_match:
            credits = int(credits_match.group(1).strip())
            course_credits[current_course_code] = credits

for course in course_sections:
    course_sections[course] = sorted(list(set(course_sections[course])))
    

# Count sections for each course
course_section_counts = {course: len(sections) for course, sections in course_sections.items()}
course_section_size = defaultdict(list)

current_course_code = None
current_code_section = None

for line in text.splitlines():
    course_match = re.search(r"(\b\d{6}|1MN\d{3}|1F\d{4}\b)\s+-\s+", line)
    if course_match:
        current_course_code = course_match.group(1)
        # Check if the course code is in the list of interest
        if current_course_code not in list(df['course_code']):
            current_course_code = None  # Reset if not interested
        continue
    if current_course_code:
        section_match = re.search(r"\b^[A-Z]{1,2}$\b", line)
        if section_match:
            current_code_section = current_course_code + "-" + section_match.group(0).strip()
    if current_code_section and current_course_code:
        class_size_match = re.search(r'\b^\d{1,3}$\b', line)
        if class_size_match:
            class_size = class_size_match.group(0).strip()
            course_section_size[current_code_section] = int(class_size)
# Display results
for i, (course_section, size) in enumerate(course_section_size.items()):
    if i>=20:
        break
    print(f"{course_section} size: {size} students")
126177-A size: 30 students
120133-A size: 31 students
120133-AA size: 30 students
120133-AB size: 35 students
120133-AC size: 30 students
120133-B size: 30 students
120133-C size: 30 students
120133-D size: 35 students
120133-E size: 35 students
120133-F size: 30 students
120133-G size: 30 students
120133-H size: 30 students
120133-I size: 30 students
120133-J size: 30 students
120133-K size: 30 students
120133-L size: 30 students
120133-M size: 30 students
120133-N size: 30 students
120133-O size: 30 students
120133-P size: 30 students
class_size_df = pd.DataFrame(list(course_section_size.items()), columns=['course_code_section', 'size'])
class_size_df['course_code'] = class_size_df['course_code_section'].apply(lambda x: x[:6])
class_size_df.head(10)
course_code_section size course_code
0 126177-A 30 126177
1 120133-A 31 120133
2 120133-AA 30 120133
3 120133-AB 35 120133
4 120133-AC 30 120133
5 120133-B 30 120133
6 120133-C 30 120133
7 120133-D 35 120133
8 120133-E 35 120133
9 120133-F 30 120133
course_size_df = class_size_df[['course_code', 'size']].groupby('course_code').sum().reset_index()
course_size_df.head(10)
course_code size
0 120000 7
1 120001 576
2 120006 510
3 120070 315
4 120125 450
5 120133 901
6 120199 27
7 122005 117
8 124019 135
9 124020 60
df = pd.merge(df, course_size_df, on='course_code', how='left')
# Display results
for i, (course, count) in enumerate(course_section_counts.items()):
    if i>=20:
        break
    print(f"Course {course}: {count} sections")
Course 126177: 1 sections
Course 120133: 29 sections
Course 129007: 13 sections
Course 122005: 4 sections
Course 120199: 1 sections
Course 120070: 10 sections
Course 124019: 4 sections
Course 120001: 21 sections
Course 120006: 17 sections
Course 124020: 2 sections
Course 127039: 1 sections
Course 120000: 12 sections
Course 120125: 15 sections
Course 130454: 1 sections
Course 130289: 1 sections
Course 130639: 1 sections
Course 130424: 4 sections
Course 138425: 3 sections
Course 132641: 21 sections
Course 130642: 14 sections
for i, (course_code, sections) in enumerate(course_sections.items()):
    if i>=20:
        break
    print(f"{course_code}: {sections}")
126177: ['A']
120133: ['A', 'AA', 'AB', 'AC', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
129007: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M']
122005: ['A', 'B', 'C', 'D']
120199: ['A']
120070: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
124019: ['A', 'B', 'C', 'D']
120001: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'V']
120006: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R']
124020: ['A', 'B']
127039: ['A']
120000: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']
120125: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']
130454: ['A']
130289: ['A']
130639: ['A']
130424: ['A', 'B', 'C', 'D']
138425: ['A', 'B', 'C']
132641: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U']
130642: ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'M', 'N', 'O', 'P']
for i, (course_code, credits) in enumerate(course_credits.items()):
    if i >= 20:
        break
    print(f"{course_code}: {credits}")
126177: 3
120133: 4
129007: 4
122005: 4
120199: 3
120070: 4
124019: 4
120001: 4
120006: 4
124020: 4
127039: 4
120000: 0
120125: 4
130454: 3
130289: 2
130639: 4
130424: 5
138425: 5
132641: 5
130642: 5
sections_df = pd.DataFrame(list(course_section_counts.items()), columns=['course_code', 'sections'])
credits_df = pd.DataFrame(list(course_credits.items()), columns=['course_code', 'credits'])

Consolidating final Dataframe#

Merging aditional information#

df = pd.merge(df, sections_df, on='course_code', how='left')
df = pd.merge(df, credits_df, on='course_code', how='left')
df['available_2024_2'] = df['sections'].notna()
df
filepath filename text group_project teamwork course_code faculty frshmn_administración frshmn_contabilidad frshmn_derecho ... frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any size sections credits available_2024_2
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 142085 - Gestión de la Sostenibilidad Soc... Sílabo\n142085 - Gestión de la Sostenibilidad ... False True 142085 Administración 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 72.0 3.0 4.0 True
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (1) 144741 - Gestión de Personas (2023-I).pdf Sílabo\n144741 - Gestión de Personas\nI.\nInfo... False False 144741 Administración 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 120.0 4.0 4.0 True
2 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 142085 - Gestión de la Sostenibilidad Soc... \n1/12 \n \n \n \nSÍLABO \n \nI. \nInformació... False True 142085 Administración 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 72.0 3.0 4.0 True
3 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 144741 - Gestión de Personas (2023-I).pdf \n \n \n1 \n \nSÍLABO \nI. Información g... False False 144741 Administración 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 120.0 4.0 4.0 True
4 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 140663 - Negocios Inclusivos (2023-I).pdf Sílabo\n140663 - Negocios Inclusivos\nI.\nInfo... False False 140663 Administración 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 NaN NaN NaN False
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
271 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 1MN384 - Plan de Marketing (2023-I).pdf \n1/13 \n \n \n \nSÍLABO \n \nI. \nInformació... False False 1MN384 Marketing y Negocios 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 25.0 1.0 4.0 True
272 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 1MN385 - Pricing (2023-I).pdf Sílabo\n1MN385 - Pricing\nI.\nInformación gene... False False 1MN385 Marketing y Negocios 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 32.0 1.0 3.0 True
273 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 1MN388 - Marketing de Contenidos (2023-I).pdf \n1/3 \n \n \n \nSÍLABO \n \nI. \nInformación... True False 1MN388 Marketing y Negocios 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 NaN NaN NaN False
274 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 1MN444 - Marketing Internacional en China y As... SÍLABO \nI. \nInformación General \n \n• \nNo... True False 1MN444 Marketing y Negocios 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 30.0 1.0 3.0 True
275 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 1MN445 - Gestión de Eco Marketing (2023-I).pdf Sílabo\n1MN445 - Gestión de Eco Marketing\nI.\... False False 1MN445 Marketing y Negocios 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 NaN NaN NaN False

276 rows × 24 columns

Filtering potential courses#

If we only consider courses with group projects that are available on the second term of 2024, we find too many posible options

selection_0 = df[df['group_project'] & df['available_2024_2']].reset_index(drop=True)
print(f'There are {selection_0.shape[0]} potential courses without restrictions')
There are 63 potential courses without restrictions

Our ideal course for the upcoming term should meet the following criteria:

  1. Includes a group project: This will facilitate peer interaction, which is crucial for our experimental design.

  2. Mandatory for freshmen: Freshmen are less likely to have established social networks within the university. Additionally, freshmen are systematically assigned to their classrooms, which could be beneficial for our design.

  3. Offered by the Economics Department: We have the full support of the economics faculty, unlike other departments where professors might resist giving up control over group formation or conducting surveys.

  4. Enrolled by a large number of students: A large student pool is essential to ensure statistical power.

selection_1 = df[df['group_project'] & df['available_2024_2'] & df['frshmn_any'] & (df['faculty']=='Economía') & (df['size']>100)].reset_index(drop=True)
print(f'There are {selection_1.shape[0]} potential courses under our ideal restrictions')
There are 0 potential courses under our ideal restrictions

As there are no courses with such characteristics, we will have to evaluate a trade-off between some of them.

For instance, if we give up the restriction of it being from the Economics Department:

selection_2 = df[df['group_project'] & df['available_2024_2'] & df['frshmn_any'] & (df['size']>100)].reset_index(drop=True)
selection_2
filepath filename text group_project teamwork course_code faculty frshmn_administración frshmn_contabilidad frshmn_derecho ... frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any size sections credits available_2024_2
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 141038 - Fundamentos de las Ciencias Empresari... Sílabo\n141038 - Fundamentos de las Ciencias E... True False 141038 Administración 1.0 1.0 1.0 ... 0.0 0.0 1.0 1.0 0.0 1.0 134.0 8.0 4.0 True
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 160092 - Fundamentos de Contabilidad (2023-I).pdf Sílabo\n160092 - Fundamentos de Contabilidad\n... True False 160092 Contabilidad 0.0 0.0 0.0 ... 0.0 0.0 0.0 1.0 1.0 1.0 507.0 19.0 4.0 True

2 rows × 24 columns

And if we give up the restriction of it being mandatory for freshmen while keeping the Econ Department restriction:

selection_3 = df[df['group_project'] & df['available_2024_2'] & (df['faculty']=='Economía') & (df['size']>100)].reset_index(drop=True)
selection_3
filepath filename text group_project teamwork course_code faculty frshmn_administración frshmn_contabilidad frshmn_derecho ... frshmn_ingeniería_empresarial frshmn_ingeniería_en_innovacion_y_diseño frshmn_marketing frshmn_negocios_internacionales frshmn_politica_filosofia_y_economia frshmn_any size sections credits available_2024_2
0 C:\Users\Matias Villalba\Documents\GitHub\VRI_... (2) 138201 - Microeconomía I (2023-I).pdf \n \n \n \n \n \nPROGRAMA DEL CURSO \n \n \nI... True True 138201 Economía 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 204.0 7.0 5.0 True
1 C:\Users\Matias Villalba\Documents\GitHub\VRI_... 134427 - Microeconomía II (2023-I).pdf \n \n \n \n \n \nPROGRAMA DEL CURSO \n \n \nI... True False 134427 Economía 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 170.0 5.0 5.0 True

2 rows × 24 columns

# Create clickable links to the PDF files
for df in [selection_0, selection_2, selection_3]:
    df['local_link'] = df['filepath'].apply(lambda x: f'<a href="{x}" target="_blank">pdf</a>')
# Function to keep only the first three levels of parent directories
def keep_three_levels(filepath):
    # Split the path by backslashes
    parts = filepath.split('\\')
    # Join the first four parts (three levels + file name)
    return '\\'.join(parts[-4:])

# Apply the function to the 'filepaths' column
for df in [selection_0, selection_2, selection_3]:
    df['online_link'] = 'https://mvillalbao.github.io/assets/pdf/VRI_UP_Networks_data/' + df['filepath'].apply(lambda x: keep_three_levels(x).replace('\\', '/'))
    df['online_link'] = df['online_link'].apply(lambda x: f'<a href="{x}" target="_blank">pdf</a>')

Visualizing selected options#

titles = ['Group project & For freshmen & Large pool of students', 'Group project & From Economics Department & Large pool of students']
dataframes = [selection_2, selection_3]

for title, df in zip(titles, dataframes):
    display(HTML(f'<h3 style="text-align:center;"><b>{title}</b></h3>'))
    display(HTML(df[['filename', 'size', 'sections', 'faculty', 'local_link', 'online_link']].to_html(escape=False, index=False)))

Group project & For freshmen & Large pool of students

filename size sections faculty local_link online_link
141038 - Fundamentos de las Ciencias Empresariales (2023-I).pdf 134.0 8.0 Administración pdf pdf
160092 - Fundamentos de Contabilidad (2023-I).pdf 507.0 19.0 Contabilidad pdf pdf

Group project & From Economics Department & Large pool of students

filename size sections faculty local_link online_link
(2) 138201 - Microeconomía I (2023-I).pdf 204.0 7.0 Economía pdf pdf
134427 - Microeconomía II (2023-I).pdf 170.0 5.0 Economía pdf pdf