Análise de rede social usando Power BI e R: um guia de recursos visuais personalizados

Publicados: 2022-07-22

A análise de redes sociais está se tornando rapidamente uma ferramenta importante para atender a uma variedade de necessidades profissionais. Ele pode informar objetivos corporativos, como marketing direcionado e identificar riscos de segurança ou de reputação. A análise de redes sociais também pode ajudar as empresas a atingir metas internas: fornece informações sobre os comportamentos dos funcionários e os relacionamentos entre as diferentes partes de uma empresa.

As organizações podem empregar várias soluções de software para análise de redes sociais; cada um tem seus prós e contras, e é adequado para diferentes propósitos. Este artigo se concentra no Power BI da Microsoft, uma das ferramentas de visualização de dados mais usadas atualmente. Embora o Power BI ofereça muitos complementos de rede social, exploraremos visuais personalizados em R para criar resultados mais atraentes e flexíveis.

Este tutorial pressupõe uma compreensão da teoria básica dos grafos, particularmente os grafos direcionados. Além disso, as etapas posteriores são mais adequadas para o Power BI Desktop, que está disponível apenas no Windows. Os leitores podem usar o navegador Power BI no Mac OS ou Linux, mas o navegador Power BI não oferece suporte a determinados recursos, como importar uma pasta de trabalho do Excel.

Estruturando dados para visualização

A criação de redes sociais começa com a coleta de dados de conexões (borda). Os dados de conexões contêm dois campos primários: o nó de origem e o nó de destino — os nós em cada extremidade da borda. Além desses nós, podemos coletar dados para produzir insights visuais mais abrangentes, normalmente representados como propriedades de nós ou bordas:

1) Propriedades do nó

  • Forma ou cor : Indica o tipo de usuário, por exemplo, a localização/país do usuário
  • Tamanho : Indica a importância na rede, por exemplo, o número de seguidores do usuário
  • Imagem : Funciona como um identificador individual, por exemplo, o avatar de um usuário

2) Propriedades da borda

  • Cor , traço ou conexão de ponta de seta : indica o tipo de conexão, por exemplo, o sentimento da postagem ou tweet conectando os dois usuários
  • Largura : Indica a força da conexão, por exemplo, quantas menções ou retuítes são observados entre dois usuários em um determinado período

Vamos inspecionar um exemplo visual de rede social para ver como essas propriedades funcionam:

Um gráfico de círculos conectados por linhas de larguras variadas aparece com três seções distintas. A esquerda do gráfico tem seis formas verdes de vários tamanhos rotuladas 1, 2, 3, 4, 5 e 6 em um hexágono. Os números 1-5 são círculos, enquanto 6 é um diamante. Eles são interconectados por setas verdes de larguras e direções variadas, e algumas pontas de seta são preenchidas em verde, enquanto outras não são preenchidas. À direita das formas verdes está a próxima seção: três formas azuis escuras dispostas em um triângulo que são rotuladas 7, 8 e 9 e são interconectadas por setas azuis de larguras e direções variadas (com algumas pontas de seta preenchidas em azul). Os nós 7 e 9 estão conectados aos nós 3 e 4 com setas cinzas de larguras e direções variadas (com algumas pontas de seta preenchidas em cinza). No meio do gráfico, abaixo dos dois primeiros grupos de formas, há um único diamante azul claro rotulado como 10. Ele está conectado aos nós 5, 4 e 9 por setas cinza pontilhadas de larguras e direções variadas (com algumas pontas de seta preenchidas em cinza) .
Nós verde, azul claro e azul escuro e formas variadas de círculo ou diamante demonstram diferentes tipos de nós. Números com fundos transparentes atuam como identificadores de imagem do nó, e nós maiores (como o Nó 4) são mais importantes na rede. Diferentes tipos de borda são indicados por cor (verde, azul ou cinza), traço (sólido ou pontilhado) e pontas de seta (vazia ou preenchida); a largura da borda mostra a força (por exemplo, a conexão do Nó 8 ao Nó 9 é forte).

