Skip to contents

Anexar pacotes

Primeiro, anexaremos os pacotes requiridos para extrair e manipular dos dados de MozART 2.0.

library(sonata)
library(glamr)
library(tidyverse)

# Se preciso, instale o `glamr` com código abaixo
# install.packages('glamr', repos = c('https://usaid-oha-si.r-universe.dev', 'https://cloud.r-project.org'))

Estabelecer conexão

Como descrito no artigo Uso de Credenciais MozART 2.0 é recomendado carregar no ambiente R as suas credenciais a partir do sistema operativo. Isto evita elas estarem no script e a partilha não intencional. O código abaixo mostra como carregar credenciais seguramente e estabelecer uma conexão com a base de dados.

# Definir valor do usuário
acct_dev <- "mysql-example-user"

# Carregar credenciais
acct_db <- get_account(name = acct_dev)

# Criar uma ligação MozART 2.0
con <- mysql_connection(db_name = acct_db$dbname, 
                        db_user = acct_db$username,
                        db_pass = acct_db$password,
                        db_host = acct_db$host,
                        db_port = acct_db$port)

Chamar “Activos em TARV”

MozART 2.0 é composta por tabelas de dados ligadas entre si por chaves variáveis. Esta organização de dados, embora óptima para a eficiência do armazenamento, torna mais complexa a tarefa de criar tabelas analíticas. sonata foi concebido para fornecer funções fáceis de utilizar que reduzem a necessidade de escrever código complexo em R ou SQL. calc_tx_active, que extrai uma lista de clientes activos em TARV, é um exemplo deste tipo de função oferecido no sonata. Um caso de uso típico é demonstrado como parte deste artigo.

calc_tx_active traz 5 argumentos. 2 argumentos vêm sem valores predefinidos e requerem definição pelo utilizador. 3 argumentos têm valores pré-defindo que são modificáveis de acordo com as necessidades da analista. O primeiro argumento, “con”, é a ligação ao MozART 2.0 aberto no ambiente R (no exemplo abaixo também definido como “con”). O segundo argumento obrigatório, “enddate”, exige o fecho do período de avaliação, que será utilizado como referência para determinar o estado dos clientes avaliados. O terceiro argumento, “defaulter_tolerance”, posibilita a custumização do número de dias antes de um faltoso ser reclassificado como inactivo (ou “abandono”).

O quarto e o quinto argumentos (“filter_by_location” e “location_uuid”) são argumentos que permitem que o query seja executado sobre uma unidade sanitária individual em vez de todas as mais de 600 unidades sanitárias contidas no MozART 2.0. Isso traz uma forma mais ágil de testar código numa conexão activa. Quando filter_by_location é definido como “TRUE”, o query será adequado para ser executada numa única base de dados definida pelo utilizador no argumento “location_uuid”.

# Definir location_uuid para a CS Merripo
location_meripo <- "e5f01eee-2392-49b4-a5bf-5cf593fc8f21"

# Chamar `calc_tx_active`
df <- calc_tx_active(
  con = con,
  enddate = '2024-09-20',
  defaulter_tolerance = 28, # valor por defeito
  filter_by_location = TRUE,  # valor por defeito
  location_uuid = location_meripo  # valor por defeito
)

Recodificar variáveis

Inspecionando os variáveis contidos no objecto criado pela calc_tx_activo repara-se que varias colunas são codificados numericamente e não fornecem informação suficiente para interpretar. recode_cols oferece uma forma simples de recodificar esses valores usando as tabelas de referência armazenadas internamente no sonata. No exemplo abaixo, chamamos recode_cols e definimos o argumento cols para descodificar os valores apresentados em 5 colunas - “mode_dispensation_id”, “regimen_id”, “location_uuid”, “age”, “form_id” e “gender”. O argumento cols pode ser adaptado de acordo com as colunas presentes no objeto de dados.

df_recode <- df |> 
  recode_cols(cols = c("mode_dispensation_id", 
                       "regimen_id", 
                       "location_uuid", 
                       "age",
                       "form_id",
                       "gender")
  )

Utilizando poucas funções da sonata, criámos um conjunto de dados que pode ser utilizado para responder à nossa questão analítica, seja ela qual for. Tente outras funções como calc_tx_new, calc_arv_pickups, e calc_consultas usando a sua documentação para entender a utilidade dos seus argumentos