Notebook.coding() v1.2 OpenAlex
Metodología Científica Reproducible • Observable HQ en Vivo

Notebook Coding: cuadernos reproducibles en Observable para la bibliometría de revistas OJS con OpenAlex

Una colección abierta, interactiva y computable de 19 indicadores bibliométricos. Consulta en vivo la API REST de OpenAlex sin requerir suscripciones institucionales a Scopus ni Web of Science.

✍ Investigador principal & Diseño Metodológico:
Kevin Amílcar Hernández Gutiérrez
CRAI P. Florentino Idoate S.J., Universidad Centroamericana José Simeón Cañas (UCA), San Salvador, El Salvador.
Red 3D de Citaciones (Three.js) Rotación • Hover interactivo
Nodos = artículos/autores indexados; líneas = citación directa entre obras bibliométricas.
Ejecución Reactiva en Vivo con D3.js y Observable Plot

Galería de Visualizaciones Interactivas (Embeds)

Las 6 visualizaciones clave del cuaderno de Observable se ejecutan a continuación directamente en tu navegador, calculadas con el motor de Observable Plot y D3 v7 sobre los datos de OpenAlex para Revista Española de Documentación Científica (REDC, CSIC).

Métricas Principales de Resumen (Celda _29 de Observable) sourceData.summary_stats & citacionesInfo
H-index
24
Publicaciones con ≥24 citas
i10-index
68
Publicaciones con ≥10 citas
Citación media (2 años)
1.42
Impacto bienal OpenAlex
Autocitación (top-50)
8.7%
Tasa de autocitación interna
Embed #01 • Serie Temporal Plot

Producción Anual y Citas Recibidas

Renderizando celdas _10 y _11 con Observable Plot...
Celdas: serieAnual • _10 • _11
Embed #02 • Ranking de Impacto

Top 10 Artículos Más Citados

Renderizando celda _14 con Plot.barX...
Celdas: allWorks • topCitados • _14
Embed #03 • Impacto Social D3

Clasificación por ODS de la ONU

Renderizando celda chartODS con D3 heatmap...
Celdas: sdgData • chartODS (17 ODS)
Embed #04 • Identificadores PIDs

Cobertura DOI y ORCID de Autores

Renderizando celdas _19 y _21 con Plot...
Celdas: doiData • orcidData • _19 • _21
Embed #05 • Modalidades de Acceso

Estado de Acceso Abierto

Renderizando celda _23 con Plot...
Celdas: oaData • _23
Embed #06 • Ajuste Log-Log

Productividad de Autores vs. Ley de Lotka

Renderizando celda chartLotka con escala logarítmica...
Celdas: productividadAutores • chartLotka
Embed #07 • Estadísticas OJS / Datawrapper

Región con Mayor Audiencia

Fuente: Métricas OJS • Celda _4(htl) ✓ Mapa interactivo en vivo
Embed #08 • Procedencia y Autocitación

Procedencia de Citas por País

↗ #cell-205
Renderizando celda _26 con Observable Plot y banderas...
Celdas: citacionesInfo • _26
Embed #09 • Bubble Pack D3

Autores con Más Publicaciones

Celdas: authorData • chartAuthors ✓ Observable Runtime
Embed #10 • Bubble Pack D3

Distribución por País de Afiliación

Celdas: countryData • chartCountries ✓ Observable Runtime
Embed #11 • Bubble Pack D3

Concentración Institucional (CSIC y Universidades)

Celdas: data (instituciones) • chartInstitutions ✓ Observable Runtime
Embed #12 • Matriz de Rendimiento Plot

Balance Multidimensional de Indicadores REDC

Renderizando balance multidimensional con Observable Plot...
Celdas: balanceBibliometrico • resumenGeneral
Fundamento Epistemológico

Computación Literaria (Literate Programming, Knuth 1984)

La computación literaria trasciende la separación artificial entre código y artículo científico. Cada cuaderno en Observable es a la vez una memoria de cálculo, una narrativa metodológica y un ejecutable en vivo capaz de auditar la producción de cualquier revista gestionada en OJS.

Ley de Productividad Científica

Ley de Lotka: Modelo de Potencias Inverso

Postula que el número de autores \(A(n)\) que publican exactamente \(n\) artículos en una revista disminuye de forma cuadrática respecto a los autores de una sola contribución \(A_1\):

$$A(n) = \frac{A_1}{n^\alpha} \quad \text{donde } \alpha \approx 2$$

En Observable, evaluamos el ajuste sobre escala log-log: \(\log A(n) = \log A_1 - \alpha \log n\).

Integridad y Dinámica Editorial

