Artigos

15.3: Construindo Modelos de Rede com NetworkX - Matemática


Agora que concluímos o curso intensivo acima sobre terminologias da teoria dos grafos, é hora de começar com a modelagem computacional de redes. Como vimos brevemente nas Seções 5.4 e 12.2, há um módulo Python maravilhoso chamado NetworkX [27] para modelagem e análise de rede. É um kit de ferramentas de análise de rede gratuito amplamente utilizado por pesquisadores de rede. Se você estiver usando o Anaconda, o NetworkX já está instalado. Se você estiver usando o Enthought Canopy, ainda poderá instalar facilmente o NetworkX usando seu Gerenciador de Pacotes. Você pode encontrar a documentação para NetworkX online emhttp://networkx.github.io.

Talvez valha a pena mencionar porque estamos escolhendo NetworkX em vez de outras opções. Em primeiro lugar, suas funções são todas escritas em Python, e seus códigos-fonte estão todos disponíveis no site acima, para que você possa verificar os detalhes de seus algoritmos e até mesmo modificar os códigos se desejar. Em segundo lugar, o NetworkX usa os "dicionários" simples do Python para armazenar informações sobre redes, que são totalmente acessíveis e flexíveis para armazenar informações adicionais que você deseja adicionar. Esta propriedade é particularmente importante quando implementamos modelos de simulação de redes dinâmicas. Estruturas de dados especializadas implementadas em outras ferramentas de análise de rede podem não ter essa flexibilidade.

Então, vamos primeiro falar sobre a estrutura de dados usada no NetworkX. Existem os seguintes quatro tipos de dados diferentes (chamados de “classes”) que o NetworkX oferece:
Gráfico Para gráficos simples não direcionados (self-loops são permitidos)
Dígrafo Para gráficos simples direcionados (self-loops são permitidos)
MultiGraph Para multigrafos não direcionados (auto-loops e arestas múltiplas são permitidos)
MultiDiGraph Para multigrafos direcionados (auto-loops e arestas múltiplas são permitidos)

Você pode escolher um desses quatro tipos de dados que atenda aos seus objetivos de modelagem. Neste livro, usaremosGráficoeDígrafona maioria das vezes.

Você pode construir seu próprio gráfico manualmente. Aqui está um exemplo:

Aqui, usei strings para os nomes dos nós, mas o nome de um nó pode ser um número, uma string, uma lista ou qualquer objeto "hashble" em Python. Por exemplo, no código de visualização do espaço de fase na Seção 5.4, usamos uma tupla para o nome de cada nó.

Acredito que cada comando usado acima para adicionar ou remover nós / arestas é bastante autoexplicativo. Caso contrário, você pode sempre consultar a documentação online do NetworkX para saber mais sobre como cada comando funciona. Existem também várias outras maneiras de manipular um objeto gráfico, que não são detalhadas aqui.

Depois que esse código é executado, você pode ver os resultados na linha de comando do Python, como este:

A primeira saída (“<networkx.classes. ...> ”) mostra quegé umGráficoobjeto. Para ver o conteúdo dos dados no objeto, precisamos usar alguns comandos.g.nodes ()retorna uma lista de todos os nós da rede, enquantog.edges ()retorna uma lista de todas as arestas. Compare esses resultados com os comandos que usamos acima para verificar se as adições / remoções de nós / arestas foram realizadas corretamente.

Aquelesnós ()earestas()são funções que lêem os dados brutos dentro doGráficoobjeto ge, em seguida, produz uma lista limpa de nós ou arestas. Mas NetworkX também permite que você tenha acesso direto à estrutura de dados brutos internos do objeto Graph. Os dados sobre os nós são armazenados em um dicionário chamadologo abaixog:

Este é um dicionário cujas chaves e valores são os nomes dos nós e suas propriedades, respectivamente. As propriedades de cada nó também são armazenadas em um dicionário (inicialmente estão todas vazias, como mostrado acima), então você pode adicionar ou modificar dinamicamente qualquer propriedade de nó da seguinte maneira:

Usaremos este método para adicionar estados dinâmicos aos nós na Seção 16.2.

Da mesma forma, os dados sobre as bordas também são armazenados em um dicionário chamadoBeirasob g:

É um pouco difícil de ler, então deixe-me inserir quebras de linha nos lugares apropriados para que a estrutura dos dados seja mais clara:

