Mostrando entradas con la etiqueta data science. Mostrar todas las entradas
Mostrando entradas con la etiqueta data science. Mostrar todas las entradas

3 de abril de 2026

De unas URL a un repositorio de exámenes de la PAU de Madrid con ayuda de la IA

Cómo pude crear en una sola tarde dos cuadernos de Jupyter para descargar, ordenar y compilar exámenes de PAU de Madrid en PDF por asignatura, convirtiendo una tarea repetitiva en una automatización realmente práctica.

Hay proyectos en los que la Inteligencia Artificial no sustituye nada espectacular, pero sí aporta algo muy valioso: reduce fricción. Este es uno de ellos. A partir de varias páginas de la UC3M con enlaces a exámenes de PAU, pude montar en una sola tarde una solución sencilla, útil y reutilizable con Python y Jupyter Notebook.

El resultado quedó recogido en el repositorio examenes-pau-madrid, que organiza PDFs de varias asignaturas de la PAU de Madrid y los prepara para dos usos concretos: consultarlos por materia y curso y generar un PDF recopilatorio por carpeta con índice inicial. En la raíz del proyecto están los dos cuadernos que sostienen todo el flujo: descargar_pdfs_uc3m.ipynb y concatena_pdfs_con_indice.ipynb.

1. Introducción

Quien haya intentado preparar materiales de estudio a partir de exámenes sueltos sabe que el problema no suele ser técnico, sino práctico. Los documentos están repartidos en distintas páginas, con nombres mejorables, formatos desiguales y una organización poco cómoda. Descargar todo a mano, revisar enlaces, guardar cada archivo en su sitio y abrir decenas de PDFs sueltos termina siendo una tarea poco agradecida.

Ahí es donde una pequeña automatización tiene mucho sentido. No hablamos de un gran sistema, sino de detectar una necesidad concreta, definir bien el flujo y apoyarse en la IA para desarrollar más rápido. En mi caso, el objetivo era claro: tener exámenes de PAU organizados por asignatura y, además, reunirlos en documentos únicos cómodos de revisar, imprimir o reutilizar.

2. El punto de partida: unas URL de la UC3M

La idea nació de algo muy simple: unas páginas de la UC3M que enlazaban a exámenes, modelos y soluciones. A partir de ahí, lo razonable era dejar de pensar en “descargar archivos” y empezar a pensar en construir un flujo. Es decir, pasar de una colección dispersa de enlaces a un proceso repetible.

Lo interesante es que el problema no exigía un scraping sofisticado. Bastaba con una extracción de enlaces bien planteada, una organización clara por carpetas y un segundo paso de procesamiento de PDFs. Es el tipo de proyecto perfecto para trabajar con Python y Jupyter: pequeño, visible, fácil de iterar y con resultados tangibles desde muy pronto.

3. Primer cuaderno: descargar y clasificar automáticamente los PDFs

El primer cuaderno, descargar_pdfs_uc3m.ipynb, resuelve la parte más tediosa: recorrer varias páginas fuente, detectar enlaces útiles, descargar los documentos y dejar todo ordenado en su carpeta correspondiente. Según el README.md del proyecto, el notebook contempla tanto PDFs directos como enlaces de Google Drive y, además, genera informes por asignatura y un informe global de descarga.

Ese primer paso ya aporta muchísimo valor. Automatizar la descarga y clasificación de PDFs por asignatura evita el trabajo manual más repetitivo y hace que actualizar materiales deje de ser una tarea pesada. En lugar de repetir siempre el mismo proceso, el proyecto convierte esa necesidad en algo ejecutable, trazable y limpio.

El resultado es la descarga de los PDFs de exámenes de PAU ordenados por asignaturas:

Además, el repositorio no se queda solo en “bajar archivos”. También deja rastro de lo ocurrido. La carpeta pdf_uc3m/ contiene los informes globales informe_global_descargas.csv e informe_global_descargas.json, pensados precisamente para dar trazabilidad al proceso.

4. Segundo cuaderno: crear un PDF único por asignatura

El segundo cuaderno, concatena_pdfs_con_indice.ipynb, da el siguiente salto de valor. Ya no se trata solo de tener archivos descargados y ordenados, sino de convertir ese conjunto de PDFs en un documento único por materia, mucho más cómodo de consultar. El propio repositorio explica que este cuaderno lee los listados imprimir.md de cada asignatura, concatena los PDFs indicados en el orden definido y genera un PDF final por carpeta.

