Jestem nowy przy użyciu Pythona do pracy z wykresami: NetworkX. Do tej pory używałem Gephi. Tam standardowe kroki (ale nie jedyne możliwe) to:Ładowanie węzłów z atrybutami i krawędziami z DataFrame do NetworkX
Załaduj informacje o węzłach z tabeli/arkusza kalkulacyjnego; jedna z kolumn powinna być identyfikatorem, a reszta to metadane dotyczące węzłów (węzły to ludzie, więc płeć, grupy ... zwykle używane do kolorowania). Jak:
id;NormalizedName;Gender per1;Jesús;male per2;Abraham;male per3;Isaac;male per4;Jacob;male per5;Judá;male per6;Tamar;female ...
Następnie załaduj krawędzie również z tabeli/arkusza kalkulacyjnego, przy użyciu tych samych nazw dla węzłów, jak to było w ID kolumnie arkusza węzłów z normalnie cztery kolumny (cel, Source, waga i typ):
Target;Source;Weight;Type per1;per2;3;Undirected per3;per4;2;Undirected ...
To są dwa dataframes że mam i że chcę, aby załadować w Pythonie. Czytając o NetworkX, wydaje się, że nie jest to całkiem możliwe, aby załadować dwie tabele (jeden dla węzłów, jeden na krawędziach) na tym samym wykresie i nie jestem pewien, co byłoby najlepszym sposobem:
należy utworzyć wykres tylko z informacjami o węzłach z DataFrame, a następnie dodać (dołączyć) krawędzie z innej DataFrame? Jeśli tak, a ponieważ nx.from_pandas_dataframe() oczekuje informacji o krawędziach, to chyba nie powinienem go używać do tworzenia węzłów ... Czy powinienem przekazywać informacje jako listy?
Czy mogę utworzyć wykres tylko z informacjami o krawędziach z DataFrame, a następnie dodać do każdego węzła informacje z innych DataFrame jako atrybuty? Czy istnieje lepszy sposób robienia tego niż iterowanie przez DataFrame i węzły?
Awesome, thanks! Lista moich węzłów obejmuje także niektóre węzły, których czasami nie potrzebuję, więc najpierw zrobiłem listę wszystkich nazw węzłów z krawędzi i filtrowałem tabelę węzłów, używając tych informacji: 'entities_edges = posortowane (lista (ustaw (krawędzie ["Cel"]. tolist() + krawędzie ["Źródło"]. tolist()))); węzły = pd.read_csv (katalog_wejściowy + węzły_pliku, kodowanie = "utf-8", sep = "\ t"); węzły = węzły [węzły ['id']. Isin (entity_edges)]; ' A potem podążałem za tym, co powiedziałeś. Co o tym myślisz? Wielkie dzięki za odpowiedź! –
Wydaje się poprawne na pierwszy rzut oka. Zawsze możesz filtrować je później w Gephi, ponieważ ich stopień będzie zerowy. –
Jeśli używasz podejścia słownikowego z 'set_node_attributes', nie musisz się martwić o węzły, które nie są zawarte w' entity_edges'. Niepołączone węzły mogą być następnie usunięte z wykresu za pomocą 'G.remove_nodes_from (nx.isolates (G))'. – harryscholes