La reducción dimensional permite visualizar la estructura del espacio de keywords en 2D. Cada método revela distintos aspectos: MDS preserva distancias globales, t-SNE muestra agrupamientos locales, UMAP equilibra ambos, y el Análisis de Correspondencias (CA) relaciona keywords con otras variables (como revistas o países).
Ver código
import astimport pandas as pdfrom pathlib import PathOUTPUT = Path("../output")# Leer comunidades desde CSV (fuente de verdad) y crear partition con etiquetascomm_df = pd.read_csv(OUTPUT /"communities_labeled.csv")# Etiqueta corta: solo la keyword principal (la más frecuente)label_map = {row["community"]: row["label"].split(" / ")[0] for _, row in comm_df.iterrows()}# partition: keyword → etiqueta corta de comunidadpartition = {}for _, row in comm_df.iterrows(): kws = ast.literal_eval(row["keywords"]) ifisinstance(row["keywords"], str) else []for kw in kws: partition[kw] = label_map[row["community"]]print("Partición con etiquetas lista para visualización.")
UMAP (Uniform Manifold Approximation and Projection) preserva tanto la estructura local como la global del espacio de keywords. Es el método recomendado para layout de grafos bibliométricos porque produce agrupamientos visualmente interpretables.
El Escalado Multidimensional (MDS) minimiza la diferencia entre las distancias en el espacio original y las distancias en 2D. Los keywords que co-ocurren mucho aparecen juntos; los que nunca co-ocurren quedan alejados.
t-SNE (t-distributed Stochastic Neighbor Embedding) es excelente para revelar agrupamientos locales. La distancia global entre clusters NO es interpretable directamente, pero la cohesión interna de cada grupo sí lo es.
El Análisis de Correspondencias (CA) es un método de reducción para datos de frecuencia (tablas de contingencia). El biplot muestra simultáneamente las keywords (filas) y las revistas u otras variables (columnas), permitiendo identificar asociaciones entre ellas.
Ver código
from co_occurrence.viz.plotly_scatter import plot_ca_biplottry: row_coords = pd.read_csv(OUTPUT /"ca_row_coords.csv", index_col=0) col_coords = pd.read_csv(OUTPUT /"ca_col_coords.csv", index_col=0) fig_ca = plot_ca_biplot( row_coords=row_coords, col_coords=col_coords, title="Análisis de Correspondencias — keywords del corpus turístico", height=680, ) fig_ca.show()exceptExceptionas e:print(f"Error al cargar coordenadas CA: {e}")print("Verifica que output/ca_row_coords.csv y output/ca_col_coords.csv existen.")
Biplot de Análisis de Correspondencias — keywords y variables contextuales
Comparación de métodos
Método
Preserva distancias globales
Preserva agrupamientos locales
Interpretación de distancias
Uso recomendado
MDS
Sí
Parcial
Sí
Layout general, presentaciones
t-SNE
No
Sí
No
Exploración de clusters
UMAP
Parcial
Sí
Parcial
Layout de grafos, publicaciones
CA
N/A
N/A
Sí (entre filas y columnas)
Relación keyword-revista
Note
Todos los métodos usan como entrada la matriz de co-ocurrencia normalizada (Association Strength) entre las keywords del corpus. Las coordenadas se precalculan en el pipeline y se guardan en output/dimred_*.csv.
Source Code
---title: "Reducción dimensional"---La reducción dimensional permite visualizar la estructura del espacio de keywords en 2D.Cada método revela distintos aspectos: MDS preserva distancias globales, t-SNE muestraagrupamientos locales, UMAP equilibra ambos, y el Análisis de Correspondencias (CA)relaciona keywords con otras variables (como revistas o países).```{python}#| label: setup-dimredimport astimport pandas as pdfrom pathlib import PathOUTPUT = Path("../output")# Leer comunidades desde CSV (fuente de verdad) y crear partition con etiquetascomm_df = pd.read_csv(OUTPUT /"communities_labeled.csv")# Etiqueta corta: solo la keyword principal (la más frecuente)label_map = {row["community"]: row["label"].split(" / ")[0] for _, row in comm_df.iterrows()}# partition: keyword → etiqueta corta de comunidadpartition = {}for _, row in comm_df.iterrows(): kws = ast.literal_eval(row["keywords"]) ifisinstance(row["keywords"], str) else []for kw in kws: partition[kw] = label_map[row["community"]]print("Partición con etiquetas lista para visualización.")```## Comparación de métodos::: {.panel-tabset}### UMAPUMAP (Uniform Manifold Approximation and Projection) preserva tanto la estructura localcomo la global del espacio de keywords. Es el método recomendado para layout de grafosbibliométricos porque produce agrupamientos visualmente interpretables.```{python}#| label: umap-scatter#| fig-cap: "Proyección UMAP — colores por comunidad Louvain"from co_occurrence.viz.plotly_scatter import plot_manifold_scattercoords_umap = pd.read_csv(OUTPUT /"dimred_umap.csv")fig_umap = plot_manifold_scatter( coords_umap, partition=partition, method="UMAP", height=640,)fig_umap.show()```### MDSEl Escalado Multidimensional (MDS) minimiza la diferencia entre las distancias en elespacio original y las distancias en 2D. Los keywords que co-ocurren mucho aparecenjuntos; los que nunca co-ocurren quedan alejados.```{python}#| label: mds-scatter#| fig-cap: "Proyección MDS — colores por comunidad Louvain"coords_mds = pd.read_csv(OUTPUT /"dimred_mds.csv")fig_mds = plot_manifold_scatter( coords_mds, partition=partition, method="MDS", height=640,)fig_mds.show()```### t-SNEt-SNE (t-distributed Stochastic Neighbor Embedding) es excelente para revelaragrupamientos locales. La distancia global entre clusters NO es interpretabledirectamente, pero la cohesión interna de cada grupo sí lo es.```{python}#| label: tsne-scatter#| fig-cap: "Proyección t-SNE — colores por comunidad Louvain"coords_tsne = pd.read_csv(OUTPUT /"dimred_tsne.csv")fig_tsne = plot_manifold_scatter( coords_tsne, partition=partition, method="t-SNE", height=640,)fig_tsne.show()```### Análisis de CorrespondenciasEl Análisis de Correspondencias (CA) es un método de reducción para datos de frecuencia(tablas de contingencia). El biplot muestra simultáneamente las keywords (filas) y lasrevistas u otras variables (columnas), permitiendo identificar asociaciones entre ellas.```{python}#| label: ca-biplot#| fig-cap: "Biplot de Análisis de Correspondencias — keywords y variables contextuales"from co_occurrence.viz.plotly_scatter import plot_ca_biplottry: row_coords = pd.read_csv(OUTPUT /"ca_row_coords.csv", index_col=0) col_coords = pd.read_csv(OUTPUT /"ca_col_coords.csv", index_col=0) fig_ca = plot_ca_biplot( row_coords=row_coords, col_coords=col_coords, title="Análisis de Correspondencias — keywords del corpus turístico", height=680, ) fig_ca.show()exceptExceptionas e:print(f"Error al cargar coordenadas CA: {e}")print("Verifica que output/ca_row_coords.csv y output/ca_col_coords.csv existen.")```:::## Comparación de métodos| Método | Preserva distancias globales | Preserva agrupamientos locales | Interpretación de distancias | Uso recomendado ||--------|:---:|:---:|:---:|---------|| MDS | Sí | Parcial | Sí | Layout general, presentaciones || t-SNE | No | Sí | No | Exploración de clusters || UMAP | Parcial | Sí | Parcial | Layout de grafos, publicaciones || CA | N/A | N/A | Sí (entre filas y columnas) | Relación keyword-revista |::: {.callout-note}Todos los métodos usan como entrada la **matriz de co-ocurrencia normalizada** (AssociationStrength) entre las keywords del corpus. Las coordenadas se precalculan en el pipeliney se guardan en `output/dimred_*.csv`.:::