Kontrola smyček na stejném uzlu (self-loops) v grafu
Jak Eric zmínil, NetworkX umožňuje také hrany, které začínají i končí na stejném uzlu. Pro graf sociální sítě by to bylo neintuitivní, ale hodí se například pro modelování sítí cest, kde osoba začíná i končí na stejném místě.
Před další analýzou je užitečné tuto vlastnost ověřit. NetworkX za tím účelem nabízí metodu nx.number_of_selfloops(G).
V tomto cvičení i v dalších ti přijde vhod příkaz assert. Výraz assert zkontroluje, zda je podmínka za ním vyhodnocena jako True — pokud ne, vyvolá AssertionError.
Nejdřív zavolej funkci nx.number_of_selfloops() s argumentem T v IPython Shellu, abys zjistil/a počet hran, které začínají i končí na stejném uzlu. Do grafu bylo uměle přidáno několik takových smyček. Tvým úkolem je napsat funkci, která tyto hrany vrátí.
Toto cvičení je součástí kurzu
Úvod do analýzy sítí v Pythonu
Pokyny k cvičení
- Definuj funkci
find_selfloop_nodes(), která přijímá jeden argument:G.- Pomocí smyčky
foriteruj přes všechny hrany vG(bez metadat). - Pokud se uzel
urovná uzluv:- Přidej
udo seznamunodes_in_selfloops. - Vrať seznam
nodes_in_selfloops.
- Přidej
- Pomocí smyčky
- Ověř, že počet smyček v grafu odpovídá počtu uzlů v těchto smyčkách. Tato část je už hotová — stačí kliknout na Submit Answer a podívat se na výsledek!
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))