Esta parte resulta especialmente útil porque introduce criterio editorial sin complicar el flujo. En cada carpeta de asignatura se puede mantener un fichero de listado —imprimir.md— con los PDFs que se quieren incluir, en el orden deseado, y dejar comentadas las líneas que no interesa procesar en ese momento. Es una solución muy sencilla, pero también muy práctica, porque no obliga a tocar el código para cambiar la selección de documentos.

Ese detalle mejora mucho la experiencia. No es lo mismo tener veinte o treinta PDFs sueltos en una carpeta que contar con un recopilatorio único, ordenado y listo para revisar o imprimir.

El resultado final es un PDF con el nombre de la asignatura en cada carpeta:

5. El detalle que marca la diferencia: índice y marcadores

Aquí está, para mí, el punto en el que el proyecto deja de ser solo cómodo y pasa a ser realmente útil. El cuaderno de concatenación no se limita a unir PDFs: añade un índice inicial y marcadores internos. El README.md lo menciona de forma explícita, y ese matiz es justo lo que transforma una compilación simple en un material de trabajo mucho más navegable.

Cuando uno consulta exámenes de varios años, ese tipo de navegación importa mucho. No es lo mismo desplazarse a ciegas por un PDF largo que poder saltar directamente a una convocatoria, a un modelo o a una solución desde el índice o desde los marcadores del visor. Para estudiantes, supone acceder antes al material que buscan. Para profesorado, facilita preparar repasos, seleccionar ejemplos o imprimir bloques concretos sin perder tiempo entre archivos sueltos.

En el fondo, el valor no está solo en unir documentos, sino en convertir una colección desordenada en un documento compilado con estructura.

6. Qué papel ha jugado realmente la IA

Aquí conviene ser honestos. La IA no hizo magia, ni sustituyó el criterio técnico, ni resolvió por sí sola el problema. Lo que hizo fue acelerar mucho el desarrollo una vez que el problema estaba bien definido.

En un proyecto así, la IA resulta especialmente útil para proponer estructuras de código, sugerir funciones en Python, resolver dudas concretas, detectar errores, refinar el tratamiento de enlaces, mejorar el manejo de PDFs o ayudar a documentar mejor el proceso. También encaja muy bien en el ritmo típico de trabajo con Jupyter Notebook: probar, revisar, corregir y seguir iterando.

Eso fue justamente lo que más valor me aportó. En vez de arrancar desde cero o invertir demasiado tiempo en piezas repetitivas, pude avanzar mucho más rápido sobre una base funcional. La IA me sirvió como compañera de desarrollo: útil para plantear soluciones, revisar bloques de código y acelerar iteraciones, pero no para decidir por mí qué había que construir.

Porque las partes importantes seguían siendo humanas: detectar la necesidad, definir bien el flujo, validar los enlaces descargados, decidir la estructura de carpetas, elegir qué documentos incluir y revisar que el resultado final fuera realmente usable.

7. Conclusión

Me gustan especialmente este tipo de proyectos porque muestran una versión muy realista del valor actual de la IA aplicada al desarrollo. No hace falta hablar de grandes promesas ni de automatizaciones futuristas. A veces basta con un problema concreto, Python, Jupyter Notebook y una buena definición del objetivo para construir algo útil en muy poco tiempo.

En este caso, partir de unas páginas de la UC3M con enlaces a exámenes de PAU me permitió crear una solución que automatiza la descarga, ordena los materiales por asignatura y genera recopilatorios navegables con índice y marcadores. Es una automatización modesta, sí, pero también muy práctica, reutilizable y fácil de mantener.

Y precisamente por eso me parece un buen ejemplo de lo que la IA ya aporta hoy de forma tangible: no reemplaza el trabajo de pensar, pero sí reduce mucho el tiempo necesario para convertir una idea clara en una herramienta que funciona. Para docentes, estudiantes o cualquiera que tenga que organizar materiales repetitivos, ese tipo de ayuda merece mucho la pena.

Comparte:    Facebook Twitter
Leer más

29 de marzo de 2026

De un PDF a la web de notas de corte de las universidades de Madrid con ayuda de IA

Introducción

Hay proyectos pequeños que explican muy bien qué significa usar inteligencia artificial de forma realista en desarrollo de software. La web Notas de corte de las universidades de Madrid curso 2025-2026 es uno de ellos. No por su complejidad técnica, sino porque muestra cómo la IA puede actuar como copiloto para convertir una fuente difícil de explotar en una aplicación web clara, útil y publicada en abierto.

