
Montando relatórios para acompanhamento de uma rede social em Drupal: o caso da Rede HumanizaSUS
O post documenta os procedimentos técnicos para construir relatórios de uma rede social, a Rede Humaniza SUS, em Drupal.
Trabalhar com análise de uma rede social quando temos a possibilidade de acessar diretamente seu banco de dados permite uma ampla liberdade de modelagem dos dados e obter combinações que atendam as diferentes necessidades de visualização e compreensão dessa informação.
Aqui, apresento a seguir, através de um mapa mental, quais são os indicadores que quero acompanhar da rede e ao longo do post quais são as técnicas de extração de dados e mapeando dessa informação.
Iniciamos pelos dados dos usuários da rede. Algumas consultas abaixo já permitirão extrair dados para posts, comentários e votos:
- Cadastros X Mês: há no Drupal uma tabela chamada "users" onde constam as informações de cadastro de um novo usuário no ambiente, sendo elas o nome do usuário, email, data de cadastro e data do último acesso. A consulta seguinte seleciona a quantidade de usuários cadastrados e os agrupa por ano e mês: select from_unixtime(`created`, '%Y'),from_unixtime(`created`, '%m'),count(*) from users group by from_unixtime(`created`, '%Y%m')
- Último acesso dos usuários X Mês: seleciona o campo "access", que guarda o último acesso de um usuário, e agrupa da mesma forma que o item anterior - select from_unixtime(`access`, '%Y'),from_unixtime(`access`, '%m'),count(*) from users group by from_unixtime(`access`, '%Y%m')
- postando X mês e postagens X mês: seleciona da tabela "node" os posts já agrupados por ano e mês, além de já mostrar quantos usuários diferentes postaram naquele mês. Essa consulta permite visualizar a diversidade de participação dos usuários da rede na publicação de posts. select from_unixtime(`created`, '%Y'),from_unixtime(`created`, '%m'),count(`nid`) AS posts, count(DISTINCT `uid`) as usuarios from node WHERE type='blog' group by from_unixtime(`created`, '%Y%m')
- comentando X mês e comentários X mês: é o mesmo tipo de consulta do item anterior, variando a tabela que agora será a "comments". select from_unixtime(`timestamp`, '%Y'),from_unixtime(`timestamp`, '%m'),count(`cid`) AS comentarios, count(DISTINCT `uid`) as usuarios from comments group by from_unixtime(`timestamp`, '%Y%m')
- votando X mês e votos x mês: mesmo caso do anterior, agora na tabela "voting_api". select from_unixtime(`timestamp`, '%Y'),from_unixtime(`timestamp`, '%m'),count(`vote_id`) AS votos, count(DISTINCT `uid`) as usuarios from votingapi_vote group by from_unixtime(`timestamp`, '%Y%m').
com essas consultas, já é possível gerar praticamente todos os indicadores, a exceção da distribuição de papéis e análise de categorias dos posts.
Seguimos em breve!