¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo se ordenan las páginas por sus enlaces

Después de esta lección: Puedo explicar cómo el rango de una página fluye por los enlaces hasta asentarse.

Lección de 60 min1 comandoLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Una página importante es la que otras enlazan

El ranking por enlaces ordena las páginas según quién las enlaza: una página es importante si otras páginas importantes apuntan a ella. Funciona como un voto, y el voto de una página muy votada vale más.

Sirve cuando el texto no basta. Dos páginas pueden hablar de lo mismo con las mismas palabras, y los enlaces ayudan a decidir cuál merece el primer puesto.

Al final de esta lección

Nota

Puedo explicar cómo el rango de una página fluye por los enlaces hasta asentarse.

Palabras clave

PalabraQué significa
Enlace de salidaun enlace que va de esta página a otra
Enlace de entradaun enlace que llega a esta página desde otra
Rangoel número que dice cuánto pesa una página
Factor de amortiguaciónla parte del rango que viaja por los enlaces
Iteraciónrepetir el mismo cálculo con el resultado anterior

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un enlace es un voto para otra página

Un enlace de salida de una página es un enlace de entrada de otra. Contar los enlaces de entrada da una primera idea de la importancia de una página.

Pero no todos los votos valen igual. Un enlace desde una página que todo el mundo enlaza pesa más que uno desde una página que nadie visita.

Ejemplo resuelto: cuatro páginas de una facultad

PáginaEnlaza aEnlaces de entrada
iniciobecas, horarios3: becas, horarios, contacto
becasinicio2: inicio, horarios
horariosinicio, becas1: inicio
contactoinicio0

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada página reparte su rango entre sus enlaces

Todas empiezan con el mismo rango: un cuarto cada una. En cada paso, una página reparte su rango a partes iguales entre sus enlaces de salida. Con dos enlaces, cada uno recibe la mitad.

Una página suma lo que recibe y lo multiplica por el factor de amortiguación, aquí 0,8. El 0,2 restante se reparte a partes iguales, como un lector que salta a una página al azar.

Ejemplo resuelto: el primer paso de «inicio»

De quién recibeRango que tieneEnlaces de salidaRecibe
becas0,2510,25
horarios0,2520,125
contacto0,2510,25
Suma recibida0,625
Rango nuevo0,2 entre 4, más 0,8 por 0,6250,55

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Comprueba la cuenta de «inicio»

Comando
docker exec jupyter python3 -c "print(round(0.2/4 + 0.8*(0.25/1 + 0.25/2 + 0.25/1), 4))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Calcula un paso para las cuatro páginas

Código: python
# Un paso: cada página reparte su rango entre sus enlaces de salida.
links = {
    "inicio": ["becas", "horarios"],
    "becas": ["inicio"],
    "horarios": ["inicio", "becas"],
    "contacto": ["inicio"],
}
rango = {}
for pagina in links:
    rango[pagina] = 0.25
nuevo = {}
for pagina in links:
    recibido = 0.0
    for origen in links:
        if pagina in links[origen]:
            recibido = recibido + rango[origen] / len(links[origen])
    nuevo[pagina] = 0.2 / 4 + 0.8 * recibido
for pagina in nuevo:
    print(pagina, round(nuevo[pagina], 3))
# Añade "contacto" a los enlaces de "inicio" y ejecuta.

Se repite el cálculo hasta que se asienta

Un paso no basta: el rango que una página reparte ya ha cambiado. Se repite el paso con los rangos nuevos, una y otra vez. Cada repetición es una iteración.

Tras unas pocas, los rangos casi no cambian y el orden queda fijo. Entonces se dice que el cálculo se ha asentado. Los rangos de todas las páginas siguen sumando 1.

Ejemplo resuelto: los rangos paso a paso

Pasoiniciobecashorarioscontacto
00,250,250,250,25
10,550,250,150,05
20,350,330,270,05
30,4620,2980,190,05
300,4230,3070,2190,05

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Repite el paso treinta veces

Código: python
# Repetir el paso hasta que los rangos se asientan.
links = {
    "inicio": ["becas", "horarios"],
    "becas": ["inicio"],
    "horarios": ["inicio", "becas"],
    "contacto": ["inicio"],
}

def one_step(rank):
    new = {}
    for page in links:
        received = 0.0
        for source in links:
            if page in links[source]:
                received = received + rank[source] / len(links[source])
        new[page] = 0.2 / 4 + 0.8 * received
    return new

rank = {}
for page in links:
    rank[page] = 0.25
for step in range(30):
    rank = one_step(rank)
for page in rank:
    print(page, round(rank[page], 3))
# Cambia 30 por 2 y compara con la tabla.

Un error muy común

Advertencia

Mucha gente cree que gana la página con más enlaces de entrada. Cuenta también quién enlaza: un voto de una página importante vale más que varios de páginas que nadie enlaza. Además, el rango por enlaces se combina con el texto, no lo sustituye.

Para ir más lejos: tu propia web

Dibuja seis páginas con sus enlaces, de modo que cada una tenga al menos un enlace de salida. Calcula su rango con el código de arriba.

Predice antes quién gana. Después cambia un enlace y mira qué página gana o pierde puestos.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.