Criando Grafos de Rede

Olá a todos,

Alguém tem dicas sobre como criar um gráfico de rede de interações em uma instância do Discourse? Por exemplo, para conseguir avaliar o tamanho relativo dos grupos, como eles se relacionam entre si, quem são as pessoas “mais conectadas” (por meio de curtidas, etc.), tudo visualizado em um gráfico de rede?

Acho que isso requer um serviço de terceiros como o flourish, então, se alguém tiver experiência na criação de gráficos, também seria muito útil!

Obrigado(a) desde já!

Se eu fosse fazer isso, eu:

  1. Baixaria um backup do site e o carregaria em um banco de dados PostgreSQL; o PostgreSQL é o banco de dados que suporta o Discourse. (ref)

  2. Criaria um banco de dados NoSQL, especificamente o Neo4j, a partir dos dados do PostgreSQL. (ref)

  3. Usaria a linguagem de consulta do Neo4j, Cypher, para encontrar os relacionamentos.

O Neo4j possui um sandbox; talvez você se interesse pelo exemplo dos Panama Papers.


EDIT

Uma vez que o banco de dados Neo4j estiver configurado e funcionando, para mantê-lo sincronizado com o banco de dados PostgreSQL do Discourse, eu usaria ou

a. Gatilhos do PostgreSQL
b. Webhooks do Discourse

Fiz um exemplo com o Flourish na semana passada. Ele é baseado neste exemplo que não funciona mais, pois o Google descontinuou seu gráfico de fusão de rede.

Ele mostra:

  • curtidas entre usuários em ambas as direções
  • cores para destacar grupos
  • espessura das linhas para indicar o número de curtidas
  • tamanho das bolhas para mostrar a proporção de curtidas de cada usuário (publicações/curtidas)

Meu exemplo tem tantos pontos de dados que fica difícil de ler, mas eu estava apenas experimentando. Reduzir o número de usuários ou o período de tempo, por exemplo, deixaria o gráfico mais limpo.

Abaixo, uma captura de tela de um usuário selecionado:

Construí isso como uma visualização online: Community Network Visualisation