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:
Includes a group project: This will facilitate peer interaction, which is crucial for our experimental design.
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.
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.
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 | ||
160092 - Fundamentos de Contabilidad (2023-I).pdf | 507.0 | 19.0 | Contabilidad |