EZproxy, Google Colab y Python: Una aproximación desde la ciencia de datos para la evaluación del uso de recursos digitales en bibliotecas

Introducción y experiencia

El uso de bases de datos científicas y académicas, que brindan acceso a libros, revistas, material audiovisual y otros tipos de contenido, es casi una obligación para unidades de información. Para estas últimas el acceso a estos recursos es fundamental en pro del fortalecimiento de sus capacidades o valores diferenciadores en sus respectivos campos. Bibliotecas universitarias, especializadas, públicas, escolares, centros de investigación y diversas industrias son hoy ejemplo de ello.

Los directivos de las unidades de información y los gerentes de sus instituciones se ven obligados a realizar un proceso de análisis y toma de decisiones frente al alto número de bases de datos, proveedores y tecnología disponible. Deben ofrecer a sus comunidades un portafolio de recursos digitales acordes con sus necesidades y objetivos. Dentro de este análisis, el uso de cada recurso es determinante para obtener variables como el costo de cada uso, el retorno de la inversión, la relación entre consultas presenciales vs. digitales, entre otras. En este punto, juega un papel fundamental el conocimiento de los  profesionales en ciencia de la información, bibliotecólogos, desarrolladores, programadores, ingenieros y cualquier otra disciplina o campo de conocimiento relacionado. Generalmente, empresas especializadas en soluciones y tecnología para bibliotecas intervienen poniendo a disposición sistemas diseñados para analizar y representar estadísticamente el uso de cada recurso, con el costo económico que esto conlleva. Sin embargo y, desde un análisis detallado del flujo de datos que intervienen en la dinámica del uso de las bases de datos, y de las fuentes de estos datos, en contraste con la tecnología y herramientas de código abierto (open source) disponibles, podemos afirmar que existen diversas alternativas para analizar y representar el uso de dichos recursos digitales, sin incurrir en gastos de licenciamiento o suscripción de sistemas diseñados para tal fin.

Dicho esto, en esta entrada creamos un espacio de discusión alrededor del análisis de datos de uso de bases de datos en unidades de información y sus posibles formas de representación a partir de herramientas open source disponibles.

A continuación, construimos instrucciones en Python que permiten realizar el análisis de más de 720.000 transacciones de uso realizadas por una comunidad académica a lo largo de un mes. Como se podrá ver al finalizar la entrada, es posible realizar este tipo de ejercicios para descubrir nueva información que nos permita tomar decisiones sobre el comportamiento de uso de la comunidad, en la que nosotros como bibliotecólogos tengamos un papel activo en los procesos de ciencia de datos aplicada.

Herramientas

Utilizaremos el sistema de autenticación EZproxy y sus archivos .log como fuente de datos para el análisis del uso de una base de datos durante un mes específico.

Contemplaremos dos tipos de uso: sesiones y búsquedas. El objetivo será analizar la cantidad de usos de una base de datos, que para nuestro caso será ClinicalKey. Finalmente, utilizaremos la herramienta Google Colab para analizar los datos del archivo .log de nuestro EZproxy utilizando algunos comandos básicos en lenguaje de programación Python y la librería Pandas.

Procedimiento

Para analizar el log del EZproxy de un mes específico, es necesario contar con una cuenta de Google, estar autenticados, ingresar a Google Colab y crear un notebook. No es necesario instalar nada en nuestros equipos, ya que todo se hace desde el navegador en el entorno de Google Apps.

Un Notebook está constituido por pequeños campos llamados celdas. Estas celdas permiten escribir y ejecutar instrucciones de forma secuencial en lenguaje Python:

Para mostrar un ejemplo de cómo escribir y ejecutar instrucciones, podemos ver a continuación cómo, a partir de dos variables previamente definidas, es posible solicitar el resultado de diferentes operaciones matemáticas. 

Para ejecutar el código escrito, haremos clic en el botón “ejecutar” que se encuentra en la parte superior izquierda de la celda:

Bajo esta lógica podemos aventurarnos a realizar una revisión inicial del archivo .log de nuestro EZproxy, para lo cual utilizaremos las siguientes instrucciones:

import pandas as pd para importar el conjunto de funciones que nos ayudará a manipular los datos del archivo .log de forma sencilla:

Para cargar el archivo .log a Google Colab, es necesario ingresar al gestor de ficheros que se encuentra en la parte izquierda como muestra la imagen. Es necesario tener en cuenta que, cada vez que ingresemos o actualicemos este notebook, todos los archivos cargados se perderán.

ez = pd.read_csv("/content/ezp201805.log", sep=" ", header=None) para importar los datos del archivo .log con el nombre ‘ez’, desde una ubicación dada, con la instrucción de usar el carácter de espacio como separador de columnas y no asignar encabezados.

ez.shape para ver la cantidad de registros y la cantidad de columnas:

ez.head() para ver los primeros 5 registros del log:

Identificación y conteo de sesiones

Como nuestra base de datos objetivo es ClinicalKey, realizamos una búsqueda en todos los registros, teniendo en cuenta la cadena de caracteres que queremos para filtrar:

cadena1 = "www.clinicalkey.es" para simplificar nuestra cadena de caracteres cada vez que queramos llamarla.

str.contains permite encontrar una cadena de texto en una transacción.

