Skip to content
This repository was archived by the owner on Jun 17, 2025. It is now read-only.

Ferd656/Webscraping-and-modeling-Human-Pluripotent-Stem-Cell-Clinical-Studies

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Webscraping: Human pluripotent stem cell clinical studies

Máster en Ciencia de Datos - Tipología y ciclo de vida de los datos

Desarrollado por:

▶️    Ayoub Bentohami Amiah
▶️    Ferdinand Feoli Juárez

Estructura del repositorio:

📁    Dataset
 ├💽    ensayos_clinicos.db (archivo de base de datos SQLite que almacena la data recopilada de manera estructurada)
 └📄    ensayos_PSC.csv (archivo plano separador por tabulación que contiene la data correspondiente a la tabla 'ensayos_psc')
📁    Source
 ├🤖    base_de_datos.py (fichero python con funciones especializadas en la gestión de la base de datos)
 ├🤖    explorar.py (fichero python que ejecuta un análisis descriptivo sobre los datos)
 ├🤖    webscraping.py (fichero python con funciones para webscraping y limpieza de datos)
 └🤖    PRAC2.py (fichero python que ejecuta tareas exhaustivas de análisis y transformación sobre los datos, realiza un entrenamiento/ajuste de modelos supervisado y no supervisado de machine learning y un contraste de hipótesis)

Funcionamiento del programa:

▶️webscraping.py

Este fichero contiene la primera parte del código principal, se encarga de consultar la url objetivo y realiza las tareas necesarias de webscraping para obtener de esta la data necesaria. A continuación se describe las funciones que este fichero contiene:

    • paso1_ordenar_elementos

Esta función recibe como parámetro un objeto webdriver de la librería Selenium. Está específicamente diseñada para realizar un ordenamiento previo, de forma descendente, de los estudios publicados en la página respecto a su fecha de inicio. Para ello simula una acción de click a un elemento html específico el cual desencadena la función javascript que realiza dicha tarea.

El propósito de esta función es asegurar que el programa escanee primero las publicaciones más recientes, descartando posteriormente aquellas que ya han sido almacenadas con anterioridad sin perder información, aumentando la eficiencia del escaneo.

Esta es una función void, es decir, que no devuelve ningún valor.

    • paso2_obtener_datos
Esta función recibe como parámetro un objeto webdriver de la librería Selenium. Se encarga de recorrer las páginas de la url de manera ordenada y; a su vez, cada estudio publicado en cada una de estas páginas, recopilando la ruta url (subdominio) de cada estudio. Para ello, primero consulta el número total de páginas desde el elemento paginador, posteriormente realiza una iteración que recorre las n páginas encontradas, guardando en un objeto de lista las cadenas de texto de las url de cada estudio clínico publicado en cada página.

Esta Función devuelve el objeto de lista con las url recopiladas.

    • extraer_detalles
Esta función recibe como parámetro una url y sirve como auxiliar de la función paso3_almacenar_data. Se encarga de extraer y transformar la data de un estudio clínico.

Esta Función devuelve, en un objeto de diccionario, la data de interés ubicada en la url recibida como parámetro.

    • ictrp_url_info
Esta función recibe como parámetros la url de la ficha del estudio clínico en ictrp (International Clinical Trials Registry Platform), un objeto 'Selenium chrome options', y como parámetro opcionale: un número de segundos de timeout de respuesta.

Se encarga de recopilar la información pertinente al estudio clínico que se encuentra almacenada en su ficha de la ictrp.

Esta Función devuelve, en un objeto de diccionario, la data de interés ubicada en la url recibida como parámetro.

    • paso3_almacenar_data
Esta función recibe como parámetros una lista de urls como cadenas de texto, y como parámetros opcionales: la ruta de la base de datos y el nombre de la tabla en donde se almacenará la información.

Se encarga de recorrer cada una de las urls recibidas como parámetro(obtenidas previamente de la función paso2_obtener_datos), para extraer la data de interés contenida en cada una (mediante la función extraer_detalles), y finalmente almacenar dicha data en la tabla y base de datos indicadas como parámetros mediante el llamado de una función invocada del fichero base_de_datos.py. Para ello, esta función utiliza las librerías Requests y BeautifulSoup.

Esta es una función void, es decir, que no devuelve ningún valor.

    • main