Agora sua estrutura é muito mais clara.g.edgeé um dicionário que descreve as bordas da rede nolista de adjacênciaformato. Cada entrada deg.edgeé um par de nome do nó e um dicionário que contém seus vizinhos. Por exemplo, a primeira entrada diz que Jeff está conectado a Jane e Jill. Observe que as conexões são perfeitamente simétricas; se Jeff estiver conectado a Jane, a entrada de Jane (na última linha) também conterá Jeff como seu vizinho. Essa simetria é mantida automaticamente pela NetworkX, porque estaGráficoobjeto é para gráficos não direcionados.

Além disso, o nome de cada vizinho funciona como uma chave associada a outro dicionário no qual podemos armazenar propriedades da conexão (inicialmente eles estão todos vazios, como mostrado acima). Portanto, você pode adicionar ou modificar dinamicamente qualquer propriedade de borda da seguinte maneira:

Novamente, a saída é reformatada para melhorar a legibilidade. Observe que as novas propriedades de borda ('Confiar em’Entre Jeff e Jane; ’amor'Entre Josh e Jess) são inseridos corretamente nos respectivos dicionários, sempre mantendo a simetria entre os nós. Acabei de adicionarVerdadeiroamor'De Josh para Jess, que foi retribuído de Jess para Josh! Que mundo lindo. Isso tudo porque estamos usando umGráficoobjeto.

ODígrafoobjeto se comporta de maneira diferente. Ele é projetado para representar gráficos direcionados, portanto, as arestas são consideradas unilaterais. As simetrias não são mantidas automaticamente, conforme ilustrado no exemplo a seguir:

A última mensagem de erro significa que Jess não conhece um cara chamado Josh neste caso, porque o gráfico é assimétrico. A vida é difícil.

Exercício ( PageIndex {1} )

Represente a rede mostrada no Exercício 15.1 como umGráficoobjeto da NetworkX.

Exercício ( PageIndex {2} )

Representam uma pequena rede social ao seu redor (digamos, 10 pessoas) comoGráficoouDígrafoobjeto da NetworkX. Em seguida, adicione propriedades aos nós e arestas, como:

• Propriedades do nó: nome completo, idade, trabalho, endereço, etc.

• Propriedades da borda: relacionamento, peso da conexão, etc.

Nos exemplos acima, construímos modelos de rede manualmente adicionando ou removendo nós e arestas. Mas NetworkX também tem algumas funções integradas que podem gerar redes de formatos específicos com mais facilidade. Aqui estão alguns exemplos:

