Análise de rede social usando Power BI e R: um guia de recursos visuais personalizados
Publicados: 2022-07-22A 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:
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.
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.
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:
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:

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.
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
:
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.