# defina a url alvo para download dos dadosurl<-"https://dadosabertos.web.stj.jus.br/dataset/74a99dea-a197-4d73-a169-d8c8f8f0b175/resource/b61e0c9a-ba07-4322-99b6-d54e7a914d8d/download/20220531.json"# obtenha o arquivo json raw para o R data<-jsonlite::fromJSON(url, flatten =TRUE)# obtenha o arquivo json raw para o R sem transformar em uma estrutura tabularjson.raw<-jsonlite::fromJSON(url, simplifyVector =FALSE)
Dica
A estrutura do JSON pode ser confusa pois você tem listas dentro de listas e assim por diante. É preciso quebrar estas listas e obter as variáveis.
Chamando os dados
Por exemplo, se você chamar json.raw[[1]]você obtem todas as variaveis e os valores do item 1,
Mostre o código
# chamar todas os valores e variaveis do item 1json.raw[[1]]
$id
[1] "000815869"
$numeroProcesso
[1] "1972512"
$numeroRegistro
[1] "202103489673"
$siglaClasse
[1] "REsp"
$descricaoClasse
[1] "RECURSO ESPECIAL"
$nomeOrgaoJulgador
[1] "TERCEIRA TURMA"
$ministroRelator
[1] "NANCY ANDRIGHI"
$dataPublicacao
[1] "DJE DATA:30/05/2022"
$ementa
[1] "PROCESSUAL CIVIL. RECURSOS ESPECIAIS. AÇÃO DE INSTITUIÇÃO DE JUÍZO\nARBITRAL. ARBITRAGEM. PRINCÍPIO DO KOMPETENZ-KOMPETENZ. DIREITO\nDISPONÍVEL. COMPETÊNCIA DO JUIZO ARBITRAL.\n1. Recurso especial interposto em 19/11/2020 e concluso ao gabinete\nem 13/12/2021.\n2. Cuida-se de ação de instituição de juízo arbitral.\n3. É firme a jurisprudência do STJ no sentido de que não há ofensa\nao art. 1.022, do CPC/15, quando o Tribunal de origem, aplicando o\ndireito que entende cabível à hipótese, soluciona integralmente a\ncontrovérsia submetida à sua apreciação, ainda que de forma diversa\ndaquela pretendida pela parte. Precedentes.\n4. Na hipótese, não há discussão sobre a interpretação do contrato e\nda convenção de arbitragem que embasaram o procedimento, pois se\ndefine somente qual é o juízo competente para deliberar sobre a\nlegitimidade processual da parte que invoca cláusula compromissória\nde arbitragem.\n5. Para o ajuizamento de ação de instituição do juízo arbitral, são\nindispensáveis a existência de cláusula compromissória e a\nresistência de uma das partes à sua instituição, requisitos\npresentes na hipótese (art. 7º da Lei 9.307/96).\n6. A ação de instituição de arbitragem só pode ser extinta sem\nresolução de mérito conforme o que determina o art. 07, §5º, da Lei\n9.307/96.\n7. A jurisprudência desta Corte, com fundamento no princípio da\ncompetência-competência, orienta que a discussão relativa a\nexistência, validade, eficácia e extensão da cláusula compromissória\ndeve, em regra, ser submetida, em primeiro lugar, ao juízo\narbitral. Precedentes.\n8. Cumpre ao árbitro, primordialmente, dirimir controvérsias sobre a\nlegitimidade das partes envolvidas em função de eventual\nsubjetividade de cláusula arbitral pactuada.\n9. Recurso especial de Alstom Brasil Energia e Transporte Ltda e\noutra conhecido e provido.\n10. Recurso especial de Companhia Cearense de Transportes\nMetropolitanos (METROFOR) prejudicado."
$tipoDeDecisao
[1] "ACÓRDÃO"
$dataDecisao
[1] "20220524"
$decisao
[1] "Vistos, relatados e discutidos estes autos, acordam os Ministros da\nTerceira Turma do Superior Tribunal de Justiça, na conformidade dos\nvotos e das notas taquigráficas constantes dos autos, Prosseguindo\nno julgamento, após o voto-vista do Sr. Ministro Ricardo Villas Bôas\nCueva, inaugurando a divergência, por maioria, dar provimento ao\nrecurso especial interposto por Alstom Brasil Energia e Transporte\nLtda e Outro e julgar prejudicado o recurso especial da Companhia\nCearense de Transportes Metropolitanos, nos termos do voto da Sra.\nMinistra Relatora. Votou vencido o Sr. Ministro Ricardo Villas Bôas\nCueva. Os Srs. Ministros Paulo de Tarso Sanseverino, Marco Aurélio\nBellizze e Moura Ribeiro votaram com a Sra. Ministra Relatora."
$jurisprudenciaCitada
NULL
$notas
NULL
$informacoesComplementares
[1] "Aguardando análise."
$termosAuxiliares
NULL
$teseJuridica
NULL
$tema
NULL
$referenciasLegislativas
list()
$acordaosSimilares
list()
Veja que cada uma das varíáveis está precedida por um $ e elas são numeradas cardinalmente, sendo que $id é a [[1]] , RESP é [[4] e assim por diante.
Para obter os dados de uma das variáveis e um dos items fazemos:
Mostre o código
# chamar os valores da variavel 12 do item 1json.raw[[1]][[12]]
[1] "Vistos, relatados e discutidos estes autos, acordam os Ministros da\nTerceira Turma do Superior Tribunal de Justiça, na conformidade dos\nvotos e das notas taquigráficas constantes dos autos, Prosseguindo\nno julgamento, após o voto-vista do Sr. Ministro Ricardo Villas Bôas\nCueva, inaugurando a divergência, por maioria, dar provimento ao\nrecurso especial interposto por Alstom Brasil Energia e Transporte\nLtda e Outro e julgar prejudicado o recurso especial da Companhia\nCearense de Transportes Metropolitanos, nos termos do voto da Sra.\nMinistra Relatora. Votou vencido o Sr. Ministro Ricardo Villas Bôas\nCueva. Os Srs. Ministros Paulo de Tarso Sanseverino, Marco Aurélio\nBellizze e Moura Ribeiro votaram com a Sra. Ministra Relatora."
Para obter uma lista somente com uma das variáveis, por exemplo, a decisao:
Mostre o código
# cria um objeto com os valores da variável 12json.raw.decisao<-sapply(json.raw, function(x)x[[12]])# chama os primeiros valores do objetohead(json.raw.decisao)
[1] "Vistos, relatados e discutidos estes autos, acordam os Ministros da\nTerceira Turma do Superior Tribunal de Justiça, na conformidade dos\nvotos e das notas taquigráficas constantes dos autos, Prosseguindo\nno julgamento, após o voto-vista do Sr. Ministro Ricardo Villas Bôas\nCueva, inaugurando a divergência, por maioria, dar provimento ao\nrecurso especial interposto por Alstom Brasil Energia e Transporte\nLtda e Outro e julgar prejudicado o recurso especial da Companhia\nCearense de Transportes Metropolitanos, nos termos do voto da Sra.\nMinistra Relatora. Votou vencido o Sr. Ministro Ricardo Villas Bôas\nCueva. Os Srs. Ministros Paulo de Tarso Sanseverino, Marco Aurélio\nBellizze e Moura Ribeiro votaram com a Sra. Ministra Relatora."
[2] "Vistos, relatados e discutidos estes autos, acordam os Ministros da\nTerceira Turma do Superior Tribunal de Justiça, na conformidade dos\nvotos e das notas taquigráficas constantes dos autos, por\nunanimidade, dar provimento ao recurso especial nos termos do voto\nda Sra. Ministra Relatora. Os Srs. Ministros Paulo de Tarso\nSanseverino, Ricardo Villas Bôas Cueva, Marco Aurélio Bellizze e\nMoura Ribeiro votaram com a Sra. Ministra Relatora."
[3] "Vistos e relatados estes autos em que são partes as acima indicadas,\nacordam os Ministros da Terceira Turma, por unanimidade, não\nconhecer do recurso especial de Susana da Silva Carvalho-Firma\nIndividual e negar provimento ao recurso especial de Polymer\nIndústria e Comércio de Plástico Ltda, nos termos do voto do Sr.\nMinistro Relator.\nOs Srs. Ministros Nancy Andrighi, Paulo de Tarso Sanseverino,\nRicardo Villas Bôas Cueva (Presidente) e Marco Aurélio Bellizze\nvotaram com o Sr. Ministro Relator."
[4] "Vistos e relatados estes autos em que são partes as acima indicadas,\nacordam os Ministros da Terceira Turma, por unanimidade, negar\nprovimento ao recurso especial, nos termos do voto do Sr. Ministro\nRelator.\nOs Srs. Ministros Marco Aurélio Bellizze, Moura Ribeiro, Nancy\nAndrighi e Paulo de Tarso Sanseverino votaram com o Sr. Ministro\nRelator."
[5] "Vistos e relatados estes autos em que são partes as acima indicadas,\nacordam os Ministros da Terceira Turma do Superior Tribunal de\nJustiça, por unanimidade, acolher os embargos de declaração, nos\ntermos do voto do Sr. Ministro Relator.\nOs Srs. Ministros Nancy Andrighi, Paulo de Tarso Sanseverino e\nRicardo Villas Bôas Cueva (Presidente) votaram com o Sr. Ministro\nRelator."
[6] "Vistos e relatados estes autos em que são partes as acima\nindicadas, acordam os Ministros da TERCEIRA TURMA do Superior\nTribunal de Justiça, em sessão virtual de 17/05/2022 a 23/05/2022,\npor unanimidade, negar provimento ao recurso, nos termos do voto da\nSra. Ministra Relatora.\nOs Srs. Ministros Paulo de Tarso Sanseverino, Ricardo Villas Bôas\nCueva, Marco Aurélio Bellizze e Moura Ribeiro votaram com a Sra.\nMinistra Relatora.\nPresidiu o julgamento o Sr. Ministro Ricardo Villas Bôas Cueva."
Importante
É possível perceber que a análise só funciona com uma base de dados higienizada. A analise do arquivo cru apresenta erros, pois o mesmo valor “dano moral” aparece de diversas formas pela variação da grafia.
Manipulando os dados
Vamos identificar quantas decisões foram tomar de forma unânime pelos ministros. Para isto, vamos utilizar a palavra-alvo “unanimidade” a ser pesquisada na variável “decisão”.
Mostre o código
# Começa fazendo uma lista para guardar o contador de palavrasword_counts<-list()# Define a palavra-alvo.target_word<-"unanimidade"# Chama os dados no JSON e conta as ocorrencias da palavra-alvo.for(iinseq_along(data$ministroRelator)){name<-data$ministroRelator[i]text<-data$decisao[i]# Usa a função str_count para contar as ocorrencias (insesivel a caixa alta/baixa).count<-sum(stringr::str_count(tolower(text), target_word))# Autualiza a contagem por pessoa da lista.if(name%in%names(word_counts)){word_counts[[name]]<-word_counts[[name]]+count}else{word_counts[[name]]<-count}}# Imprime a contagem por pessoa.for(nameinnames(word_counts)){count<-word_counts[[name]]cat(paste(name, ": ", count, " ocorrências de'unanimidade'\n"))}
Agora vamos ver em quantas decisões o resultado de de negar provimento ao recurso.Para isto, vamos utilizar a palavra-alvo “negar provimento” a ser pesquisada na variável “decisão”.
Mostre o código
# Começa fazendo uma lista para guardar o contador de palavrasword_counts.2<-list()# Define a palavra-alvo.target_word.2<-"negar provimento"# Chama os dados no JSON e conta as ocorrencias da palavra-alvo.for(iinseq_along(data$ministroRelator)){name<-data$ministroRelator[i]text<-data$decisao[i]# Usa a função str_count para contar as ocorrencias (insesivel a caixa alta/baixa).count.2<-sum(stringr::str_count(tolower(text), target_word.2))# Autualiza a contagem por pessoa da lista.if(name%in%names(word_counts.2)){word_counts.2[[name]]<-word_counts.2[[name]]+count.2}else{word_counts.2[[name]]<-count.2}}# Imprime a contagem por pessoa.for(nameinnames(word_counts.2)){count.2<-word_counts.2[[name]]cat(paste(name, ": ", count.2, " ocorrências de 'negar provimento'\n"))}
NANCY ANDRIGHI : 85 ocorrências de 'negar provimento'
MOURA RIBEIRO : 96 ocorrências de 'negar provimento'
RICARDO VILLAS BÔAS CUEVA : 76 ocorrências de 'negar provimento'
MARCO AURÉLIO BELLIZZE : 141 ocorrências de 'negar provimento'
PAULO DE TARSO SANSEVERINO : 62 ocorrências de 'negar provimento'
Analisando
Encontradas as decisões unânimes por ministro relator, vamos tabular os dados numa tabela, comparand com os numeros totais e identificando uma “taxa de acompanhamento” por cada ministro relator. Aquele ministro que tiver uma taxa de 1.0, significa que em todos os processo em que foi relator, a decisão foi por unanimidade.
Mostre o código
# Cria um data frame da lista de contagem de palavras.word_counts_df<-data.frame( Relator =names(word_counts), Unanimidade =unlist(word_counts))# Organiza o dataframe pela coluna de contagem em ordem decrescente.word_counts_df<-word_counts_df[order(-word_counts_df$Unanimidade), ]# Cria um dataframe para guardar o total de entradas para cada nome.total_counts_df<-data.frame( Relator =names(word_counts), Todas =sapply(names(word_counts), function(name){sum(data$ministroRelator==name)}))# Funde os dois dataframes baseado na coluna "Relator".result_df<-merge(word_counts_df, total_counts_df, by ="Relator", all.x =TRUE)# Calcula a frequencia relativa.result_df$Taxa<-result_df$Unanimidade/result_df$Todas# Organiza a tabela usando a coluna Taxa do maior para o menor.result_df<-result_df%>%arrange(desc(Taxa))# Produz a tabela usando o KableExtrakableExtra::kable(result_df)
Relator
Unanimidade
Todas
Taxa
MARCO AURÉLIO BELLIZZE
154
154
1.0000000
RICARDO VILLAS BÔAS CUEVA
86
87
0.9885057
NANCY ANDRIGHI
118
120
0.9833333
MOURA RIBEIRO
115
117
0.9829060
PAULO DE TARSO SANSEVERINO
80
82
0.9756098
Agora vamos ver a taxa de insucesso dos recursos
Mostre o código
# Cria um data frame da lista de contagem de palavras.word_counts_df.2<-data.frame( Relator =names(word_counts.2), Desprovimento =unlist(word_counts.2))# Organiza o dataframe pela coluna de contagem em ordem decrescente.word_counts_df.2<-word_counts_df.2[order(-word_counts_df.2$Desprovimento), ]# Cria um dataframe para guardar o total de entradas para cada nome.total_counts_df.2<-data.frame( Relator =names(word_counts.2), Todas =sapply(names(word_counts), function(name){sum(data$ministroRelator==name)}))# Funde os dois dataframes baseado na coluna "Relator".result_df.2<-merge(word_counts_df.2, total_counts_df, by ="Relator", all.x =TRUE)# Calcula a frequencia relativa.result_df.2$Taxa<-result_df.2$Desprovimento/result_df.2$Todas# Organiza a tabela usando a coluna Taxa do maior para o menor.result_df.2<-result_df.2%>%arrange(desc(Taxa))# Produz a tabela usando o KableExtrakableExtra::kable(result_df.2)
Relator
Desprovimento
Todas
Taxa
MARCO AURÉLIO BELLIZZE
141
154
0.9155844
RICARDO VILLAS BÔAS CUEVA
76
87
0.8735632
MOURA RIBEIRO
96
117
0.8205128
PAULO DE TARSO SANSEVERINO
62
82
0.7560976
NANCY ANDRIGHI
85
120
0.7083333
Conclusão
Não houve divergência quando o ministro relator foi o MARCO AURÉLIO BELLIZZE. De maneira geral, das decisões preferidas (560), maioria (553) é tomada por unanimidade, o que resulta numa taxa de conformidade de 98.75%.
A maioria dos recursos não tem sucesso, sendo negado provimento em 82.1428571% dos recursos.