Spaces:
Sleeping
Sleeping
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 | |