mangiafrangette / the_fellowship_of_the_loop

Computational thinking project - DHDK 2018/19
1 stars 1 forks source link

last aut_distance #6

Open federicabologna opened 5 years ago

federicabologna commented 5 years ago

Only author test: with "Michel Dumontier" returned same output Efficiency test: it's slightly more efficient. Best performance: 3.35 Old code's best performance is 3.45

def do_aut_distance(data, sse, aut):
    coauthors_to_do = list()
    coauthors_to_do.append(aut)
    coauthors_done = set()
    current_coauthors = []
    coauthors_graph = Graph()
    coauthors_graph.add_node(aut)

    while coauthors_to_do:
        for author in coauthors_to_do:
            for dict in sse.data:
                if author in dict['authors'].split('; '):
                    current_coauthors.extend(dict['authors'].split('; '))
                    current_coauthors.remove(author)
                    coauthors_to_do.extend([coauthor for coauthor in current_coauthors if coauthor not in coauthors_to_do and coauthor not in coauthors_done])

            counted_coauthors = Counter(current_coauthors).items()
            for coauthor_name, count in counted_coauthors:
                if coauthor_name not in coauthors_done:
                    coauthors_graph.add_edge(author, coauthor_name, co_authored_papers=count)
            current_coauthors.clear()
            coauthors_to_do.remove(author)
            coauthors_done.add(author)
            number_edges = nx.shortest_path_length(coauthors_graph, source=author, target=aut)
            coauthors_graph.add_node(author, distance=number_edges)

    return coauthors_graph
federicabologna commented 5 years ago

Da copincollare in sne_execution_example al posto del/dopo il vecchio test_aut_distance

def test_aut_distance(my_sne):
    start = time.perf_counter()
    authors_set = set()
    for dict in my_sne.sse.data:
        authors_set.update(dict["authors"].split("; "))
    for aut in authors_set:
        aut_distance_graph = my_sne.aut_distance(aut)
        print(aut_distance_graph.nodes(data=True))
        print(aut_distance_graph.edges(data=True))
    end = time.perf_counter()
    print(end - start)
    return aut_distance_graph
print(test_aut_distance(my_sne))