https://old.observablehq.com/@kahernandezg/notebook-coding-cuadernos-de-indicadores-biblometr
Kevin Amilcar Hernández Gutierrez1
View this notebook in your browser by running a web server in this folder. For example:
npx http-serverOr, use the Observable Runtime to import this module directly into your application. To npm install:
npm install @observablehq/runtime@5
npm install https://api.observablehq.com/d/cff3d60368bf6eee@372.tgz?v=3Then, import your notebook and the runtime as:
import {Runtime, Inspector} from "@observablehq/runtime";
import define from "cff3d60368bf6eee";To log the value of the cell named “foo”:
const runtime = new Runtime();
const main = runtime.module(define);
main.value("foo").then(value => console.log(value));Notebook interactivo para extraer métricas bibliométricas desde OpenAlex y generar visualizaciones reutilizables y embebibles para revistas científicas gestionadas con Open Journal Systems (OJS).
El proyecto incluye indicadores bibliométricos, gráficos interactivos y recursos para publicar paneles de datos de revistas directamente en OJS.
Importante: no publiques claves de API reales en GitHub, Observable público ni repositorios compartidos. Usa variables de entorno, archivos de configuración excluidos con
.gitignoreo secretos de despliegue.
- Características
- Reutilización rápida
- Estructura del repositorio
- Configuración para otra revista
- Guía por gráfico
- Insertar visualizaciones en OJS
- Publicar gráficos estáticos
- Actualización de datos
- Licencia
El notebook incluye indicadores listos para adaptar y publicar:
- Producción anual de artículos.
- Citas recibidas.
- Artículos más citados.
- Clasificación por Objetivos de Desarrollo Sostenible (ODS).
- Cobertura de DOI.
- Cobertura de ORCID.
- Acceso abierto.
- Procedencia geográfica de las citas.
- Productividad de autores según la Ley de Lotka.
- Mapa de autores.
- Mapa de países.
- Mapa de instituciones.
También puede utilizarse para desarrollar indicadores adicionales, tales como:
- Concentración institucional.
- Diversidad geográfica.
- Participación internacional.
- Posibles indicadores de endogamia editorial.
- Distribución de autorías.
- Evolución de citas por año.
- Colaboración institucional.
- Presencia de metadatos bibliográficos.
Para adaptar el notebook a otra revista, cambia los siguientes tres parámetros en el archivo config.js:
| Parámetro | Descripción | Dónde obtenerlo |
|---|---|---|
SOURCE_ID |
Identificador de la revista en OpenAlex | Busca la revista en OpenAlex Sources y copia su identificador, por ejemplo: s6910135 |
EMAIL |
Correo electrónico de contacto para identificar las consultas a OpenAlex | Utiliza un correo institucional o de contacto del proyecto |
API_KEY |
Clave de acceso a la API de OpenAlex | Obténla desde el panel de usuario de OpenAlex |
Ejemplo de archivo de configuración:
const config = {
SOURCE_ID: "s6910135",
EMAIL: "correo@institucion.edu",
API_KEY: "TU_API_KEY"
};No subas
config.jscon una API key real a un repositorio público. Puedes crear un archivoconfig.example.jscon valores de ejemplo y excluirconfig.jsmediante.gitignore.
Ejemplo de config.example.js:
const config = {
SOURCE_ID: "s6910135",
EMAIL: "correo@institucion.edu",
API_KEY: "TU_API_KEY"
};Ejemplo de .gitignore:
config.js
.env
.env.local.
├── index.html # Punto de entrada del Runtime de Observable
├── runtime.js # Motor de ejecución de Observable
├── inspector.css # Estilos base de la visualización
├── notebook.js # Lógica de las celdas y consultas OpenAlex
├── config.js # Configuración local: SOURCE_ID, EMAIL y API_KEY
├── config.example.js # Plantilla de configuración sin credenciales reales
└── ojs-embed/ # Snippets HTML para insertar gráficos en OJS
Para reutilizar este proyecto con otra revista indexada en OpenAlex, revisa y sustituye los identificadores, títulos y credenciales necesarios.
En las celdas o funciones que consultan OpenAlex, reemplaza:
s6910135por el valor de tu variable:
config.SOURCE_IDLas consultas que normalmente requieren esta modificación incluyen:
sourceData
allWorks
sdgData
doiData
orcidData
oaData
authorData
countryData
data
citacionesInfo
Ejemplo:
url.searchParams.set(
"filter",
`primary_location.source.id:${config.SOURCE_ID}`
);En la lógica de citacionesInfo, sustituye comparaciones directas como esta:
source.id === "https://openalex.org/s6910135"por una comparación basada en la variable de configuración:
source.id === `https://openalex.org/${config.SOURCE_ID}`Reemplaza referencias específicas a la revista, por ejemplo:
REDC
Revista Española de Documentación Científica
por el nombre corto y el nombre completo de la revista que analizarás.
Puedes definirlos en config.js:
const config = {
SOURCE_ID: "s6910135",
JOURNAL_SHORT_NAME: "REDC",
JOURNAL_NAME: "Revista Española de Documentación Científica",
EMAIL: "correo@institucion.edu",
API_KEY: "TU_API_KEY"
};Actualiza el correo y la clave de API:
url.searchParams.set("api_key", config.API_KEY);
url.searchParams.set("mailto", config.EMAIL);| Gráfico | Variables o funciones principales | Qué debes editar |
|---|---|---|
| Producción anual | sourceData, serieAnual, _7, _8 |
Sustituye s6910135 por config.SOURCE_ID y actualiza títulos de la revista |
| Top 10 citados | allWorks, topCitados, _11 |
Modifica el filtro source.id:s6910135 |
| ODS | sdgData, chartODS |
Modifica el filtro source.id:s6910135; los colores ODS pueden mantenerse |
| Cobertura DOI | doiData, _16 |
Modifica el filtro source.id:s6910135 y el subtítulo porcentual |
| Cobertura ORCID | orcidData, _18 |
Modifica el filtro source.id:s6910135 y el subtítulo porcentual |
| Acceso abierto | oaData, _20 |
Modifica el filtro source.id:s6910135 |
| Procedencia de citas | citacionesInfo, _23 |
Modifica el filtro de obras y source.id === "https://openalex.org/s6910135" |
| Ley de Lotka | productividadAutores, chartLotka |
Hereda el cambio de SOURCE_ID desde allWorks |
| H-index e i10-index | _26 |
Hereda el cambio desde sourceData |
| Autores: burbujas | authorData, chartAuthors |
Modifica el filtro source.id:s6910135 |
| Países: burbujas | countryData, chartCountries |
Modifica el filtro source.id:s6910135 |
| Instituciones: burbujas | data, chartInstitutions |
Modifica el filtro source.id:s6910135 |
Cada gráfico debe tener un nombre único dentro del cuaderno de Observable.
Ejemplos recomendados:
chartInstitutionschartCountrieschartAuthorschartODSchartLotkachartCitationsCountrieschartEditorialEndogamyNo repitas nombres como chart, data, table o svg en distintas celdas del mismo cuaderno.
Si dos celdas usan el mismo nombre, Observable mostrará un error similar a este:
RuntimeError: chart is defined more than once
Las visualizaciones creadas en Observable pueden incorporarse en OJS mediante iframe o como gráficos estáticos.
Antes de insertar una visualización en OJS, debes contar con:
- Un cuaderno publicado en Observable.
- Consultas funcionales a la API de OpenAlex.
- Celdas de visualización con nombres únicos.
- Acceso al panel editorial o administrativo de OJS.
- Permisos para insertar HTML o utilizar el editor de código fuente en OJS.
Esta opción es recomendable para gráficos interactivos con tooltips, filtros, selectores o consultas actualizables desde OpenAlex.
- Abre el cuaderno de Observable.
- Modifica o actualiza las celdas necesarias.
- Comprueba que los gráficos se visualicen correctamente.
- Selecciona la opción Exportar o Export.
- Selecciona Embed cell o Embeber celda.
- Elige la celda del gráfico que deseas publicar.
- Copia el código
<iframe>que genera Observable. - Ingresa a OJS y abre la página donde deseas mostrar el gráfico.
- Activa el editor de código fuente HTML.
- Pega el código
<iframe>. - Guarda los cambios.
- Revisa la página pública de la revista.
Según la configuración de OJS, el editor HTML puede aparecer como:
<>- Source
- Código fuente
- HTML
- Editar HTML
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartODS"
width="100%"
height="760"
frameborder="0"
style="border: none; background: white;">
</iframe>Este ejemplo muestra la distribución de artículos de una revista por Objetivos de Desarrollo Sostenible, según la clasificación temática de OpenAlex.
Puedes insertar varios gráficos en una página de OJS para construir un panel bibliométrico.
<h2>Indicadores bibliométricos de la revista</h2>
<h3>Contribuciones por institución</h3>
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartInstitutions"
width="100%"
height="850"
frameborder="0"
style="border: none;">
</iframe>
<h3>Procedencia geográfica de las contribuciones</h3>
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartCountries"
width="100%"
height="850"
frameborder="0"
style="border: none;">
</iframe>
<h3>Artículos por Objetivo de Desarrollo Sostenible</h3>
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartODS"
width="100%"
height="760"
frameborder="0"
style="border: none;">
</iframe>
<h3>Productividad de autores: Ley de Lotka</h3>
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartLotka"
width="100%"
height="650"
frameborder="0"
style="border: none;">
</iframe>
<h3>Procedencia de las citas</h3>
<iframe
src="https://observablehq.com/embed/TU-USUARIO/TU-CUADERNO@VERSION?cells=chartCitationsCountries"
width="100%"
height="600"
frameborder="0"
style="border: none;">
</iframe>Sustituye estos valores por los correspondientes a tu proyecto:
TU-USUARIO
TU-CUADERNO
VERSION
chartInstitutions
chartCountries
chartODS
chartLotka
chartCitationsCountries
Puedes insertar el panel en una página independiente o dentro de secciones ya existentes:
- Acerca de la revista
- Estadísticas
- Indicadores bibliométricos
- Panel de datos
- Transparencia editorial
- Impacto de la revista
- Información para autores
- Páginas editoriales personalizadas
- Bloques laterales, si el tema de OJS lo permite
Ejemplo de estructura de navegación:
Inicio
└── Acerca de
└── Indicadores bibliométricos
├── Producción institucional
├── Procedencia geográfica
├── Autores y productividad
├── Citas recibidas
├── Objetivos de Desarrollo Sostenible
└── Diversidad o concentración institucional
También puedes exportar gráficos como imágenes estáticas. Esta opción es apropiada cuando no necesitas interacción o deseas preservar una versión específica de los resultados.
Los formatos recomendados son:
| Formato | Uso recomendado |
|---|---|
| PNG | Sitios web, presentaciones, noticias y uso general |
| SVG | Impresión, alta resolución y edición vectorial |
Utiliza PNG o SVG cuando:
- No se requiere interacción.
- Deseas conservar una versión fija de un indicador.
- El gráfico se utilizará en informes anuales.
- La visualización aparecerá en una noticia, página o artículo.
- Deseas reducir la dependencia de servicios externos.
- Necesitas una figura para presentaciones o documentos PDF.
- La revista necesita preservar una versión específica de los resultados.
Después de descargar el gráfico como PNG o SVG:
- Ingresa a OJS.
- Abre la Biblioteca editorial o el gestor de archivos.
- Carga el archivo descargado.
- Selecciona el archivo desde el editor o copia su URL.
- Inserta la imagen en la página, bloque o sección correspondiente.
Ejemplo de inserción mediante HTML:
<img
src="URL-DEL-ARCHIVO-CARGADO-EN-OJS"
alt="Artículos de la revista por Objetivo de Desarrollo Sostenible"
style="width: 100%; max-width: 1000px; height: auto;">Modifica siempre el texto de alt para describir correctamente el contenido del gráfico. Esto mejora la accesibilidad para personas que usan lectores de pantalla.
| Característica | iframe de Observable | PNG o SVG |
|---|---|---|
| Interactividad | Sí | No |
| Tooltips | Sí | No |
| Filtros y selectores | Sí | No |
| Actualización desde OpenAlex | Sí, al recargar la visualización | No; requiere cargar una imagen nueva |
| Uso en informes | Menos recomendable | Recomendable |
| Calidad de impresión | Variable | SVG ofrece excelente calidad |
| Dependencia de Observable | Sí | No, después de descargar |
| Inserción en OJS | Mediante HTML | Mediante biblioteca editorial o HTML |
Utiliza un iframe cuando quieras publicar visualizaciones explorables y actualizadas, por ejemplo:
- Instituciones que contribuyen a la revista.
- Autores más productivos.
- Países de procedencia de autorías.
- Países de instituciones citantes.
- Artículos clasificados por ODS.
- Indicadores de concentración institucional.
- Distribución de productividad según la Ley de Lotka.
- Evolución temporal de publicaciones y citas.
Utiliza PNG o SVG cuando quieras mantener una versión estática, por ejemplo:
- Informes anuales.
- Informes de gestión editorial.
- Memorias institucionales.
- Presentaciones.
- Material promocional.
- Figuras para documentos PDF.
- Contenido que deba preservarse sin modificaciones.
Las visualizaciones incorporadas mediante iframe pueden conectarse a OpenAlex en tiempo real.
Esto significa que, al recargar la página de OJS, el cuaderno puede volver a ejecutar las consultas y mostrar resultados actualizados.
Ten en cuenta las siguientes recomendaciones:
- OpenAlex puede aplicar límites temporales de solicitudes.
- Evita realizar demasiadas consultas simultáneamente.
- Utiliza
api_keyymailtoen las consultas a OpenAlex. - Implementa almacenamiento en caché cuando el cuaderno tenga muchas visualizaciones.
- Mantén nombres únicos para cada celda de Observable.
- Comprueba periódicamente que los gráficos funcionen correctamente.
- No expongas claves privadas en repositorios públicos.
- Documenta la fecha de actualización si publicas gráficos PNG o SVG.
Ejemplo de parámetros recomendados:
url.searchParams.set("api_key", config.API_KEY);
url.searchParams.set("mailto", config.EMAIL);Al combinar consultas de OpenAlex, visualizaciones interactivas y gráficos estáticos, es posible construir un panel bibliométrico para revistas científicas gestionadas con OJS.
El panel puede incluir información sobre:
- Producción editorial.
- Participación institucional.
- Diversidad geográfica.
- Concentración de contribuciones.
- Patrones de productividad autoral.
- Citas e impacto.
- Clasificación temática.
- Contribuciones vinculadas con los ODS.
- Posibles indicadores de endogamia editorial.
- Calidad y cobertura de metadatos, como DOI y ORCID.
- Acceso abierto.
De esta forma, OJS puede complementar su función editorial con un espacio público de transparencia, análisis bibliométrico y visualización de datos de la revista.
Este proyecto se distribuye bajo la licencia MIT.
Puedes usarlo, copiarlo, modificarlo y adaptarlo para cualquier revista indexada en OpenAlex, siempre que mantengas el aviso de licencia y cites las fuentes de datos correspondientes.
MIT License
Copyright (c) 2026
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files, to deal in the Software
without restriction, including the rights to use, copy, modify, merge,
publish, distribute, sublicense, and sell copies of the Software.
- OpenAlex para los metadatos bibliográficos y las métricas de publicaciones.
- Observable para la construcción y publicación de visualizaciones interactivas.
- Observable Plot y D3.js para gráficos y visualización de datos.
- Open Journal Systems como plataforma editorial para revistas científicas.
- Autor Correo: kahernandezg@uca.edu.sv