Esta función no recibe parámetros, y se encarga de ejecutar los pasos de webscraping manera ordenada para capturar y almacenar la información.

Primero, invoca un objeto webdriver de la librería Selenium, el cual navega al domino proporcionado por la variable global "URL". Luego ejecuta en orden las funciones: "paso1_ordenar_elementos", "paso2_obtener_datos" y "paso3_almacenar_data" pasando a las primeras dos el objeto webdriver como parámetro, y a la última le pasa las url devueltas por paso2_obtener_datos y la ruta de la base de datos contenida en la variable global "DATABASE".

Esta es una función void, es decir, que no devuelve ningún valor.

▶️base_de_datos.py

Este fichero contiene funciones específicas para la gestión y el almacenamiento de la data en la base de datos "ensayos_clinicos.db". Utiliza la librería SQLite. A continuación se describe las funciones que este fichero contiene:

    • inicializar_repositorio

Esta función recibe como parámetros opcionales la ruta de la base de datos y el nombre de la tabla en donde se almacenará la información.
Está diseñada para construir adecuadamente la tabla recibida como parámetro (si esta no existe previamente en la base de datos) siguiendo un esquema dado.

Esta es una función void, es decir, que no devuelve ningún valor.

    • agregar_registro_psc

Esta función recibe como parámetros un objeto diccionario la ruta de la base de datos que contiene la tabla objetivo.
Está diseñada específicamente para insertar un registro a la tabla de ensayos clínicos llamada "ensayos_PSC", si el registro no existe previamente.

Esta es una función void, es decir, que no devuelve ningún valor.

    • schema_to_pandas

Esta función recibe como parámetros un objeto de conexión SQLite, y como parámetro opcionale: una cadena de texto referente a una de las estructuras(tablas) de la base de datos.
Devuelve un diccionario con los nombres de las columnas de la tabla recibida como parámetro como llaves, y los tipos de dato de cada una, en formato Pandas, como valores.

▶️explorar.py

Este fichero no contiene funciones. Está diseñado para que, al ser ejecutado, devuelva un breve resumen descriptivo de los datos almacenados en "ensayos_PSC", haciendo uso de las librerías Pandas y SQLite.

▶️PRAC2.py

Este fichero contiene la segunda parte del código principal, se encarga de describir los datos, transformarlos, y aplicar sobre ellos técnicas de analítica avanzada. A continuación se describe las funciones que este fichero contiene:

    • analisis_exploratorio

Esta función recibe como parámetro un objeto dataframe de la librería pandas. Imprime en pantalla una serie de gráficos con estadística descriptiva relevante sobre los datos.

Esta es una función void, es decir, que no devuelve ningún valor.

    • see_numerical_vars
Esta función recibe como parámetros un objeto data.series y un objeto dataframe de la librería pandas, y como parámetro opcional: un valor numérico referente al número de columnas para la cuadrícula de gráficos. Imprime en pantalla una cuadrícula de gráficos con información relevante sobre las variables numéricas en función de una variable objetivo(Target).

Esta Función devuelve el objeto de lista con las url recopiladas.

    • see_categorical_vars
Esta función recibe como parámetros un objeto data.series y un objeto dataframe de la librería pandas, y como parámetro opcional: un valor numérico referente al número de columnas para la cuadrícula de gráficos. Imprime en pantalla una cuadrícula de gráficos con información relevante sobre las variables categóricas en función de una variable objetivo(Target).

Esta Función devuelve el objeto de lista con las url recopiladas.

▶️Modo de uso del programa

Para ejecutar el programa, es necesario primero correr el script llamado webscraping.py, y en una segunda instancia correr el script llamado PRAC2.py, ya sea mediante el editor de código de preferencia o mediante los comandos python webscraping.py y python PRAC2.py.

Resultados:

Puede consultar un ejemplo de los datos resultantes tras una ejecución de este programa mediante el siguiente enlace Zenodo.

About

Un proyecto universitario que consiste en dos etapas. La primera; recopilar información pública de la web utilizando webscraping avanzado, acerca de diferentes casos de estudio sobre células madre pluripotentes humanas. Finalmente, analiza los aspectos que influyen en la duración de los estudios mediante un árbol de decisión regresor.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages