Sprawdzanie, czy graf zawiera pętle własne
Jak omówił Eric, NetworkX umożliwia tworzenie krawędzi, które zaczynają się i kończą w tym samym węźle. W kontekście sieci społecznościowej brzmi to mało intuicyjnie, ale jest przydatne do modelowania takich danych jak sieci podróży – gdzie dana osoba wyrusza z jednego miejsca i kończy trasę w innym.
Warto sprawdzić obecność takich krawędzi przed przystąpieniem do dalszych analiz. NetworkX udostępnia do tego celu metodę: nx.number_of_selfloops(G).
W tym ćwiczeniu – podobnie jak w kolejnych – przyda ci się instrukcja assert. Sprawdza ona, czy wyrażenie umieszczone po niej zwraca wartość True; w przeciwnym razie zgłaszany jest błąd AssertionError.
Na początek wywołaj funkcję nx.number_of_selfloops(), przekazując jako argument T w powłoce IPython, aby sprawdzić liczbę krawędzi zaczynających się i kończących w tym samym węźle. Do grafu dodano syntetycznie pewną liczbę pętli własnych. Twoim zadaniem jest napisanie funkcji, która zwróci te krawędzie.
To ćwiczenie jest częścią kursu
Wprowadzenie do analizy sieci w Pythonie
Instrukcje do ćwiczenia
- Zdefiniuj funkcję o nazwie
find_selfloop_nodes(), przyjmującą jeden argument:G.- Używając pętli
for, iteruj po wszystkich krawędziach wG(bez metadanych). - Jeśli węzeł
ujest równy węzłowiv:- Dodaj
udo listynodes_in_selfloops. - Zwróć listę
nodes_in_selfloops.
- Dodaj
- Używając pętli
- Sprawdź, czy liczba pętli własnych w grafie jest równa liczbie węzłów w pętlach własnych. Ten krok jest już gotowy – kliknij Prześlij odpowiedź, aby zobaczyć wynik!
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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))