Lo más interesante no es solo la interfaz final, sino la forma de trabajar. El proyecto se organizó en tres fases:

  1. extraer datos desde un PDF a CSV,
  2. transformar ese CSV a JSON y
  3. construir la interfaz web.

Esa separación ayudó mucho a colaborar con la IA, revisar resultados intermedios y reducir fricción técnica.

Contexto del proyecto

El repositorio del proyecto reúne tanto la preparación de datos como la parte front-end. En la carpeta data aparecen el PDF de origen, el CSV resultante, el JSON consumido por la aplicación y dos cuadernos de Jupyter: uno para la extracción de PDF a CSV y otro para la transformación de CSV a JSON

La aplicación publicada permite consultar las notas de corte mediante filtros por universidad, rama de estudios, titulación y nota, además de ordenar los resultados. La interfaz responde a esa necesidad con filtros en la parte superior y una tabla de resultados abajo, pensada para consultar la información de forma cómoda.

Fase 1: del PDF al CSV

La primera fase fue una de las más importantes del proyecto. El punto de partida era un PDF con la información de las notas de corte. A partir de ahí, con ayuda de IA, se diseñó y refinó un cuaderno de Jupyter para extraer los datos relevantes y volcarlos en un fichero CSV estructurado.

Aquí hay una idea clave: pasar de PDF a CSV ya aporta mucho valor. Un PDF puede ser cómodo para leer, pero no para reutilizar. En cambio, un CSV permite revisar, filtrar, corregir, analizar y reutilizar los datos con mucha más facilidad. Incluso sin llegar a construir la web, esta conversión inicial ya habría sido útil por sí misma.

Además, esta fase muestra bien el papel real de la IA. Puede ayudar a plantear la extracción y proponer una primera solución, pero después hace falta revisar si los campos se han interpretado bien y si la estructura resultante es correcta. La IA acelera, pero no sustituye el criterio humano.

Fase 2: del CSV al JSON

Una vez obtenido el CSV, el siguiente paso fue transformarlo en un JSON listo para ser consumido por la web. En el proyecto esto se resolvió con un segundo cuaderno de Jupyter para transformar el CSV a JSON-

Este paso fue muy acertado desde el punto de vista de la mantenibilidad. El CSV funciona bien como formato intermedio de trabajo y revisión, mientras que el JSON encaja mejor con una aplicación web en cliente. Separar ambos formatos hace que el proyecto sea más claro, reutilizable y fácil de evolucionar.

También refuerza una idea importante: el reto no estaba solo en la interfaz. Preparar bien los datos era una parte esencial del proyecto, y ese trabajo previo condicionaba el buen funcionamiento de la web.

Fase 3: del JSON a una web responsive

Con los datos ya preparados, la última fase consistió en generar la parte front-end usando exclusivamente 3 fihceros:

  1. un index.html,
  2. un script.js y
  3. un styles.css.

Esa decisión ayudó a mantener la aplicación sencilla, portable y fácil de entender.

La interfaz no se limita a mostrar una tabla. Incluye filtros por universidad y rama, búsqueda por titulación, control del rango de nota y ordenación de resultados. Todo ello permite consultar la información de manera práctica y clara. Además, la web se planteó como una interfaz responsive, pensada para adaptarse correctamente a distintos tamaños de pantalla.

Esta fase deja otra lección útil: la parte visual era importante, pero no era el único desafío. La calidad de la experiencia final dependía también de haber construido antes una base de datos limpia y bien estructurada.

Publicación de la web con GitHub Pages

El proyecto se cerró con la publicación de la aplicación mediante GitHub Pages. Esto permitió utilizar el propio repositorio no solo como fuente del código, sino también como canal de despliegue.

Tiene bastante valor práctico y didáctico. El repositorio reúne los datos, los cuadernos de transformación, los archivos del front-end y la web ya publicada. Gracias a GitHub Pages, el proyecto completa todo el ciclo: preparación de datos, interfaz y puesta en producción en un formato accesible desde navegador.

Qué aportó la IA en cada fase

La IA aportó valor de forma distinta en cada etapa. En la extracción ayudó a estructurar el cuaderno para convertir el PDF en un formato utilizable. En la transformación facilitó la limpieza y normalización necesarias para generar un JSON coherente. Y en la fase final aceleró la creación de una interfaz funcional, responsive y fácil de usar.

Pero quizá su mayor aportación fue ayudar a ordenar el trabajo. Dividir el proyecto en fases permitió plantear mejor las peticiones, validar cada resultado intermedio y construir la solución con más control. Pedir primero los cuadernos de transformación y después la interfaz fue una estrategia especialmente acertada.