Também podemos usar o texto flutuante para complementar ou substituir os parâmetros acima, pois ele pode oferecer suporte a outras informações que não podem ser facilmente expressas por meio de propriedades de nó ou borda.

Comparando as extensões de rede social do Power BI

Tendo definido os diferentes recursos de dados de uma rede social, vamos examinar os prós e contras de quatro ferramentas populares usadas para visualizar redes no Power BI.

Extensão Gráfico de rede social por Arthur Graus Navegador de rede Redes Avançadas por ZoomCharts (Edição Light) Visualizações personalizadas usando R
Tamanho do nó dinâmico Sim Sim Sim Sim
Tamanho de borda dinâmico Não Sim Não Sim
Personalização da cor do nó Sim Sim Não Sim
Processamento complexo de redes sociais Não Sim Sim Sim
Imagens de perfil para nós Sim Não Não Sim
Zoom ajustável Não Sim Sim Sim
Filtragem de N conexões principais Não Não Não Sim
Informações personalizadas ao passar o mouse Não Não Não Sim
Personalização da cor da borda Não Não Não Sim
Outros recursos avançados Não Não Não Sim


Social Network Graph de Arthur Graus, Network Navigator e Advanced Networks de ZoomCharts (Light Edition) são extensões adequadas para desenvolver redes sociais simples e começar com sua primeira análise de rede social.

Muitos círculos azul escuro, azul claro e laranja (mais de 50 círculos) são conectados por finas linhas cinzas em um fundo branco. Os círculos têm uma borda de cor sólida e são preenchidos com pequenas imagens de vários Pokémon que têm um fundo branco, e os círculos bloqueiam a visão da maioria das linhas cinzas. Eles formam uma forma circular em geral.
Um exemplo de visualização feito usando a extensão Social Network Graph da Arthur Graus.

Muitos círculos azuis, roxos e cinzas (mais de 50 círculos) são conectados por finas linhas cinzas em um fundo branco. Os círculos são sólidos e preenchidos e bloqueiam a visão de algumas das linhas cinzas. Eles formam um arranjo circular em geral.
Um exemplo de visualização feito usando a extensão Network Navigator.

Muitos grandes círculos verde-azulados e pequenos círculos laranja (mais de 50 círculos) são conectados por finas linhas cinzas em um fundo branco. Os círculos são sólidos e preenchidos, e a maioria das linhas cinzas são visíveis. Eles formam uma forma de cunha horizontal em geral, com círculos mais densamente povoados aparecendo no lado direito. No canto inferior esquerdo do gráfico, há alguns ícones de widgets e dois círculos rotulados: um círculo azul-petróleo rotulado "Do usuário" e um círculo laranja rotulado "Para o usuário". No canto inferior direito do gráfico há um logotipo que diz "zoomcharts".
Um exemplo de visualização feito usando a extensão Advanced Networks by ZoomCharts (Light Edition).

No entanto, se você quiser dar vida aos seus dados e descobrir insights inovadores com visuais que chamam a atenção, ou se sua rede social for particularmente complexa, recomendo desenvolver seus visuais personalizados em R.

Muitos círculos verdes, azuis e roxos (mais de 50 círculos) são conectados por linhas finas de cores variadas (verde, cinza e vermelho) em um fundo branco. Os círculos são sólidos e preenchidos com uma imagem de Pokémon no centro, e a maioria das linhas finas é visível. Eles formam uma forma circular espalhada em geral, com os círculos verdes frequentemente se ramificando em direção a círculos azuis ou roxos menores. O canto superior direito do gráfico tem o texto "Rede Social" e abaixo do gráfico há uma legenda de linhas e círculos com texto relacionado: uma linha verde com o texto "Positivo", uma linha cinza com o texto "Neutro" uma linha vermelha com o texto "Negativo", um círculo azul com o texto "Menção" e um círculo roxo com o texto "Retweet".
Um exemplo de visualização feito usando visuais personalizados em R.

