Innholdsfortegnelse:
Video: Thorstein Grotbæk: Hvordan Gud arbeider med oss 2025
De fleste datavitenskapsmenn må jobbe med grafdata på et tidspunkt. Python gir deg den funksjonaliteten. Tenk deg datapunkter som er koblet til andre datapunkter, for eksempel hvordan en nettside er koblet til en annen nettside gjennom hyperkoblinger. Hvert av disse datapunktene er en knutepunkt . Nodene koble til hverandre ved hjelp av koblinger .
Ikke alle knutepunkter kobles til hver annen knutepunkt, så knutepunktforbindelsene blir viktige. Ved å analysere noder og deres koblinger kan du utføre alle slags interessante oppgaver innen datavitenskap, for eksempel å definere den beste måten å komme seg fra arbeid til ditt hjem ved hjelp av gater og motorveier.
Forstå adjacencymatrisen
En adjacencymatrix representerer forbindelsene mellom noder på en graf. Når det er en forbindelse mellom en node og en annen, angir matrisen den som en verdi som er større enn 0. Den nøyaktige representasjonen av forbindelser i matrisen avhenger av om grafen er rettet (hvor retningen for forbindelsen er viktig) eller ubestemt.
Et problem med mange elektroniske eksempler er at forfatterne holder dem enkle for forklaring. Imidlertid er grafikker i virkeligheten ofte enorme og utfordrer enkel analyse bare gjennom visualisering. Tenk bare på antall noder som selv en liten by ville ha når man vurderer gatekryss. Mange andre grafer er langt større, og bare å se på dem vil aldri avsløre noen interessante mønstre. Dataforskere kaller problemet ved å presentere noen komplekse graf ved hjelp av en adjacencymatrix a hairball .
En nøkkel til å analysere adjacency matriser er å sortere dem på bestemte måter. For eksempel kan du velge å sortere dataene i henhold til andre egenskaper enn de faktiske forbindelsene. En graf over gateforbindelser kan inkludere datoen gaten var sist asfaltert med dataene, noe som gjør det mulig for deg å lete etter mønstre som leder noen basert på gatene som er i beste reparasjon. Kort sagt, å gjøre grafdataene nyttige blir et spørsmål om å manipulere organisasjonen av dataene på bestemte måter.
Bruke NetworkX-grunnleggende
Arbeide med grafer kan bli vanskelig hvis du måtte skrive all koden fra bunnen av. Heldigvis gjør NetworkX-pakken for Python det enkelt å lage, manipulere og studere strukturen, dynamikken og funksjonene til komplekse nettverk (eller grafer). Du kan også bruke pakken til å jobbe med digrafer og multigrafer også.
Hovedvekten i NetworkX er å unngå hele spørsmålet om hårboller.Bruken av enkle anrop skjuler mye av kompleksiteten ved å arbeide med grafer og adjacency matriser fra visning. Følgende eksempel viser hvordan du lager en grunnleggende adjacencymatrise fra en av de nettverkslevererte grafene:
import networkx som nx G = nx. cycle_graph (10) A = nx. adjacency_matrix (G) print (A. todense ())
Eksemplet begynner med å importere den nødvendige pakken. Det oppretter så en graf ved hjelp av cycle_graph () -malen. Grafen inneholder ti noder. Ringe adjacency_matrix () lager adjacencymatrisen fra grafen. Det siste trinnet er å skrive ut produksjonen som en matrise, som vist her:
[[0 1 0 0 0 0 0 0 0 1] [1 0 1 0 0 0 0 0 0 0] [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 [0 0 0 1 0 1 0 0 0 0] [0 0 0 0 1 0 1 0 0 0] [0 0 0 0 0 1 0 1 0 0 [0 0 0 0 0 0 0 0 1 0 1 0] [0 0 0 0 0 0 0 1 0 1] [1 0 0 0 0 0 0 0 0 0]]
Du trenger ikke bygg din egen graf fra grunnen til testformål. NetworkX-nettstedet dokumenterer en rekke standard graftyper som du kan bruke, som alle er tilgjengelige i IPython.
Det er interessant å se hvordan grafen ser etter at du genererer den. Følgende kode viser grafen for deg.
import matplotlib. pyplot som plt nx. draw_networkx (G) plt. show ()
Plottet viser at du kan legge til en kant mellom noder 1 og 5. Her er koden som trengs for å utføre denne oppgaven ved hjelp av add_edge () -funksjonen.
G. add_edge (1, 5) nx. draw_networkx (G) plt. Vis ()