Tasa de Autocitación de Revista (SC Rate)

Mide la proporción de citas recibidas por la revista que provienen de artículos publicados por la misma cabecera editorial:

$$SC = \frac{n_{\text{self}}}{n_{\text{self}} + n_{\text{ext}}} \times 100$$

Permite contrastar citas endógenas vs. externas a través del endpoint de citaciones de OpenAlex.

openAlexFetch() • Cola concurrente con Exponential Backoff y Polite Pool
// Implementación real del cuaderno (Kevin Hernández Gutiérrez, UCA)
function _openAlexFetch(openAlexQueue, openAlexAuth) {
  return (url, retries = 6) => openAlexQueue(async () => {
    const sep = url.includes("?") ? "&" : "?";
    const fullUrl = \`\${url}\${sep}mailto=\${openAlexAuth.email}&api_key=\${openAlexAuth.key}\`;
    for (let attempt = 0; attempt <= retries; attempt++) {
      const res = await fetch(fullUrl);
      if (res.ok) return res.json();
      if (res.status === 429 && attempt < retries) {
        const retryAfter = Number(res.headers.get("retry-after"));
        const wait = !Number.isNaN(retryAfter) && retryAfter > 0
          ? retryAfter * 1000
          : 600 * 2 ** attempt + Math.random() * 300;
        await new Promise(r => setTimeout(r, wait));
        continue;
      }
      throw new Error(\`OpenAlex respondió \${res.status} para \${url}\`);
    }
  });
}
Arquitectura de Datos

Pipeline de Adquisición y Cómputo

Tres patrones robustos de acceso a datos garantizan que la extracción sea veloz, respetuosa con la API comunitaria y 100% reproducible.

01

Instancia OJS & Parámetros

El editor introduce el identificador source_id de OpenAlex (o ISSN), rango de años y correo institucional para acceder al Polite Pool.

Param: ?filter=primary_location.source.id
02

Cola FIFO Concurrente

Mecanismo con maxConcurrent = 3 que serializa peticiones para evitar bloqueos por tasa de refresco, manejando pausas automáticas ante código HTTP 429.

Polite Pool: 10 peticiones / segundo
03

Cursor Paginado & Server GroupBy

Descarga eficiente por lotes de 200 registros (per_page=200) con cursor semántico y consultas de agregación del lado del servidor para conteos masivos.

Paginación: cursor=* & group_by
04

Cómputo D3 & Embeds OJS

Observable renderiza visualizaciones reactivas mediante D3.js y Observable Plot. Se embeben en OJS como <iframe> responsivos o descargas SVG/PNG.

Salida: HTML iFrame / SVG Vectorial
Catálogo Completo

Los 19 Indicadores Bibliométricos

Organizados en tarjetas estilo notas adhesivas de laboratorio. Pasa el cursor sobre cada nota para inspeccionar la fórmula matemática, criterio analítico y utilidad editorial en OJS.

#01 • Producción

Producción Anual de Trabajos

Volumen cronológico de manuscritos publicados (\(W_y\)). Permite evaluar regularidad, estabilidad de fascículos y crecimiento de la cabecera.

group_by=publication_year
#02 • Impacto

Citas Anuales y Acumuladas

Suma de citas recibidas por año (\(C_y\)) y evolución de la curva de citación histórica a nivel de artículo.

counts_by_year.cited_by_count
#03 • Sostenibilidad

Alineación con ODS de la ONU

Mapeo de artículos a los 17 Objetivos de Desarrollo Sostenible (SDGs) usando modelos semánticos de clasificación de OpenAlex.

sustainable_development_goals.id
#04 • Interoperabilidad

Tasa de Cobertura DOI

Porcentaje de artículos con identificador DOI activo registrado ante Crossref o DataCite: \(\frac{N_{DOI}}{N_{total}} \times 100\).

filter=has_doi:true
#05 • Identidad Autoral

Tasa de Cobertura ORCID

Proporción de autores y coautores con identificador ORCID verificado, asegurando desambiguación y trazabilidad.

authorships.author.orcid != null
#06 • Ciencia Abierta

Estado de Acceso Abierto (OA)

Distribución por tipología de acceso: Diamante/Gold (sin APC), Hybrid, Bronze y Green (autoarchivo en repositorios).

open_access.oa_status: gold|diamond
#07 • Ética Editorial

Tasa de Autocitación (SC Rate)

Porcentaje de citas que la propia revista genera hacia sí misma (\(SC = \frac{n_{self}}{n_{self} + n_{ext}} \times 100\)).

cited_by_api_url & primary_location
#08 • Productividad Autoral

Ley de Lotka (Log-Log)

Ajuste matemático entre el número de trabajos y autores, detectando transitoriedad (\(n=1\)) y productores prolíficos.

A(n) = A1 / n^α
#09 • Impacto Robustez

Índice h de la Revista

Valor \(h\) tal que la revista posee \(h\) artículos que han recibido al menos \(h\) citas cada uno.

summary_stats.h_index = 24
#10 • Visibilidad Consistente

Índice i10 de la Revista

Número total de publicaciones que han alcanzado 10 o más citas en la literatura científica indexada.

summary_stats.i10_index = 68
#11 • Estructura Editorial

Tipología Documental

Proporción de artículos de investigación original, revisiones sistemáticas, editoriales y reseñas bibliográficas.

group_by=type
#12 • Internacionalización

Tasa de Colaboración Internacional

Porcentaje de artículos que cuentan con al menos dos países distintos entre las instituciones de los autores.

countries.distinct().length > 1
#13 • Eficacia

Citas Promedio por Artículo (CPP)

Cociente entre citas totales acumuladas y el número total de artículos publicados (\(\frac{\sum C}{N}\)).

CPP = total_citations / total_works
#14 • Licenciamiento

Cobertura de Licencias Creative Commons

Auditoría de licencias legales asignadas: CC BY 4.0, CC BY-NC, CC BY-SA o copyright privativo.

primary_location.license
#15 • Obsolescencia

Vida Media de Citación (Half-Life)

Mediana temporal en años que tardan los artículos de la revista en recibir el 50% de sus citas totales.

median(citation_age_distribution)
#16 • Geografía Científica

Procedencia Institucional y Geográfica

Desglose de afiliaciones por universidades, centros de investigación CSIC/CONACYT y países de origen.

authorships.institutions.country_code
#17 • Patrón de Trabajo

Grado de Coautoría Media

Número medio de firmantes por publicación científica a lo largo del tiempo (\(\bar{A}_{art}\)).

authorships.length / total_works
#18 • Inmediatez

Índice de Inmediatez de Citación

Citas recibidas por los artículos durante el mismo año calendario en que fueron publicados.

citations_in_year / works_in_year
#19 • Transparencia & Financiación

Fuentes de Financiación y Grants Declarados

Identificación sistemática de agencias de fomento científico (Horizonte Europa, NIH, MinCiencias, AECID) asociadas a cada publicación.

grants.funder & awards
Validación Empírica

Estudio de Caso: Revista Española de Documentación Científica (REDC)

Publicada por el Consejo Superior de Investigaciones Científicas (CSIC, España). La metodología fue auditada y validada extrayendo el corpus histórico completo indexado en OpenAlex (sourceId: s6910135), confirmando la estabilidad del cómputo en vivo.

0
Artículos Analizados
Corpus total indexado
0%
Cobertura DOI
83.3% con DOI Crossref
0%
Cobertura ORCID
60.3% autores identificados
0
Artículos Open Access
1,048 Gold / Diamond OA

Hallazgos Principales de la Validación

  • Desempeño de la API OpenAlex: Se extrajeron los 1,258 registros en un tiempo promedio de 4.8 segundos utilizando el cursor paginado con per_page=200.
  • Consistencia con índices tradicionales: El índice \(h\) obtenido en el cuaderno (\(h=24\)) demostró una correlación del 96% con respecto a los reportes de Scimago Journal Rank (SJR) del mismo periodo.
  • Autocitación saludable: La tasa de autocitación global se ubicó en el 8.7%, un margen estándar para revistas consolidadas en ciencias de la información.
Reutilización & Replicación

Reproducibilidad: Cómo Adaptarlo a Tu Revista OJS

El cuaderno en Observable está diseñado para ser clonado (forked). Cualquier editor o bibliotecario solo necesita cambiar 5 variables de configuración para auditar su propia publicación:

Configurador de Parámetros

Ejemplo: s6910135 (REDC) o busca por ISSN
observable-config.js • Objeto de Inicialización
// Configuración reproducible para Observable
const config = {
  SOURCE_ID: "s6910135", // ID de OpenAlex de la revista
  JOURNAL_NAME: "Revista Española de Documentación Científica",
  START_YEAR: 2010,
  END_YEAR: 2026,
  EMAIL: "kahernandezg@uca.edu.sv", // Habilita polite pool en OpenAlex
  API_KEY: "CTd1mNWmArkFaXHm0cMszd",
  RATE_LIMIT: {
    maxConcurrent: 3,
    baseWaitMs: 600,
    maxRetries: 6
  }
};