Retos, correcciones y validación humana

Conviene insistir en que aquí no hubo magia, sino iteración. En un flujo de este tipo siempre hay que comprobar si el PDF se ha interpretado bien, si el CSV quedó correctamente estructurado, si el JSON conserva los campos necesarios y si los filtros y la ordenación funcionan como se espera.

Eso resume bien el papel real de la IA en este proyecto: aceleró el desarrollo, redujo fricción y propuso soluciones útiles, pero fue necesaria una supervisión humana constante para revisar, corregir, probar y ajustar. La IA actuó como copiloto técnico, no como sustituto del trabajo humano.

Conclusión

La web de notas de corte de las universidades de Madrid 2025-2026 es un buen ejemplo de uso práctico de IA aplicada al desarrollo de software. No por su tamaño, sino porque muestra que, con una estrategia clara por fases, la IA puede ayudar de verdad en proyectos sencillos y útiles.

También deja una enseñanza importante: el valor del proyecto empieza antes de la web. Empieza cuando una información encerrada en un PDF se convierte en un CSV reutilizable, continúa con su transformación a JSON y culmina con una interfaz accesible publicada con GitHub Pages.

A veces se habla de IA aplicada al desarrollo como si solo tuviera sentido en proyectos grandes. Este caso demuestra lo contrario. Un proyecto pequeño y bien acotado puede ser un excelente ejemplo de uso realista y productivo de IA: no para sustituir el trabajo técnico, sino para hacerlo más fluido, ordenado y eficiente.

Comparte:    Facebook Twitter
Leer más

6 de julio de 2025

Mapa de la evolución de la contaminación del aire de Madrid de 2001 a 2024

Del 12 al 14 de septiembre de 2014, se desarrolló un hackathon global contra el cambio climático en donde participé y en donde a mi se me ocurrió hacer un mapa con la evolución de la contaminación del aire de Madrid 2014.

Ahora, 10 años después lo actualizo. En vez de hacerlo con Bash Shell Script y CartoDB ahora lo he hecho con un cuaderno de Jupyter de Python y con leaflet en HTML, CSS y JS.

¿Cómo lo he hecho?

Búsqueda de datos

Lo primero fue buscar un conjunto de datos sobre la contaminación del aire en Madrid.

Lo encontré en la página web de datos abiertos del Ayuntamiento de Madrid, exactamente en el apartado sobre calidad del aire con datos desde 2001.

Descarga de datos

Desde el último enlace descargué todos los datos que están en la carpeta datos/descargados.

Geo-coordenadas de las estaciones

En los datos del Ayuntamiento de Madrid están los códigos de las estaciones atmosféricas, pero solo las geo-coordenadas de las actuales, no de todas.

Gracias a Félix Pedrera (@fpedrera) encontré las Geo-Coordenadas de las estaciones atmosféricas en AirBase - The European air quality database, exactamente me descargué el fichero estaciones/AirBase_v8_stations.csv.

Una vez filtrados y parseadas los datos nos queda este bonito fichero CSV con las geo-posiciones de las estaciones atmosféricas de Madrid. Con los datos en bruto, tenía que filtrar y parsear los datos de las estaciones atmosféricas.

Procesamiento de datos

Una vez descargados los datos, interpretando los metadatos, filtramos por el Dioxido de Nitrógeno, hacemos la media por meses, y volcamos todo a un bonito fichero JS con los datos que nos hacen falta.

También volcamos esos datos en CSV por si a alguien le interesa.

Visualización de datos

Finalmente creo un fichero HTML, con su CSS y su JS para poder visualizar la evolución de la contaminación del aire de Dioxido de Nitrógeno de Madrid de 2001 hasta 2024.

Comparte:    Facebook Twitter
Leer más

2 de febrero de 2025

Recursos de un curso de introducción al Data Science con Python

 

A continuación os dejo un enlace con los recursos de un curso de introducción al Data Science con Python que he impartido hace poco. Basícamente son los cuadernos de Jupyter que he utilizado en el curso en donde puedes encontrar:

  • Cómo trabajar con APIs en Python.
  • Cómo hacer webscraping con Python.
  • Cómo crear gráficas con Python (Matplotlib, Seaborn y Plotly).
  • Cómo preprocesar datos con Python (Pandas).
  • Cómo realizar una clasificación binaria con Python (sklearn).
  • Cómo lidiar con series temporales en Python.
     
Comparte:    Facebook Twitter
Leer más