USER
Eu tenho as seguintes colunas e seus tipos no meu dataset. Eu gostaria de utilizar o Vega para criar um dashboard iterativo. Como fazer?
root
|-- cd_proposta_adp: decimal(10,0) (nullable = true)
|-- agenc: decimal(3,0) (nullable = true)
|-- subseg: decimal(3,0) (nullable = true)
|-- cd_status: string (nullable = true)
|-- cd_loja: decimal(6,0) (nullable = true)
|-- dt_inclusao: string (nullable = true)
|-- no_cpf_cgc: decimal(14,0) (nullable = true)
|-- prodt_id: decimal(4,0) (nullable = true)
|-- ic_canal_cap: decimal(2,0) (nullable = true)
|-- cd_ctx: decimal(5,0) (nullable = true)
|-- tp_moeda: string (nullable = true)
|-- indice_correcao: decimal(5,2) (nullable = true)
|-- vl_tx_ano: decimal(15,9) (nullable = true)
|-- vl_tx_mes: decimal(15,9) (nullable = true)
|-- vl_financiado: decimal(15,2) (nullable = true)
|-- vl_iof: decimal(15,2) (nullable = true)
|-- vl_tac: decimal(15,2) (nullable = true)
|-- vl_liquido: decimal(15,2) (nullable = true)
|-- dt_emissao: string (nullable = true)
|-- dt_prim_vcto: string (nullable = true)
|-- dt_termino: string (nullable = true)
|-- qt_prestacao: decimal(3,0) (nullable = true)
|-- vl_entrada: decimal(15,2) (nullable = true)
|-- vl_prestacao: decimal(15,2) (nullable = true)
|-- vl_seguro: decimal(15,2) (nullable = true)
|-- vl_subsidio_mont: decimal(15,2) (nullable = true)
|-- vl_tec: decimal(15,2) (nullable = true)
|-- id_prest_diverg: string (nullable = true)
|-- fpgto: string (nullable = true)
|-- qt_pontos_score: string (nullable = true)
|-- cd_emp: decimal(3,0) (nullable = true)
|-- cd_obj_fin: string (nullable = true)
|-- qt_dd_carencia: decimal(3,0) (nullable = true)
|-- vl_tx_ano_abn: double (nullable = true)
|-- status_score: string (nullable = true)
|-- status_lojista: string (nullable = true)
|-- escala_prior: string (nullable = true)
|-- ds_obs_lojista: string (nullable = true)
|-- cd_grupo: decimal(3,0) (nullable = true)
|-- cd_status_ag: string (nullable = true)
|-- hr_inclusao: decimal(6,0) (nullable = true)
|-- ds_motivo_status: string (nullable = true)
|-- fator_desp: decimal(7,3) (nullable = true)
|-- prop_complementada: string (nullable = true)
|-- flag_alteracao: string (nullable = true)
|-- ddd_loja: decimal(4,0) (nullable = true)
|-- fone_loja: decimal(10,0) (nullable = true)
|-- cd_controle_loja: string (nullable = true)
|-- id_impres_carne: string (nullable = true)
|-- cd_status_inicial: string (nullable = true)
|-- cd_evento: decimal(4,0) (nullable = true)
|-- dt_aprovacao: string (nullable = true)
|-- hr_aprovacao: decimal(6,0) (nullable = true)
|-- usuario_aprovacao: string (nullable = true)
|-- dt_inc_atu: string (nullable = true)
|-- hr_inc_atu: decimal(6,0) (nullable = true)
|-- usuario_inclusao: string (nullable = true)
|-- dt_ult_atu: string (nullable = true)
|-- hr_ult_atu: decimal(6,0) (nullable = true)
|-- usuario_alteracao: string (nullable = true)
|-- fx_corte: string (nullable = true)
|-- vl_percent_renda: decimal(2,0) (nullable = true)
|-- pc_comissao_ret: decimal(3,0) (nullable = true)
|-- vl_comissao_ret: decimal(13,2) (nullable = true)
|-- vl_devolucao_tac: decimal(13,2) (nullable = true)
|-- tx_cet_anual: decimal(5,2) (nullable = true)
|-- tx_cet_mensal: decimal(5,2) (nullable = true)
|-- cod_comissao: string (nullable = true)
|-- cd_ch_inicial: string (nullable = true)
|-- cd_proposta_lfv: decimal(8,0) (nullable = true)
|-- proj_escola: string (nullable = true)
|-- fator: decimal(15,9) (nullable = true)
|-- status_pend: string (nullable = true)
|-- tp_logistica: decimal(2,0) (nullable = true)
|-- end_logistica: string (nullable = true)
|-- reimplante: string (nullable = true)
|-- tpiof: string (nullable = true)
|-- dtchec: string (nullable = true)
|-- hrchec: string (nullable = true)
|-- userchec: string (nullable = true)
|-- obschec: string (nullable = true)
|-- qtde_escoragem: decimal(2,0) (nullable = true)
|-- flag_reescor_cli: string (nullable = true)
|-- flag_reescor_av1: string (nullable = true)
|-- flag_reescor_av2: string (nullable = true)
|-- cd_vendedor_vic: decimal(6,0) (nullable = true)
|-- cd_campanha: decimal(5,0) (nullable = true)
|-- cd_modal_fin: string (nullable = true)
|-- ic_fraude: string (nullable = true)
|-- ic_tac_vista: string (nullable = true)
|-- vl_subsidio_conc: decimal(15,2) (nullable = true)
|-- vl_tx_ano_cli: decimal(9,6) (nullable = true)
|-- vl_tx_mes_cli: decimal(9,6) (nullable = true)
|-- tp_bem: string (nullable = true)
|-- flag_reescor_fdp: string (nullable = true)
|-- no_cpf_cgc_fornec: decimal(14,0) (nullable = true)
|-- nm_fornec: string (nullable = true)
|-- tp_pessoa_fornec: string (nullable = true)
|-- stchec: string (nullable = true)
|-- dt_aprovacao_2: string (nullable = true)
|-- hr_aprovacao_2: decimal(6,0) (nullable = true)
|-- usuario_aprovacao_2: string (nullable = true)
|-- cd_atx: decimal(13,0) (nullable = true)
|-- cd_motivo: decimal(3,0) (nullable = true)
|-- data_fax: string (nullable = true)
|-- hora_fax: decimal(4,0) (nullable = true)
|-- perfil_aprov1: string (nullable = true)
|-- perfil_aprov2: string (nullable = true)
|-- cd_motivo_2: decimal(3,0) (nullable = true)
|-- cd_motivo_3: decimal(3,0) (nullable = true)
|-- ind_resp: string (nullable = true)
|-- status_cartao: string (nullable = true)
|-- inc_manual: string (nullable = true)
|-- area_negocio: decimal(3,0) (nullable = true)
|-- flag_central_8: string (nullable = true)
|-- cd_central_9: decimal(2,0) (nullable = true)
|-- cd_time_9: decimal(3,0) (nullable = true)
|-- cd_fila_9: string (nullable = true)
|-- cd_hierarquia_9: decimal(1,0) (nullable = true)
|-- cd_segmento_14: decimal(3,0) (nullable = true)
|-- mens_score: string (nullable = true)
|-- ic_seguro: string (nullable = true)
|-- central_ag_15: decimal(2,0) (nullable = true)
|-- cont_follow_up: decimal(2,0) (nullable = true)
|-- cd_just_manual: decimal(3,0) (nullable = true)
|-- coeficiente_cet: decimal(12,6) (nullable = true)
|-- ret_serasa: string (nullable = true)
|-- cd_tarifa_ren: string (nullable = true)
|-- vl_desp_carne: decimal(13,2) (nullable = true)
|-- vl_desp_gravame: decimal(13,2) (nullable = true)
|-- vl_desp_cartorio: decimal(13,2) (nullable = true)
|-- qt_garantias: decimal(3,0) (nullable = true)
|-- cd_operador: decimal(7,0) (nullable = true)
|-- nr_aprovacao_reimp: decimal(11,0) (nullable = true)
|-- vl_tarifa_aval: decimal(13,2) (nullable = true)
|-- cd_justificativa: decimal(3,0) (nullable = true)
|-- cd_categoria: decimal(2,0) (nullable = true)
|-- vl_risco_cons_parc: decimal(13,2) (nullable = true)
|-- vl_risco_saldev: decimal(13,2) (nullable = true)
|-- vl_risco_limite: decimal(13,2) (nullable = true)
|-- faixa_es: string (nullable = true)
|-- faixa_cr: string (nullable = true)
|-- faixa_me: string (nullable = true)
|-- faixa_fr: string (nullable = true)
|-- faixa_po: string (nullable = true)
|-- faixa_ch: string (nullable = true)
|-- faixa_rd: string (nullable = true)
|-- faixa_ta: string (nullable = true)
|-- faixa_co: string (nullable = true)
|-- faixa_re: string (nullable = true)
|-- log_cod: decimal(9,0) (nullable = true)
|-- ic_escor_batch: string (nullable = true)
|-- dt_entr_viag: string (nullable = true)
|-- pc_comissao: decimal(4,2) (nullable = true)
|-- vl_risco_parc_f1: decimal(11,2) (nullable = true)
|-- vl_risco_parc_f2: decimal(11,2) (nullable = true)
|-- vl_risco_parc_f3: decimal(11,2) (nullable = true)
|-- vl_risco_saldev_f1: decimal(11,2) (nullable = true)
|-- vl_risco_saldev_f2: decimal(11,2) (nullable = true)
|-- vl_risco_saldev_f3: decimal(11,2) (nullable = true)
|-- vl_risco_limite_f1: decimal(11,2) (nullable = true)
|-- vl_risco_limite_f2: decimal(11,2) (nullable = true)
|-- vl_risco_limite_f3: decimal(11,2) (nullable = true)
|-- qt_contr_em_atraso: decimal(3,0) (nullable = true)
|-- qt_total_contr: decimal(3,0) (nullable = true)
|-- qt_dias_maior_atr: decimal(6,0) (nullable = true)
|-- ic_acesso_sist: decimal(2,0) (nullable = true)
|-- ic_cart_detran: string (nullable = true)
|-- cd_pct_liber: decimal(7,0) (nullable = true)
|-- cd_cnl_orn: string (nullable = true)
|-- cd_pct_plano: decimal(6,0) (nullable = true)
|-- vl_intermediarias: decimal(13,2) (nullable = true)
|-- vl_prest_menor: decimal(13,2) (nullable = true)
|-- vl_prest_maior: decimal(13,2) (nullable = true)
|-- vl_medio_prest: decimal(13,2) (nullable = true)
|-- vl_present_liq: decimal(15,8) (nullable = true)
|-- vl_liberado: decimal(13,2) (nullable = true)
|-- vl_iof_compl: decimal(11,2) (nullable = true)
|-- ic_isenc_tc: string (nullable = true)
|-- ic_isenc_tab: string (nullable = true)
|-- nr_contr_orig_portab: string (nullable = true)
|-- dt_contr_orig_portab: string (nullable = true)
|-- vl_iof_orig_portab: decimal(15,2) (nullable = true)
|-- qt_parc_pg_portab: decimal(3,0) (nullable = true)
|-- cd_if_orig_portab: decimal(3,0) (nullable = true)
|-- ic_tab_vista: string (nullable = true)
|-- cd_aget_cerf: decimal(12,0) (nullable = true)
|-- cd_cerf: string (nullable = true)
|-- cd_prod_banc_sntd: string (nullable = true)
|-- cd_subp_banc_sntd: string (nullable = true)
|-- tp_proposta: string (nullable = true)
|-- cd_proposta_orig: decimal(10,0) (nullable = true)
|-- ic_eleg_neg: string (nullable = true)
|-- ic_comi_plus: string (nullable = true)
|-- txbonificada: decimal(7,4) (nullable = true)
|-- txagregada: decimal(7,4) (nullable = true)
|-- ic_tx_jr_utz: string (nullable = true)
|-- perc_rt_loj: decimal(7,4) (nullable = true)
|-- tx_jr_ren: decimal(7,4) (nullable = true)
|-- ic_tx_jr_utz_ren: string (nullable = true)
|-- codigo_cupom: string (nullable = true)
|-- ic_calc_prec: string (nullable = true)
|-- idbenef_compul: string (nullable = true)
|-- pc_cot_txa: decimal(9,5) (nullable = true)
|-- pz_cot_txa: decimal(2,0) (nullable = true)
|-- id_oferta: string (nullable = true)
|-- canal_externo: decimal(3,0) (nullable = true)
|-- sub_canal_externo: decimal(3,0) (nullable = true)
|-- sub_oferta: string (nullable = true)
|-- prop_pioneer: decimal(12,0) (nullable = true)
|-- vl_nps: decimal(15,2) (nullable = true)
|-- ic_nps: string (nullable = true)
|-- dat_ref_carga: string (nullable = true)
|-- ingest_time: string (nullable = true)
|-- dat_ref_carga_date: date (nullable = true)
ASSISTANT
Para criar um dashboard interativo usando Vega no Databricks, você pode seguir os passos abaixo. Vega é uma linguagem de visualização de dados declarativa que permite criar gráficos interativos e sofisticados. Vou mostrar como você pode integrar Vega em um notebook do Databricks para criar visualizações.
### Passos para Criar um Dashboard Interativo com Vega
1. **Preparar os Dados:**
Primeiro, selecione e prepare os dados que você deseja visualizar. Vamos supor que você queira visualizar a distribuição de propostas (`cd_proposta_adp`) por status (`cd_status`).
2. **Converter os Dados para JSON:**
Vega utiliza dados em formato JSON, então você precisará converter seu DataFrame para JSON.
3. **Definir a Especificação Vega:**
A especificação Vega é um JSON que define como os dados devem ser visualizados. Vou fornecer um exemplo básico de um gráfico de barras.
4. **Renderizar a Visualização no Databricks:**
Use HTML e JavaScript para incorporar a visualização Vega no notebook.
### Exemplo de Código
#### 1. Preparar os Dados
```scala
import org.apache.spark.sql.functions._
// Supondo que df é o seu DataFrame
val dataForVega = df.groupBy("cd_status").agg(count("cd_proposta_adp").alias("num_propostas"))
// Converter para JSON
val jsonData = dataForVega.toJSON.collect()
```
#### 2. Definir a Especificação Vega
```scala
val vegaSpec = s"""
{
"$$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 400,
"height": 200,
"data": [
{
"name": "table",
"values": ${jsonData.mkString("[", ",", "]")}
}
],
"scales": [
{
"name": "xscale",
"type": "band",
"domain": {"data": "table", "field": "cd_status"},
"range": "width"
},
{
"name": "yscale",
"domain": {"data": "table", "field": "num_propostas"},
"nice": true,
"range": "height"
}
],
"axes": [
{"orient": "bottom", "scale": "xscale"},
{"orient": "left", "scale": "yscale"}
],
"marks": [
{
"type": "rect",
"from": {"data": "table"},
"encode": {
"enter": {
"x": {"scale": "xscale", "field": "cd_status"},
"width": {"scale": "xscale", "band": 1, "offset": -1},
"y": {"scale": "yscale", "field": "num_propostas"},
"y2": {"scale": "yscale", "value": 0}
}
}
}
]
}
"""
```
#### 3. Renderizar a Visualização no Databricks
```scala
displayHTML(s"""
<div id="vis"></div>
<script type="text/javascript">
var spec = $vegaSpec;
vegaEmbed("#vis", spec);
</script>
""")
```
### Considerações Finais
- **Customização:** A especificação Vega é altamente customizável. Você pode ajustar o tipo de gráfico, cores, escalas e muito mais. Consulte a [documentação oficial do Vega](https://vega.github.io/vega/docs/) para explorar mais opções e exemplos de visualização.
- **Interatividade:** Vega suporta interatividade, permitindo que você crie visualizações dinâmicas que respondem a eventos do usuário.
- **Complexidade dos Dados:** Dependendo da complexidade do seu conjunto de dados e das visualizações desejadas, você pode precisar ajustar a preparação dos dados e a especificação Vega para atender às suas necessidades específicas.
Esses passos devem ajudá-lo a começar a usar Vega para criar um dashboard interativo no Databricks.