O último exemplo (Gráfico do Zachary's Karate Club) é um famoso exemplo clássico de redes sociais relatado por Wayne Zachary na década de 1970 [59]. É uma rede de amizades entre 34 membros de um clube de caratê em uma universidade dos EUA. As listas de bordas desses exemplos são as seguintes:

Exercício ( PageIndex {3} )

Construa um gráfico gerando um gráfico completo feito de 10 nós e, em seguida, conecte um novo nó adicional a cada um dos 10 nós, usando uma aresta cada.

Exercício ( PageIndex {4} )

Crie o gráfico do Zachary's Karate Club usando a função integrada do NetworkX e inspecione seus nós e arestas para ver se eles têm quaisquer propriedades não topológicas.


De DataFrame para Network Graph

Acabei de descobrir - acidentalmente - como exportar dados do JIRA tão naturalmente que comecei a pensar em maneiras de visualizar as informações e, potencialmente, obter alguns insights do conjunto de dados. Eu tropecei no conceito de gráficos de rede e a ideia rapidamente capturou minha imaginação. Percebi que posso usá-lo para contar histórias não apenas sobre as relações entre as pessoas, mas também entre as palavras! Mas PNL é um grande tópico, então que tal caminharmos primeiro e corrermos depois ?!

Esta é apenas uma introdução muito gentil, então não usaremos nenhum código extravagante aqui.

Os gráficos de rede “mostram as interconexões entre um conjunto de entidades” ¹ onde as entidades são nós e as conexões entre elas são representadas por meio de links ou arestas ¹. No gráfico abaixo, os pontos são os nós e as linhas são chamadas de arestas.

Neste post, compartilharei o código que nos permitirá visualizar rapidamente um dataframe Pandas usando um pacote de gráfico de rede popular: networkx.

Primeiro, vamos pegar nossos dados e carregá-los em um dataframe. Você pode baixar o conjunto de dados de amostra aqui.

Em segundo lugar, vamos cortar o dataframe para incluir apenas as colunas que queremos examinar. Nesse caso, queremos apenas as colunas ‘Responsável’ e ‘Relator’.

Terceiro, é hora de criar o mundo no qual o gráfico existirá. Se ainda não o fez, instale o pacote networkx fazendo uma rápida instalação pip networkx.

Então, vamos preencher o gráfico com as colunas & # x27Assignee & # x27 e & # x27Reporter & # x27 do dataframe df1.

A seguir, materializaremos o gráfico que criamos com a ajuda de matplotlib para formatação.

A linha mais importante no bloco acima é nx.draw_shell (G, with_labels = True). Diz ao computador para desenhar o gráfico G usando um layout de concha com os rótulos das entidades ativados.

Voilà! Temos um gráfico de rede:

Logo de cara, podemos dizer que há uma grande concentração de falas originadas de três jogadores principais, ‘barbie.doll’, ‘susan.lee’ e ‘joe.appleseed’. Claro, só para ter certeza, é sempre uma boa ideia confirmar nossa ‘visão’ com alguns números concretos.

Rodada Bônus

Vamos dar uma olhada em ‘barbie.doll’.

Para ver quantas conexões ‘barbie.doll’ tem, vamos usar len ():

A seguir, vamos criar outro dataframe que mostra os nós e seu número de conexões.

No bloco de código acima, primeiro inicializamos um dicionário vazio chamado 'tabela de classificação' e, em seguida, usamos um loop for simples para preencher o dicionário com nomes e número de conexões. Então, criamos uma série fora do dicionário. Finalmente, criamos outro dataframe da série que criamos usando to_frame ().

Para exibir o dataframe, simplesmente usamos df2.head () e obtemos um placar de líderes!

E é isso! Com algumas linhas de código simples, rapidamente fizemos um gráfico de rede a partir de um dataframe do Pandas e até exibimos uma tabela com nomes e número de conexões.

Eu espero que você tenha gostado deste. A análise de gráfico de rede é um grande tópico, mas espero que esta introdução gentil o incentive a explorar mais e expandir seu repertório.

No próximo artigo, examinarei o visual personalizado do Power BI chamado ‘Network Navigator’ para criar um gráfico de rede com apenas alguns cliques do mouse.


Gráficos e algoritmos de gráfico & # 182

O uso de gráficos é bastante difundido na computação. Muitos problemas diários e práticos podem ser modelados em gráficos. Começaremos examinando como construir e desenhar alguns tipos de gráficos e, em seguida, discutiremos alguns algoritmos fundamentais que podemos usar com eles. Para realmente realizar os cálculos, usaremos um módulo Python chamado NetworkX.

Lembre-se de que um grafo consiste em uma coleção de nós e uma coleção de arestas entre eles. Os gráficos normalmente vêm em dois sabores: não direcionado e direcionado, cada um com sua própria finalidade. Aqui estão alguns problemas de modelo onde cada tipo de gráfico pode ocorrer.

Nosso primeiro problema é com um provedor de serviços de Internet que gostaria de expandir seus serviços e fornecer Internet de fibra ótica para uma cidade. Claro, eles querem fazer isso com o menor custo.

A fim de descobrir a melhor maneira de fazer isso, modelaremos os locais que devemos conectar como nós em um gráfico e linhas potenciais de cabo para passar como arestas (não direcionadas). Além disso, essas bordas são ponderadas por um custo devido a coisas como o custo do cabo ou a mão de obra necessária para cavar valas para o cabo. Como devemos resolver esse problema?

Claro, esta é uma versão bastante simplificada de um problema mais realista, pois estamos focados em um sentido estreito de conectividade. Um requisito mais razoável criaria alguma redundância. Por exemplo, se um cabo fosse danificado, a rede inteira não cairia.

Nosso segundo problema diz respeito ao agendamento. O que temos é um monte de tarefas que devem ser concluídas, o problema é que algumas das tarefas não podem ser iniciadas até que outras sejam concluídas. Por exemplo, se você está construindo uma casa, deve escavar o solo antes de lançar a base. Por outro lado, determinar o tipo de luz ou papel de parede que você gostaria é totalmente independente e outra pessoa pode fazer isso simultaneamente.

Vamos modelar este problema como um gráfico direcionado onde as tarefas são os nós e as arestas direcionadas codificam as dependências entre as tarefas. Portanto, talvez haja uma borda "Tarefa A - & gt Tarefa B" se a "Tarefa B" exigir que a "Tarefa A" seja concluída primeiro. Veremos que existe um bom algoritmo chamado classificação topológica, que nos dá uma lista ordenada de tarefas que garante que todas as dependências sejam atendidas à medida que completamos a lista.


Redes do mundo real

As redes do mundo real e, em particular, as redes sociais têm uma estrutura única que muitas vezes as difere das redes matemáticas aleatórias:

    fenômeno afirma que as redes reais muitas vezes têm caminhos muito curtos (em termos de número de saltos) entre quaisquer membros da rede conectados. Isso se aplica a redes sociais reais e virtuais (a teoria dos seis handshakes) e a redes físicas, como aeroportos ou eletricidade de roteamentos de tráfego da web. com distribuição de grau de lei de potência tem uma população distorcida com alguns nós altamente conectados (como influências sociais) e muitos nós vagamente conectados. é a tendência dos indivíduos de se associarem e se relacionarem com outros semelhantes, o que resulta em propriedades semelhantes entre os vizinhos.

Tentando instalar o pydot para usar com o networkx no Python 3.5

Só recentemente comecei a usar Python 3.5 no meu mac, que está executando o Yosemite, e estou tentando usar o módulo networkx para compilar e gerar alguns visuais para gráficos / modelos de rede. Não tenho muita experiência em programação, então peço desculpas se omitir alguns detalhes.

Eu instalei o networkx com sucesso (sou capaz de usar comandos dele), mas atualmente estou lutando para instalar um dos módulos opcionais que facilita a geração de plotagens: GraphViz. Tentei instalar o GraphViz executando através do prompt de comando os comandos de instalação setup.py, mas a instalação do GraphViz aparentemente requer outro módulo, PyDot (PyDot2 para ser mais específico: pydot2-1.0.33-py3.5.egg.info). Aí está o problema porque não consigo fazer o PyDot funcionar corretamente - continuo recebendo o seguinte erro ao executar o comando networkx que usa PyDot (test2.py é um modelo gráfico de teste):

Depois de fazer algumas pesquisas e brincar, acho que o problema é que a versão do PyDot que instalei não é compatível com o Python 3.5. No entanto, não entendo como isso pode ser o caso, já que instalei o PyDot2, que diz explicitamente que é compatível com Python 3+.


Processar conjuntos de dados de aeroportos e rotas:

Networkx não pode ler os dados em sua forma bruta, então nosso primeiro trabalho é processar os dados para adquirir um dataframe limpo de rotas que podem ser lidas pelo Networkx. Aqui, usamos pandas para analisar arquivos do Excel em dataframes, extraia e processe as informações. Observe como os dois conjuntos de dados estão conectados pelo código do aeroporto (o código IATA de três letras). Você pode encontrar o código completo para processar os dados em meu código-fonte aqui.

O objetivo da nossa etapa de processamento de dados é adquirir os dois seguintes dataframes do Panda:

  • Um condensado routes_us data frame em que cada linha representa uma rota aérea exclusiva e o número total de companhias aéreas que operam nessa rota (por exemplo, há 3 companhias aéreas que operam o voo do Aeroporto Lehigh Valley (ABE) para o Aeroporto Internacional de Atlanta (ATL).

  • Um condensado posição dataframe onde cada linha representa cada aeroporto dos EUA com o código IATA e, mais importante, detalhes longitudinais e latitudinais

Com o dataframe anterior, estamos prontos para desenhar nosso primeiro esboço das redes de vôo.

No início, traduzimos nosso dataframe em um gráfico. Observe que nosso gráfico é um gráfico direcionado, ou seja, um gráfico com um conjunto de vértices conectados por arestas com direções associadas a eles. Isso significa que, em nosso gráfico, as duas rotas JFK-ATL e ATL-JFK são distintas, pois, embora conectem os mesmos 2 nós, as duas rotas têm direções diferentes (opostas).

Usamos Networkx's from_panda_dataframe () função para importar rapidamente nosso gráfico. Aqui, criamos um gráfico de nosso dataframe routes_us, onde a fonte é a coluna ‘Source Airport’, o destino é a coluna ‘Dest Airport’ usando um modelo de gráfico direcionado. edge_attr significa que podemos adicionar informações às bordas do gráfico. Eu adicionei o número de companhias aéreas operadas em uma rota como o atributo de borda

Networkx tem uma ferramenta gráfica que podemos usar para desenhar nossa rede.

O problema com essa rede irregular é que realmente não podemos dizer qual aeroporto é qual e como as rotas estão relacionadas entre si. Talvez seja uma ideia melhor traçar o aeroporto na posição geográfica exata em um mapa americano. Hcomo fazemos isso? Aha, Basemap.


Seis graus de separação

Apenas seis saltos em média são necessários para essa transferência de mensagem. O que significa que apenas seis pessoas em média podem transmitir sua mensagem, esse pequeno número de amigos necessário para transmitir uma mensagem distante é incrível. Mas, por que menos saltos?

A resposta é homofilia (nós semelhantes se conectam e formam comunidades com alto coeficiente de clustering) e laços fracos(geralmente faz a ponte entre dois desses grupos). Significa que as pessoas na vizinhança estão muito bem conectadas, mas ao mesmo tempo elas têm conexões com o nó distante que são menos prováveis, mas ainda viáveis. Como um de seus amigos pode conhecer alguém na Califórnia, outro conhece pessoas na Europa e assim por diante.

Ambos são discutidos no exemplo acima do clube Zachary com duas comunidades, resultado da homofilia de dois nós semelhantes se conectando e as margens de interseção altas são laços fracos, pois alguns amigos podem estar lá, mesmo em grupos opostos.

Em redes do mundo real, pode ser entendido com uma explicação estocástica como se houvesse menos probabilidade de formar laços longos em comparação com um menor. A razão pode ser geográfica, como no caso acima, resultando em menos sobreposição de vizinhança, ou seja, com mais distância, menos vínculos de amizade prováveis ​​são estendidos.

Como detectá-lo em um conjunto de dados de rede? Analise apenas o comprimento médio do caminho mais curto, que será mais próximo de 6 ou será drasticamente pequeno em comparação com o tamanho da rede. Isso significaria que a exibição do gráfico / rede fenômeno do pequeno mundo.

Primeiro leia qualquer gráfico desejado em qualquer formato no qual você se sinta confortável, consulte a documentação. Em seguida, use a seguinte função no trecho de código.

Depois disso, vamos aplicá-lo em algum conjunto de dados real, digamos, conjunto de dados facebook_combined de SNAP contendo dados em formato edgelist de todas as redes ego. E tente simular o estudo de caso da Cambridge-analytica, como os usuários estavam conectados uns aos outros, também recomendará visualizar isso com matplotlib.

Essa distância reduzida de 6 pode ser atribuída ao fato de ser muito mais fácil conectar devido à globalização que aconteceu com o mundo sendo mais conectado do que nunca em comparação com quando Milgram conduziu seu experimento.

Agora, qual é a interpretação desse resultado? Um gráfico de escala muito grande com propriedade de caminho mais curto médio muito menor. Isso significaria que podemos pesquisar a relação entre quaisquer dois nós em O (k) tempo constante. Isso também é conhecido como pesquisa descentralizada. Ou busca míope, como podemos ver apenas até certo ponto a partir de nossas conexões. Isso nos permitirá extrair informações b / w quaisquer dois nós a qualquer distância com uma pesquisa de tempo constante.

Imagine as implicações de tal fenômeno, isso resultará em uma troca muito rápida de informações entre os nós independentes da vizinhança. Isso pode ser visto claramente com Vines, Memes se tornando virais em toda a internet e provavelmente como resultado desse fenômeno, o termo "Quebre a Internet" foi cunhado.


Lembre-se de que um grafo consiste em uma coleção de nós e uma coleção de arestas entre eles. Os gráficos normalmente vêm em dois sabores: não direcionado e direcionado, cada um com sua própria finalidade.

Olhando para o futuro, vamos pensar em alguns problemas de modelo onde cada tipo de gráfico pode ocorrer.

Nosso primeiro problema é com um provedor de serviços de Internet que gostaria de expandir seus serviços e fornecer Internet de fibra ótica para uma cidade. Claro, eles querem fazer isso com o menor custo.

A fim de descobrir a melhor maneira de fazer isso, modelaremos os locais que devemos conectar como nós em um gráfico e linhas potenciais de cabo para passar como arestas (não direcionadas). Além disso, essas bordas são ponderadas por um custo devido a coisas como o custo do cabo ou a mão de obra necessária para cavar valas para o cabo. Como devemos resolver esse problema?

Claro, esta é uma versão bastante simplificada de um problema mais realista, pois estamos focados em um sentido estreito de conectividade. Um requisito mais razoável criaria alguma redundância. Por exemplo, se um cabo fosse danificado, a rede inteira não cairia.

Nosso segundo problema diz respeito ao agendamento. O que temos é um monte de tarefas que devem ser concluídas, o problema é que algumas das tarefas não podem ser iniciadas até que outras sejam concluídas. Por exemplo, se estou construindo uma casa, devo escavar o solo antes de lançar os alicerces. Por outro lado, determinar o tipo de luz ou papel de parede que eu gostaria é totalmente independente e outra pessoa pode fazer isso simultaneamente.

Vamos modelar este problema como um gráfico direcionado onde as tarefas são os nós e as arestas direcionadas codificam as dependências entre as tarefas. Portanto, talvez eu tenha uma borda "Tarefa A - & gt Tarefa B" se a "Tarefa B" exigir que a "Tarefa A" seja concluída primeiro. Veremos que existe um bom algoritmo chamado classificação topológica, que nos dá uma lista ordenada de tarefas que garante todas as dependências à medida que completamos a lista.


Conclusão

Aqui estão minhas três principais conclusões deste estudo. Primeiro, é muito mais fácil instalar qualquer um desses pacotes. Não é mais necessário vasculhar toda a documentação e mexer na instalação. A maioria dos pacotes agora podem ser instalados a partir de gerenciadores de pacotes populares com uma única linha. Alguns até oferecem versões docker.

Em segundo lugar, houve uma melhoria significativa em todos os pacotes. Não tenho certeza se isso é porque a análise de rede se tornou mais popular ou é apenas uma boa coincidência que a maioria dos mantenedores de pacotes decidiu lançar atualizações importantes em 2019. De qualquer forma, é uma boa notícia para os usuários finais que podem aproveitar Velocidade de 2-10x em algoritmos populares.

Terceiro, para a maioria desses pacotes, o tempo de execução de um algoritmo é relativamente comparável, especialmente se for baseado em uma linguagem compilada (C, C ++, Julia). Veja os resultados do componente conectado para um exemplo. Se a velocidade é de extrema importância, então encontrar o pacote certo que implemente uma versão encadeada do algoritmo é provavelmente a próxima consideração.

Se você está procurando recomendações sobre pacotes vindos de um background R / Python (como eu), eu recomendaria o networkx para aprender o básico sobre algoritmos de gráfico. Se você está procurando um próximo passo e uma solução com mais desempenho, igraph, ferramenta de gráfico e rede parecem boas escolhas, desde que os algoritmos prontos para uso ofereçam tudo o que você precisa. Se você está disposto a considerar uma nova linguagem, os gráficos de luz são muito promissores e parecem ter uma curva de aprendizado menor do que outras alternativas C / C ++. Claro, se você tem um problema específico para resolver - certamente vale a pena fazer um benchmark, visto que nenhum pacote é amplamente superior a todos os outros. Nesse caso, sinta-se à vontade para estender meu código e modificá-lo para atender às suas necessidades.


15.3: Construindo Modelos de Rede com NetworkX - Matemática

NetworkX é um pacote de software da linguagem Python para a criação, manipulação e estudo da estrutura, dinâmica e função de redes complexas. É usado para estudar grandes redes complexas representadas na forma de grafos com nós e arestas. Usando o networkx, podemos carregar e armazenar redes complexas. Podemos gerar muitos tipos de redes aleatórias e clássicas, analisar a estrutura da rede, construir modelos de rede, projetar novos algoritmos de rede e desenhar redes.
Instalação do pacote:

Criação de nós

Vamos criar nós no grafo G. Depois de adicionar os nós 1, 2, 3, 4, 7, 9

Criando Bordas

Adicionando uma aresta de cada vez:

Depois de adicionar as arestas (1,2), (3,1), (2,4), (4,1), (9,1), (1,7), (2,9)

Removendo nós e arestas

Pode-se demolir o gráfico usando qualquer uma destas funções:

No próximo post, iremos discutir como criar gráficos ponderados, gráficos direcionados, gráficos múltiplos. Como desenhar gráficos. Em postagens posteriores, veremos como usar funções integradas como pesquisa de punho em profundidade, também conhecida como dfs, pesquisa em largura, também conhecida como BFS, dijkstra & # 8217s algoritmo de caminho mais curto.

Referência:
Networxx no Github

Este artigo é uma contribuição de Pratik Chhajer. Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contrib.geeksforgeeks.org ou enviar seu artigo para [email protected] Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

Atenção leitor! Não pare de aprender agora. Conheça todos os conceitos importantes de DSA com o Curso individualizado de DSA a um preço acessível ao aluno e esteja pronto para a indústria. Para completar sua preparação de aprender um idioma para DS Algo e muitos mais, consulte Curso de preparação para entrevista completa.


Assista o vídeo: Python for Social Networks 02: Creating Nodes in Networkx (Outubro 2021).