Essa visualização personalizada é o resultado final da extensão de rede social do nosso tutorial em R e demonstra a grande variedade de recursos e propriedades de nó/borda oferecidas pelo R.

Criando uma extensão de rede social para Power BI usando R

A criação de uma extensão para visualizar redes sociais no Power BI usando R compreende cinco etapas distintas. Mas antes de podermos criar nossa extensão de rede social, devemos carregar nossos dados no Power BI.

Pré-requisito: coletar e preparar dados para o Power BI

Você pode seguir este tutorial com um conjunto de dados de teste baseado em dados do Twitter e Facebook ou prosseguir com sua própria rede social. Nossos dados foram randomizados; você pode baixar dados reais do Twitter, se desejar. Depois de coletar os dados necessários, adicione-os ao Power BI (por exemplo, importando uma pasta de trabalho do Excel ou adicionando dados manualmente). Seu resultado deve ser semelhante à tabela a seguir:

Aparece uma tabela com treze linhas alternadas de cinza e branco. Ele tem um título --- "Rede Social" --- com cabeçalhos abaixo dele. A primeira coluna é rotulada "Do usuário" e tem oito textos "1" seguidos por cinco textos "2". A segunda coluna é rotulada "Para o usuário" e lê (de cima para baixo): 2, 3, 5, 6, 7, 8, 9, 10, 7, 8, 11, 13, 14. A terceira coluna é rotulada " Número de conexões" e lê (de cima para baixo): 12, 46, 29, 79, 49, 11, 90, 100, 66, 29, 62, 13, 45. A quarta coluna é rotulada como "Tipo" e lê ( de cima para baixo): Retweet, Mention, Mention, Retweet, Retweet, Retweet, Mention, Mention, Retweet, Retweet, Retweet, Retweet, Mention. A quinta coluna é rotulada como "Sentimento" e lê (de cima para baixo): Positivo, Positivo, Negativo, Neutro, Positivo, Negativo, Positivo, Neutro, Neutro, Negativo, Negativo, Negativo, Negativo. A sexta coluna é rotulada "Do nome de usuário" e tem oito textos "Aaliyah" seguidos por cinco textos "Aaron". A sétima coluna lê "Para nome de usuário" e lê (de cima para baixo): Aaron, Abel, Abraham, Ace, Adalyn, Adalynn com dois Ns, Adam, Addison, Adalynn, Adalynn com dois Ns, Adeline, Adriel, Aidan. A oitava coluna lê "From Avatar" e tem oito textos "https://raychemmedica.com/SampleImages/Pokemon/1.png" seguidos por cinco textos "https://raychemmedica.com/SampleImages/Pokemon/2.png" . A nona coluna diz "Para Avatar" e cada entrada tem o texto "https://raychemmedica.com/SampleImages/Pok" e parece estar cortada.

Depois de configurar seus dados, você estará pronto para criar uma visualização personalizada.

Etapa 1: configurar o modelo de visualização

Desenvolver uma visualização do Power BI não é simples — mesmo os visuais básicos exigem milhares de arquivos. Felizmente, a Microsoft oferece uma biblioteca chamada pbiviz , que fornece os arquivos de suporte à infraestrutura necessários com apenas algumas linhas de código. A biblioteca pbiviz também reempacotará todos os nossos arquivos finais em um arquivo .pbiviz que podemos carregar diretamente no Power BI como uma visualização.

A maneira mais simples de instalar o pbiviz é com o Node.js. Depois que pbiviz estiver instalado, precisamos inicializar nosso visual R personalizado por meio da interface de linha de comando de nossa máquina:

 pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package

Não se esqueça de substituir toptalSocialNetworkByBharatGarg pelo nome desejado para sua visualização. -t rhtml informa ao pacote pbiviz que deve criar um template para desenvolver visualizações HTML baseadas em R. Você verá erros porque ainda não especificamos campos como nome do autor e e-mail em nosso pacote, mas resolveremos isso mais tarde no tutorial. Se o script pbiviz não for executado no PowerShell, talvez seja necessário primeiro permitir scripts com Set-ExecutionPolicy RemoteSigned .