sesiones = ez[ez[5].str.contains(cadena1, case=False, na=False, regex=False)]

  • sesiones = ez[ez[5] crea una consulta en la columna 5 del conjunto de datos ‘ez’
  • .str.contains(cadena1, ejecutará la búsqueda de líneas que contengan la ‘cadena1’
  • La opción case habilita/deshabilita la búsqueda en mayúsculas y minúsculas
  • La opción na habilita/deshabilita la opción de incluir cadenas vacías
  • La opción regex habilita o deshabilita la opción de expresiones regulares

print("Cantidad de sesiones: ", len(sesiones[2].unique()))

  • print solicita la impresión del resultado en pantalla
  • len(sesiones[2] nos permite contar la cantidad de registros que tiene la columna 2 con la variable ‘sesiones’
  • .unique() nos mostrará los valores únicos de la columna que se quiere analizar. Para nuestro caso, la columna 2 de la variable ‘sesiones’

De esta forma, hemos identificado 988 sesiones que se realizaron en el periodo que abarca el archivo .log del EZproxy.

Identificación y conteo de búsquedas:

Bajo la misma lógica del procedimiento de identificación y conteo de sesiones, realizamos una consulta en ‘sesiones’, variable que contiene las transacciones realizadas dentro de la base de datos ClinicalKey, teniendo en cuenta una nueva cadena de caracteres:

cadena2 = "/ui/service/search"

busquedas = sesiones[sesiones[5].str.contains(cadena2, case=False, na=False, regex=False)] 

print("Cantidad de búsquedas: ", len(busquedas[5]))

De esta forma, hemos identificado 3488 búsquedas que se realizaron en el periodo que abarca el archivo .log del EZproxy.

Identificación de usos en un periodo de tiempo específico

Modificación de la columna de fecha para análisis

Una vez identificadas las sesiones y búsquedas, analizaremos cómo se comportan estos usos en un periodo de tiempo específico contenido en el archivo .log.

Las fechas están de la siguiente manera en la columna 3:   

[01/May/2020:00:00:01

Descartamos la hora, dejando únicamente mes, día y año:

busquedas[3] = busquedas[3].str.split(":", expand=True)

  • str.split para separar la columna 3 con el limitador dos puntos ‘:’
  • expand permite dividir y eliminar la información que no necesitamos de la columna 3

Una vez realizado esto, la fecha quedará de la siguiente forma:

[01/May/2020

Eliminamos el carácter ‘[‘ del inicio de la fecha utilizando str.replace para reemplazar ‘[‘ por un valor nulo, y así obtenemos una fecha con formato día/mes/año

busquedas[3] = busquedas[3].str.replace("[", "")

De esta forma, se obtiene una fecha normalizada de la siguiente forma:

01/May/2020

Visualización de búsquedas en un periodo de tiempo

Utilizaremos la instrucción hist para crear un histograma con las fechas que contienen búsquedas

busquedas[3].hist(figsize=(20,5), bins=24)

figsize permite modificar el tamaño de la gráfica resultante:

En resumen, un reporte podría quedar de la siguiente forma:

print("Cantidad de sesiones: ", len(sesiones[2].unique()))
print("Cantidad de búsquedas: ", len(busquedas[5]))
print("*****"
print("gráfica de cantidad de búsquedas por día")
busquedas[3].hist(figsize=(20,5), bins=24)

Conclusiones

Como se pudo evidenciar durante el ejercicio, es posible identificar muchos más detalles del uso de las bases de datos y empezar a relacionar dichos detalles para obtener métricas como datos de usuarios, descargas, días y horas en las que más se utiliza una base de datos, usos mensuales, semestrales, y casi un sinfín de posibles relaciones con base en los datos existentes en los archivos .log del EZproxy. De esta manera, dejamos abierto un espacio de discusión y participación para quienes deseen aprovechar las herramientas disponibles con el fin de analizar el uso de bases de datos en sus unidades de información.

El anterior procedimiento, junto con los datos evaluados podrán ser consultados en el Sitio Web Kaggle, donde podrán hacer comentarios o aportes sobre lo descrito anteriormente para que podamos construir colaborativamente un modelo de evaluación más robusto y al alcance de todos.

Referencias

EZproxy: software de acceso y autenticación. (s. f.). OCLC. https://www.oclc.org/es/ezproxy.html

Get started with Google Colaboratory (Coding TensorFlow). (2019, 30 enero). [Vídeo]. YouTube. https://www.youtube.com/watch?v=inN8seMm7UI

Google Colaboratory. (s. f.). Google Colaboratory Introducción. https://colab.research.google.com/notebooks/intro.ipynb

Log files overview. (2020, 11 agosto). OCLC Support. https://help.oclc.org/Library_Management/EZproxy/Manage_EZproxy/Log_files_overview

pandas – Python Data Analysis Library. (s. f.). Pandas – Python Data Analysis Library. https://pandas.pydata.org/

Welcome to Python. (2020, 11 agosto). Python.org. https://www.python.org/


 

Camilo Rodríguez Carlos

Profesional en Ciencia de la Información – Bibliotecólogo
Esp. en Gerencia de Procesos de Calidad e Innovación
Jefe de Biblioteca en Fundación Universitaria Sanitas – Unisanitas
https://about.me/milo.roca

2 comentarios en “EZproxy, Google Colab y Python: Una aproximación desde la ciencia de datos para la evaluación del uso de recursos digitales en bibliotecas

  1. davidM

    un saludo, alejandro, muy interesante el post.

    quiero preguntar:

    hasta qué nivel de detalle puedo llegar con un archivo.log?

    se pueden construir por ejemplo, indicadores altmétricos?

    gracias, atentamente david.

    1. Alejandro Pachón Santana Autor del post

      Hola David,
      El nivel de detalle de información que puede ser obtenida del archivo.log depende de las diferentes variables que OCLC permite en la configuración de este archivo. Estas variables pueden ser consultadas en Log Format. Es posible identificar accesos, búsquedas, consultas y descargas de un recurso electrónico específico o de un usuario específico en un periodo de tiempo personalizado.

      Sin embargo, es necesario tener en cuenta que la información obtenida puede ser cruzada con otras bases de datos como el directorio activo de la institución. Esto permitiría obtener información por programas, facultades y otra información disponible. ¿En qué tipo de indicadores estás pensado?

      Saludos.

Deja un comentario