Created
March 2, 2023 10:17
-
-
Save jjesusfilho/0a8f7ab27e080f4913d7ec65c73f68cf to your computer and use it in GitHub Desktop.
Usando mutate e stringr na base infanticídio
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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