Na execução bem-sucedida do código, você verá uma pasta com a seguinte estrutura:

Uma listagem do Explorador de Arquivos contendo oito subpastas (.tmp, .vscode, assets, dist, node_modules, r_files, src e style) e oito arquivos (capabilities.json, dependencies.json, package.json, package-lock.json, pbiviz .json, script.r, tsconfig.json e tslint.json). Todos os arquivos têm 1 KB, exceto os recursos.json (2 KB) e package-lock.json (23 KB).

Assim que tivermos a estrutura de pastas pronta, podemos escrever o código R para nossa visualização personalizada.

Etapa 2: codifique a visualização em R

O diretório criado na primeira etapa contém um arquivo chamado script.r , que consiste no código padrão. (O código padrão cria uma extensão simples do Power BI, que usa o banco de dados de exemplo de iris disponível em R para plotar um histograma de Petal.Length por Petal.Species .) Atualizaremos o código, mas manteremos sua estrutura padrão, incluindo suas seções comentadas.

Nosso projeto usa três bibliotecas R:

  • DiagrammeR: cria gráficos a partir de texto
  • visNetwork: fornece visualizações de rede interativas
  • data.table: auxilia na organização de dados, semelhante ao data.frame

Vamos substituir o código na seção Library Declarations do script.r para refletir o uso de nossa biblioteca:

 libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")

Em seguida, substituiremos o código na seção Actual code pelo nosso código R. Antes de criar nossa visualização, devemos primeiro ler e processar nossos dados. Tomaremos duas entradas do Power BI:

  • num_records : A entrada numérica N , de modo que selecionaremos apenas as principais N conexões de nossa rede (para limitar o número de conexões exibidas)
  • conjunto de dataset : nossos nós e bordas de redes sociais

Para calcular as N conexões que vamos plotar, precisamos agregar o valor num_records porque o Power BI fornecerá um vetor por padrão em vez de um único valor numérico. Uma função de agregação como max atinge esse objetivo:

 limit_connection <- max(num_records)

Agora leremos o conjunto de dataset como um objeto data.table com colunas personalizadas. Classificamos o conjunto de dados por valor em ordem decrescente para colocar as conexões mais frequentes no topo da tabela. Isso garante que escolhemos os registros mais importantes para plotar quando limitamos nossas conexões com num_records :

 dataset <- data.table(from = dataset[[1]] ,to = dataset[[2]] ,value = dataset[[3]] ,col_sentiment = dataset[[4]] ,col_type = dataset[[5]] ,from_name = dataset[[6]] ,to_name = dataset[[7]] ,from_avatar = dataset[[8]] ,to_avatar = dataset[[9]])[ order(-value)][ seq(1, min(nrow(dataset), limit_connection))]

Em seguida, devemos preparar nossas informações de usuário criando e alocando IDs de usuário exclusivos ( uid ) para cada usuário, armazenando-os em uma nova tabela. Também calculamos o número total de usuários e armazenamos essas informações em uma variável separada chamada num_nodes :

 user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)

Vamos atualizar nossas informações de usuário com propriedades adicionais, incluindo:

  • O número de seguidores (tamanho do nó).
  • O número de registros.
  • O tipo de usuário (códigos de cores).
  • Links de avatar.

Usaremos a função de merge do R para atualizar a tabela:

 user_ids <- merge(user_ids, dataset[, .(num_follower = uniqueN(to)), from], by.x = 'id', by.y = 'from', all.x = T)[is.na(num_follower), num_follower := 0][, size := num_follower][num_follower > 0, size := size + 50][, size := size + 10] user_ids <- merge(user_ids, dataset[, .(sum_val = sum(value)), .(to, col_type)][order(-sum_val)][, id := 1:.N, to][id == 1, .(to, col_type)], by.x = 'id', by.y = 'to', all.x = T) user_ids[id %in% dataset$from, col_type := '#42f548'] user_ids <- merge(user_ids, unique(rbind(dataset[, .('id' = from, 'Name' = from_name, 'avatar' = from_avatar)], dataset[, .('id' = to, 'Name' = to_name, 'avatar' = to_avatar)])), by = 'id')

