Skip to content

Instantly share code, notes, and snippets.

@jjesusfilho
Created March 2, 2023 10:17
Show Gist options
  • Save jjesusfilho/0a8f7ab27e080f4913d7ec65c73f68cf to your computer and use it in GitHub Desktop.
Save jjesusfilho/0a8f7ab27e080f4913d7ec65c73f68cf to your computer and use it in GitHub Desktop.
Usando mutate e stringr na base infanticídio
# Esta atividade irá combinar os conhecimentos obtidos nesta unidade com aqueles obtidos na unidade anterior.
# Uma importante tarefa jurimétrica é gerar novas colunas a partir da identificação de padrões em outras.
# Além disso, gerar sumários estatísticos oferece bons insights sobre os dados à mão.
# Iremos usar a mesma base que utilizamos nas duas unidades anteriores. Se achar mais conveniente, você pode obtê-la da seguinte forma:
cjsg <- jsonlite::fromJSON("https://gist.githubusercontent.com/jjesusfilho/f140fe3808e8d2dc6c920e1629b1ae1b/raw/46163ac97f48b95ffc0afdbc2804f92765ec56a6/infanticidio.json")
## Carregue os pacotes do tidyverse
library(tidyverse)
## Exercício 1
### Visualize os dados com a função glimpse do pacote tibble (incluído no tidyverse):
glimpse(cjsg)
## Exercício 1 - Faça apenas se importou conforme o código acima
# Se você importou conforme a linha acima, deve ter notado que as colunas data_julgamento e data_publicacao estão em formato character. Isso ocorre porque
# a base importada está originalmente em formato json, que é um formato amigável tanto para pessoas como para a máquina. Vamos colocar essas datas em formato data:
cjsg <- cjsg |>
mutate(across(starts_with("data"), ymd))
#### Explicando: usei mutate para informar que quero alterar (ou criar) colunas,
### usei across para dizer que a transformação ocorrerá em colunas com algo em comum,
### usei starts_with para informar que esse algo em comum é iniciar com a palavra data,
### por fim, usei a função ymd do pacote lubridate (pertencente ao tidyverse), para informar
### que quero transformar em data uma string que está em formato ymd (year, month, day).
## Exercício 2
### Extraia as partes do número do processo com str_sub e crie colunas respectivas para cada parte.
cjsg <- cjsg |>
mutate(sequencia = str_sub(processo, 1, 7), .after = processo) |>
mutate(digito = str_sub(processo, 8,9), .after = sequencia) |>
mutate(ano = str_sub(processo, 10,13), .after = digito) |>
mutate(segmento = str_sub(processo, 14,14), .after = ano) |>
mutate(tribunal = str_sub(processo, 15,16), .after = segmento) |>
mutate(distribuidor = str_sub(processo, 17,20), .after = tribunal)
### Explicando: o str_sub é excelente para extrair padrão por posição. O mutate permite
### informar onde eu quero posicionar a nova coluna criada. No entanto, para fazer isso,
### eu tenho de um usar um novo mutate a cada operação.
## Exercício 3
# Se você prestar atenção na coluna ementa, verá que a maioria delas começa com a classe processual,
# exceto quando não há ementa alguma, somente os dados do julgado. Vamos criar uma nova coluna chamada classe2
# a partir da extracão de tudo que vem antes do primeiro ponto, de ponto e vírgula ou de um hífen.
# A função apropriada para extração é a str_extract e, claro, vamos colocá-la dentro do mutate.
cjsg <- cjsg |>
mutate(classe2 = str_extract(ementa, "[^.;-]+"))
#### Explicando: Quando você coloca um padrão dentro de colchetes com um circunflexo antecedido,
### você está informando para não usar esse padrão. O sinal de mais depois dos colchetes informa
### que o padrão antes dele deve ser obtido uma ou mais vezes. Em suma, está dizendo: pegue tudo
### que encontrar até que haja um ponto, um ponto e vírgula ou um hífen. Daí para.
## Exercício 4
#### Uma das melhores combinações para criar colunas novas a partir de textos é usar mutate com
#### str_detect. Vamos criar uma coluna chamada homicídio informando se no assunto consta a palavra homicídio ou não.
cjsg <- cjsg |>
mutate(homicidio = str_detect(assunto, "(?i)homic[íi]dio"))
### Explicando: O str_detect apenas informa com TRUE ou FALSE se o padrão está presente ou não.
### Como homicídio pode estar tanto em minúsculo quanto maiúsculo, optamos por usar (?i) antes para
### pedir para ignorar maiúsculos e minúsculos. Como o i pode vir com ou sem acento,
### colocamos as duas opções dentro de colchetes, ou seja, pode tanto um quanto o outro.
## Exercício 5
# Após gerar a coluna homicidio, vamos contar quandos dos casos são explicitamente homicídio, quantos, não:
homicidio <- cjsg |>
count(homicidio, sort = TRUE)
View(homicidio)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment