Escolar Documentos
Profissional Documentos
Cultura Documentos
Caio Marques
caiomarques.eng@poli.ufrj.br
Professor: Marcelo Campos
31/12/2022
Sumário
1 Resumo 1
2 Introdução 1
3 Desenvolvimento do sistema 1
4 Resultados 2
5 Conclusões 3
6 Referências 3
7 Anexo do código 4
1 Resumo
Após a leitura do PDF e muita pesquisa, montei um código em Phyton que gera um gráfico com
setas, indicando entre os 8 sites qual possue link para o outro, além disso gera como resultado a
matriz L, sua transformação para uma matriz probabilidade de transição, depois gera a matriz com
d (ou alpha) = 0.9 (ou 90%) e por fim indica os valores das relevâncias de todos os sites usados em
ordem.
2 Introdução
Primeiramente é preciso fazer a leitura do gráfico fornecido, qual site liga atráves de uma seta
para o outro e qual esta sendo ligado por uma seta, para prosseguir com a matriz L inicial. Por isso
criei está tabela, facilitando a compreensão.
3 Desenvolvimento do sistema
Após usar a tabela criada como base e gerar a matriz L, foi preciso desenvolver o código em
Python, que transforme a matriz em uma matriz probabilidade de transição, no caso, se o site possue
2 links de direcionamento os 1 na coluna da matriz L viram 1/2, caso o site possue 3 links, os 1 viram
1/3 e assim em diante.
Depois de criado a matriz probabilidade de transição utilizamos a incerteza do d = 0.9, para
indicar a possibilidade do indivı́duo acessar o site sem clicar em links, no caso 90% de chance disso
acontecer.
Por fim, é feito o cálculo para achar a relevância de cada site, citando seus valores ao final.
1
4 Resultados
• Gráfico:
• Matriz L:
[[0. 1. 0. 0. 0. 0. 1. 0.]
[1. 0. 0. 1. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0. 0. 0.]
[0. 1. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 1. 1. 0.]
[0. 0. 0. 0. 1. 0. 1. 0.]
[0. 0. 0. 0. 1. 0. 0. 0.]
[1. 0. 1. 0. 0. 0. 0. 0.]]
2
• Matriz com d = 0.9:
[[0.0125 0.4625 0.0125 0.0125 0.0125 0.0125 0.4625 0.0125]
[0.3125 0.0125 0.0125 0.3125 0.0125 0.3125 0.0125 0.0125]
[0.4625 0.0125 0.0125 0.4625 0.0125 0.0125 0.0125 0.0125]
[0.0125 0.4625 0.4625 0.0125 0.0125 0.0125 0.0125 0.0125]
[0.0125 0.0125 0.3125 0.0125 0.0125 0.3125 0.3125 0.0125]
[0.0125 0.0125 0.0125 0.0125 0.4625 0.0125 0.4625 0.0125]
[0.0125 0.0125 0.0125 0.0125 0.9125 0.0125 0.0125 0.0125]
[0.4625 0.0125 0.4625 0.0125 0.0125 0.0125 0.0125 0.0125]]
5 Conclusões
Após a conclusão do trabalho aprendi muito sobre o que é pagerank e como funciona esse sistema,
melhorei meus conhecimentos com autovalores e autovetores, desenvolvi minhas habilidades de pro-
gramação em phython importante bibliotecas que nunca tinha usado e melhorei minha habilidade
com a realização de relatórios, no caso, este relatório foi feito pelo sistema LaTeX no overleaf.
6 Referências
• http://pi.math.cornell.edu/ mec/Winter2009/RalucaRemus/Lecture3/lecture3.html
• https://www.cs.bu.edu/fac/crovella/cs132-book/L19PageRank.html
• https://openai.com/blog/chatgpt/
• https://www.youtube.com/watch?v=s9TSfY5nQJA
3
7 Anexo do código
1 import networkx as nx
2 import matplotlib . pyplot as plt
3 import numpy as np
4
5 g = nx . DiGraph ()
6 g . add_nodes_from ([ ’A ’ , ’B ’ , ’C ’ , ’D ’ , ’E ’ , ’F ’ , ’G ’ , ’H ’ ])
7 g . add_edge ( ’A ’ , ’B ’)
8 g . add_edge ( ’A ’ , ’G ’)
9 g . add_edge ( ’B ’ , ’A ’)
10 g . add_edge ( ’B ’ , ’D ’)
11 g . add_edge ( ’B ’ , ’F ’)
12 g . add_edge ( ’C ’ , ’A ’)
13 g . add_edge ( ’C ’ , ’D ’)
14 g . add_edge ( ’D ’ , ’B ’)
15 g . add_edge ( ’D ’ , ’C ’)
16 g . add_edge ( ’E ’ , ’C ’)
17 g . add_edge ( ’E ’ , ’F ’)
18 g . add_edge ( ’E ’ , ’G ’)
19 g . add_edge ( ’F ’ , ’E ’)
20 g . add_edge ( ’F ’ , ’G ’)
21 g . add_edge ( ’G ’ , ’E ’)
22 g . add_edge ( ’H ’ , ’A ’)
23 g . add_edge ( ’H ’ , ’C ’)
24
25 options = {
26 ’ node_color ’: ’ red ’ ,
27 ’ node_size ’: 1000 ,
28 ’ width ’: 1 ,
29 ’ arrowstyle ’: ’ -| > ’ ,
30 ’ arrowsize ’: 20 ,
31 }
32
38 L = nx . to_numpy_matrix ( g )
39 print ( L )
40
41 N = L . shape [0]
42 P = np . zeros (( N , N ) )
43 for i in range (0 , N ) :
44 for j in range (0 , N ) :
45 if ( np . sum ( L [i ,:]) > 0) :
46 P [i , j ] = L [i , j ]/ np . sum ( L [i ,:])
47 else :
48 P [i , j ] = 1/ N
49 print ( P )
4
50
51 G = np . zeros (( N , N ) )
52 alpha = 0.85
53 for i in range (0 , N ) :
54 for j in range (0 , N ) :
55 G [i , j ] = alpha * P [i , j ] + (1 - alpha ) / N
56 print ( G )
57