Também adicionamos nosso uid criado ao conjunto de dados original para que possamos recuperar os IDs de usuário from e to posteriormente no código:

 dataset <- merge(dataset, user_ids[, .(id, uid)], by.x = "from", by.y = "id") dataset <- merge(dataset, user_ids[, .(id, uid_retweet = uid)], by.x = "to", by.y = "id") user_ids <- user_ids[order(uid)]

Em seguida, criamos quadros de dados de nó e borda para a visualização. Escolhemos o style e a shape de nossos nós (círculos preenchidos) e selecionamos as colunas corretas de nossa tabela user_ids para preencher os atributos color , data , value e image de nossos nós:

 nodes <- create_node_df(n = num_nodes, type = "lower",, color = user_ids$col_type, shape = 'circularImage', data = user_ids$uid, value = user_ids$size, image = user_ids$avatar, title = paste0("<p>Name: <b>", user_ids$Name,"</b><br>", "Super UID <b>", user_ids$id, "</b><br>", "# followers <b>", user_ids$num_follower, "</b><br>", "</p>") )

Da mesma forma, escolhemos as colunas da tabela do dataset de dados que correspondem aos atributos de nossas arestas from , to e color :

 edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)

Por fim, com os quadros de dados de nó e borda prontos, vamos criar nossa visualização usando a biblioteca visNetwork e armazená-la em uma variável que o código padrão usará posteriormente, chamada p :

 p <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = list(enabled = TRUE, degree = 1, hover = T)) %>% visPhysics(stabilization = list(enabled = FALSE, iterations = 10), adaptiveTimestep = TRUE, barnesHut = list(avoidOverlap = 0.2, damping = 0.15, gravitationalConstant = -5000))

Aqui, personalizamos algumas configurações de visualização de rede em visOptions e visPhysics. Sinta-se à vontade para examinar as páginas de documentação e atualizar essas opções conforme desejado. Nossa seção de Actual code agora está completa e devemos atualizar a seção Create and save widget removendo a linha p = ggplotly(g); já que codificamos nossa própria variável de visualização, p .

Etapa 3: preparar a visualização para o Power BI

Agora que terminamos de codificar em R, devemos fazer algumas alterações em nossos arquivos JSON de suporte para preparar a visualização para uso no Power BI.

Vamos começar com o arquivo capabilities.json . Ele inclui a maioria das informações que você vê na guia Visualizações para um visual, como as fontes de dados da nossa extensão e outras configurações. Primeiro, precisamos atualizar dataRoles e substituir o valor existente por novas funções de dados para nossas entradas de conjunto de dataset e num_records :

 # ... "dataRoles": [ { "displayName": "dataset", "description": "Connection Details - From, To, # of Connections, Sentiment Color, To Node Type Color", "kind": "GroupingOrMeasure", "name": "dataset" }, { "displayName": "num_records", "description": "number of records to keep", "kind": "Measure", "name": "num_records" } ], # ...

Em nosso arquivo capabilities.json , também vamos atualizar a seção dataViewMappings . Adicionaremos conditions às quais nossas entradas devem aderir, bem como atualizaremos o scriptResult para corresponder às nossas novas funções de dados e suas condições. Consulte a seção de conditions , juntamente com a seção de select em scriptResult , para alterações:

 # ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...

Vamos passar para o nosso arquivo dependencies.json . Aqui, adicionaremos três pacotes adicionais em cranPackages para que o Power BI possa identificar e instalar as bibliotecas necessárias:

 { "name": "data.table", "displayName": "data.table", "url": "https://cran.r-project.org/web/packages/data.table/index.html" }, { "name": "DiagrammeR", "displayName": "DiagrammeR", "url": "https://cran.r-project.org/web/packages/DiagrammeR/index.html" }, { "name": "visNetwork", "displayName": "visNetwork", "url": "https://cran.r-project.org/web/packages/visNetwork/index.html" },

