seminario_grafos / local_graphs.py
matthsena2's picture
fix: resolvendo problema do PageRank
f7b4b62
import pandas as pd
import networkx as nx
import numpy as np
# CARREGANDO DATAFRAME
df_rio = pd.read_csv('./dataset.csv')
df_rio['original_id'] = df_rio['original'] + '/' + df_rio['original_photo']
df_rio['compare_id'] = df_rio['compare'] + '/' + df_rio['compare_photo']
# CRIANDO GRAFO
G = nx.Graph()
for index, row in df_rio.iterrows():
if row['original_id'] not in G:
G.add_node(row['original_id'])
if row['compare_id'] not in G:
G.add_node(row['compare_id'])
weight = row['distance']
G.add_edge(row['original_id'], row['compare_id'], weight=weight)
def get_graph():
return G
def get_page_rank_graph():
# CRIANDO GRAFO PARA PAGE RANKING
G_pr = nx.Graph()
for index, row in df_rio.iterrows():
if row['original_id'] not in G_pr:
G_pr.add_node(row['original_id'])
if row['compare_id'] not in G_pr:
G_pr.add_node(row['compare_id'])
weight = np.abs(row['distance'] - 1)
G_pr.add_edge(row['original_id'], row['compare_id'], weight=weight)
return G_pr
# ALGORITMOS DE RECOMENDAÇÃO
def recommend_dijkstra(graph, original_id):
distances, paths = nx.single_source_dijkstra(
graph, original_id, weight='weight')
recommended_paths = sorted(
paths.items(), key=lambda item: distances[item[0]])
return recommended_paths
def recommend_floyd_warshall(graph, original_id):
distances = nx.floyd_warshall_numpy(graph, weight='weight')
nodes = list(graph.nodes())
original_index = nodes.index(original_id)
recommended_indices = sorted(
range(len(nodes)), key=lambda i: distances[original_index][i])
recommended_paths = [(nodes[i], distances[original_index][i])
for i in recommended_indices]
return recommended_paths
def recommend_page_rank(graph, start_node):
personalization = {node: 0 for node in graph.nodes()}
personalization[start_node] = 1
personalized_pagerank_scores = nx.pagerank(
graph, personalization=personalization, weight='weight')
recommended_paths = sorted(
personalized_pagerank_scores.items(), key=lambda item: item[1], reverse=True)
return recommended_paths