Observação: o Power BI deve instalar automaticamente essas bibliotecas, mas se você encontrar erros de biblioteca, tente executar o seguinte comando:

 install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))

Por fim, vamos adicionar informações relevantes para nosso visual ao arquivo pbiviz.json . Eu recomendo atualizar os seguintes campos:

  • O campo de descrição do visual
  • URL de suporte do visual
  • A URL do GitHub do visual
  • O nome do autor
  • e-mail do autor

Agora, nossos arquivos foram atualizados e devemos reempacotar a visualização a partir da linha de comando:

 pbiviz package

Na execução bem-sucedida do código, um arquivo .pbiviz deve ser criado no diretório dist . Todo o código abordado neste tutorial pode ser visualizado no GitHub.

Etapa 4: importar a visualização para o Power BI

Para importar sua nova visualização no Power BI, abra seu relatório do Power BI (um para dados existentes ou um criado durante nossa etapa de pré -requisito com dados de teste) e navegue até a guia Visualizações . Clique no botão [mais opções] e selecione Importar um visual de um arquivo . Observação: talvez seja necessário primeiro selecionar Editar em um navegador para que a guia Visualizações fique visível.

Um painel aparece com o título "Visualizações" e duas setas ">" à direita. Abaixo, o texto "Build visual" com duas imagens abaixo: dois retângulos amarelos e uma linha à esquerda, e um papel e pincel à direita. A imagem de dois retângulos amarelos está selecionada e abaixo dela há um painel com mais de 30 ícones de gráficos diversos. O último ícone é uma reticência, que tem o texto flutuante "Obter mais recursos visuais". Abaixo do painel de ícones, o texto "Valores" com uma linha de texto abaixo que diz: "Adicione campos de dados aqui". Abaixo disso, o texto "Drill through", seguido por "Cross-report" com um botão de opção "Off" selecionado ao lado dele.

Navegue até o diretório dist da sua pasta de visualização e selecione o arquivo .pbiviz para carregar perfeitamente seu visual no Power BI.

Etapa 5: criar a visualização no Power BI

A visualização que você importou agora está disponível no painel de visualizações. Clique no ícone de visualização para adicioná-lo ao seu relatório e, em seguida, adicione colunas relevantes às entradas do conjunto de dataset e num_records :

Um painel aparece com um ícone de ferramentas selecionadas com o texto "toptalSocialNetworkByBharatGarg". Abaixo do ícone, o texto "conjunto de dados" aparece com vários retângulos suspensos abaixo (de cima para baixo): De usuário, Para usuário, Número de conexões, cor, cor, Nome de usuário, Nome de usuário, Avatar, Avatar.

Você pode adicionar texto, filtros e recursos adicionais à sua visualização, dependendo dos requisitos do seu projeto. Também recomendo que você consulte a documentação detalhada das três bibliotecas R que usamos para aprimorar ainda mais suas visualizações, pois nosso projeto de exemplo não pode abranger todos os casos de uso das funções disponíveis.

Atualizando sua próxima análise de rede social

Nosso resultado final é uma prova do poder e da eficiência do R quando se trata de criar visualizações personalizadas do Power BI. Experimente a análise de redes sociais usando visuais personalizados em R em seu próximo conjunto de dados e tome decisões mais inteligentes com insights de dados abrangentes.

O Toptal Engineering Blog agradece a Leandro Roser por revisar os exemplos de código apresentados neste artigo.

De cima para baixo, as palavras "Gold" (ouro colorido), "Microsoft" e "Partner" (ambas em preto) aparecem seguidas do logotipo da Microsoft.
Como Microsoft Gold Partner, a Toptal é sua rede de elite de especialistas da Microsoft. Construa equipes de alto desempenho com os especialistas de que você precisa - em qualquer lugar e exatamente quando você precisar deles!