Carregando dados, Manipulando e Visualizando

Author

Ricardo Accioly

Published

August 20, 2024

Entrada de dados no R

Lendo dados de arquivos csv

library(readr)
url <- "https://www.gov.br/anp/pt-br/centrais-de-conteudo/dados-abertos/arquivos-acervo-de-dados-tecnicos/tabela-pocos.csv"

O read_delim permite que seja definido o tipo de delimitador dos dados

pocos <- read_delim(url, delim = ";", locale= locale(decimal_mark = ","), col_names = TRUE)
#> Rows: 30566 Columns: 60
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ";"
#> chr (51): POCO, CADASTRO, OPERADOR, POCO_OPERADOR, ESTADO, BACIA, BLOCO, SIG...
#> dbl  (8): LATITUDE_BASE_DD, LONGITUDE_BASE_DD, PROFUNDIDADE_VERTICAL_M, PROF...
#> lgl  (1): UNIDADE_ESTRATIGRAFICA
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(pocos)
#> # A tibble: 6 × 60
#>   POCO        CADASTRO OPERADOR POCO_OPERADOR ESTADO BACIA BLOCO SIG_CAMPO CAMPO
#>   <chr>       <chr>    <chr>    <chr>         <chr>  <chr> <chr> <chr>     <chr>
#> 1 7-PRG-59H-… 7428102… Equinor… BMC7B15       RJ     Camp… <NA>  "PRG  "   PERE…
#> 2 7-GVR-26D-… 5009002… Eneva    7GVR26DMA     MA     Parn… PN-T… "GVR  "   GAVI…
#> 3 6-BRSA-134… 7428102… Petrobr… 6MLS233RJS    RJ     Camp… <NA>  "MLS  "   MARL…
#> 4 7-CP-1505D… 9012002… Carmo    7CP1505DSE    SE     Serg… <NA>  "CP   "   CARM…
#> 5 7-GVP-6-MA  5009002… Eneva    7GVP6MA       MA     Parn… PN-T… "GVP  "   GAVI…
#> 6 7-TIE-1D-BA 2024002… SPE Tiê… 7TIE1DBA      BA     Recô… <NA>  "TIE  "   TIÊ  
#> # ℹ 51 more variables: TERRA_MAR <chr>, POCO_POS_ANP <chr>, TIPO <chr>,
#> #   CATEGORIA <chr>, RECLASSIFICACAO <chr>, SITUACAO <chr>, INICIO <chr>,
#> #   TERMINO <chr>, CONCLUSAO <chr>, TITULARIDADE <chr>, LATITUDE_BASE_4C <chr>,
#> #   LONGITUDE_BASE_4C <chr>, LATITUDE_BASE_DD <dbl>, LONGITUDE_BASE_DD <dbl>,
#> #   DATUM_HORIZONTAL <chr>, TIPO_DE_COORDENADA_DE_BASE <chr>, DIRECAO <chr>,
#> #   PROFUNDIDADE_VERTICAL_M <dbl>, PROFUNDIDADE_SONDADOR_M <dbl>,
#> #   PROFUNDIDADE_MEDIDA_M <dbl>, REFERENCIA_DE_PROFUNDIDADE <chr>, …

Bibliotecas

Vamos carregar as bibliotecas que serão usadas na manipulação e visualização de dados.

O pacote tidyverse carrega diversos pacotes muito uteis na manipulação e visualização de dados

Vamos primeiro conhecer o que tem na base de dados pocos. A base de dados possui 30566 linhas

class(pocos)  # Tipo de base de dados
#> [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"

Dados de poços

Os dados da tabela poços tem 60 colunas, mas vejam que existem diversas variáveis com dados ausentes “NA”.

Variaveis com dados ausentes

str(pocos) # estrutura da base de dados
#> spc_tbl_ [30,566 × 60] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
#>  $ POCO                      : chr [1:30566] "7-PRG-59H-RJS" "7-GVR-26D-MA" "6-BRSA-1349-RJS" "7-CP-1505D-SE" ...
#>  $ CADASTRO                  : chr [1:30566] "74281028968" "50090029009" "74281028991" "90120029391" ...
#>  $ OPERADOR                  : chr [1:30566] "Equinor Brasil" "Eneva" "Petrobras" "Carmo" ...
#>  $ POCO_OPERADOR             : chr [1:30566] "BMC7B15" "7GVR26DMA" "6MLS233RJS" "7CP1505DSE" ...
#>  $ ESTADO                    : chr [1:30566] "RJ" "MA" "RJ" "SE" ...
#>  $ BACIA                     : chr [1:30566] "Campos" "Parnaíba" "Campos" "Sergipe" ...
#>  $ BLOCO                     : chr [1:30566] NA "PN-T-68" NA NA ...
#>  $ SIG_CAMPO                 : chr [1:30566] "PRG  " "GVR  " "MLS  " "CP   " ...
#>  $ CAMPO                     : chr [1:30566] "PEREGRINO" "GAVIÃO REAL" "MARLIM SUL" "CARMÓPOLIS" ...
#>  $ TERRA_MAR                 : chr [1:30566] "M" "T" "M" "T" ...
#>  $ POCO_POS_ANP              : chr [1:30566] "S" "S" "S" "S" ...
#>  $ TIPO                      : chr [1:30566] "7 " "7 " "6 " "7 " ...
#>  $ CATEGORIA                 : chr [1:30566] "Desenvolvimento" "Desenvolvimento" "Jazida Mais Profunda" "Desenvolvimento" ...
#>  $ RECLASSIFICACAO           : chr [1:30566] "INDEFINIDO" "ABANDONADO POR OUTRAS RAZÕES" "DESCOBRIDOR DE NOVA JAZIDA PETRÓLEO" "PRODUTOR COMERCIAL DE PETRÓLEO" ...
#>  $ SITUACAO                  : chr [1:30566] "ABANDONADO PERMANENTEMENTE" "ARRASADO" "PRODUZINDO" "PRODUZINDO" ...
#>  $ INICIO                    : chr [1:30566] "24/04/2017 00:00" "21/06/2017 00:00" "28/05/2017 00:00" "24/05/2019 00:00" ...
#>  $ TERMINO                   : chr [1:30566] "01/05/2017 00:00" "05/07/2017 00:00" "16/07/2017 00:00" "04/06/2019 00:00" ...
#>  $ CONCLUSAO                 : chr [1:30566] "13/05/2017 00:00" "11/07/2017 00:00" "30/07/2017 00:00" "06/06/2019 00:00" ...
#>  $ TITULARIDADE              : chr [1:30566] "Público" "Público" "Público" "Público" ...
#>  $ LATITUDE_BASE_4C          : chr [1:30566] "-23:17:45,778" "-04:51:16,170" "-22:30:54,291" "-10:38:21,087" ...
#>  $ LONGITUDE_BASE_4C         : chr [1:30566] "-41:12:28,246" "-44:22:32,123" "-40:01:09,068" "-36:58:50,405" ...
#>  $ LATITUDE_BASE_DD          : num [1:30566] -23.3 -4.85 -22.52 -10.64 -4.68 ...
#>  $ LONGITUDE_BASE_DD         : num [1:30566] -41.2 -44.4 -40 -37 -44.7 ...
#>  $ DATUM_HORIZONTAL          : chr [1:30566] "SIRGAS2000" "SIRGAS2000" "SIRGAS2000" "SIRGAS2000" ...
#>  $ TIPO_DE_COORDENADA_DE_BASE: chr [1:30566] "Definitiva" "Definitiva" "Definitiva" "Definitiva" ...
#>  $ DIRECAO                   : chr [1:30566] "Horizontal" "Direcional" "Vertical" "Direcional" ...
#>  $ PROFUNDIDADE_VERTICAL_M   : num [1:30566] 760 1471 -4572 -835 1344 ...
#>  $ PROFUNDIDADE_SONDADOR_M   : num [1:30566] 760 2210 4600 935 1430 ...
#>  $ PROFUNDIDADE_MEDIDA_M     : num [1:30566] 760 2211 4604 934 1430 ...
#>  $ REFERENCIA_DE_PROFUNDIDADE: chr [1:30566] "MR" "MR" "MR" "MR" ...
#>  $ MESA_ROTATIVA             : num [1:30566] 50 143 32 55.8 86 ...
#>  $ COTA_ALTIMETRICA_M        : num [1:30566] 0 137 0 50.8 80 ...
#>  $ LAMINA_D_AGUA_M           : num [1:30566] 122 0 1107 0 0 ...
#>  $ DATUM_VERTICAL            : chr [1:30566] "NM" "NM" "NM" "NM" ...
#>  $ UNIDADE_ESTRATIGRAFICA    : logi [1:30566] NA NA NA NA NA NA ...
#>  $ GEOLOGIA_GRUPO_FINAL      : chr [1:30566] "Campos" "Canindé" "Lagoa Feia" "Coruripe" ...
#>  $ GEOLOGIA_FORMACAO_FINAL   : chr [1:30566] "Carapebus" "Poti" "Macabu" "Barra de Itiuba" ...
#>  $ GEOLOGIA_MEMBRO_FINAL     : chr [1:30566] NA NA NA NA ...
#>  $ CDPE                      : chr [1:30566] "Existe" "Existe" "Existe" "Existe" ...
#>  $ AGP                       : chr [1:30566] NA NA NA NA ...
#>  $ PC                        : chr [1:30566] NA NA "Existe" NA ...
#>  $ PAG                       : chr [1:30566] NA "Existe" "Existe" NA ...
#>  $ PERFIS_CONVENCIONAIS      : chr [1:30566] NA "Existe" "Existe" "Existe" ...
#>  $ DURANTE_PERFURACAO        : chr [1:30566] NA NA "Existe" NA ...
#>  $ PERFIS_DIGITAIS           : chr [1:30566] NA NA NA NA ...
#>  $ PERFIS_PROCESSADOS        : chr [1:30566] NA NA "Existe" "Existe" ...
#>  $ PERFIS_ESPECIAIS          : chr [1:30566] NA NA NA NA ...
#>  $ AMOSTRA_LATERAL           : chr [1:30566] NA NA "Existe" NA ...
#>  $ SISMICA                   : chr [1:30566] NA NA "Existe" NA ...
#>  $ TABELA_TEMPO_PROFUNDIDADE : chr [1:30566] NA NA "Existe" NA ...
#>  $ DADOS_DIRECIONAIS         : chr [1:30566] NA "Existe" "Existe" "Existe" ...
#>  $ TESTE_A_CABO              : chr [1:30566] NA "Existe" "Existe" "Existe" ...
#>  $ TESTE_DE_FORMACAO         : chr [1:30566] NA NA NA NA ...
#>  $ CANHONEIO                 : chr [1:30566] NA NA NA "Existe" ...
#>  $ TESTEMUNHO                : chr [1:30566] NA NA NA NA ...
#>  $ GEOQUIMICA                : chr [1:30566] NA NA NA NA ...
#>  $ SIG_SONDA                 : chr [1:30566] "DR-B" "GREAT120 (TUS 120)" "NS-33" "EBS-05" ...
#>  $ NOM_SONDA                 : chr [1:30566] "DRILLINGRIG-B" "GREAT - 120" "NORBE IX" "EBS-05" ...
#>  $ ATINGIU_PRESAL            : chr [1:30566] "I" "I" "S" "I" ...
#>  $ DHA_ATUALIZACAO           : chr [1:30566] "05/11/2023 05:00" "05/11/2023 05:00" "05/11/2023 05:00" "05/11/2023 05:00" ...
#>  - attr(*, "spec")=
#>   .. cols(
#>   ..   POCO = col_character(),
#>   ..   CADASTRO = col_character(),
#>   ..   OPERADOR = col_character(),
#>   ..   POCO_OPERADOR = col_character(),
#>   ..   ESTADO = col_character(),
#>   ..   BACIA = col_character(),
#>   ..   BLOCO = col_character(),
#>   ..   SIG_CAMPO = col_character(),
#>   ..   CAMPO = col_character(),
#>   ..   TERRA_MAR = col_character(),
#>   ..   POCO_POS_ANP = col_character(),
#>   ..   TIPO = col_character(),
#>   ..   CATEGORIA = col_character(),
#>   ..   RECLASSIFICACAO = col_character(),
#>   ..   SITUACAO = col_character(),
#>   ..   INICIO = col_character(),
#>   ..   TERMINO = col_character(),
#>   ..   CONCLUSAO = col_character(),
#>   ..   TITULARIDADE = col_character(),
#>   ..   LATITUDE_BASE_4C = col_character(),
#>   ..   LONGITUDE_BASE_4C = col_character(),
#>   ..   LATITUDE_BASE_DD = col_double(),
#>   ..   LONGITUDE_BASE_DD = col_double(),
#>   ..   DATUM_HORIZONTAL = col_character(),
#>   ..   TIPO_DE_COORDENADA_DE_BASE = col_character(),
#>   ..   DIRECAO = col_character(),
#>   ..   PROFUNDIDADE_VERTICAL_M = col_double(),
#>   ..   PROFUNDIDADE_SONDADOR_M = col_double(),
#>   ..   PROFUNDIDADE_MEDIDA_M = col_double(),
#>   ..   REFERENCIA_DE_PROFUNDIDADE = col_character(),
#>   ..   MESA_ROTATIVA = col_double(),
#>   ..   COTA_ALTIMETRICA_M = col_double(),
#>   ..   LAMINA_D_AGUA_M = col_double(),
#>   ..   DATUM_VERTICAL = col_character(),
#>   ..   UNIDADE_ESTRATIGRAFICA = col_logical(),
#>   ..   GEOLOGIA_GRUPO_FINAL = col_character(),
#>   ..   GEOLOGIA_FORMACAO_FINAL = col_character(),
#>   ..   GEOLOGIA_MEMBRO_FINAL = col_character(),
#>   ..   CDPE = col_character(),
#>   ..   AGP = col_character(),
#>   ..   PC = col_character(),
#>   ..   PAG = col_character(),
#>   ..   PERFIS_CONVENCIONAIS = col_character(),
#>   ..   DURANTE_PERFURACAO = col_character(),
#>   ..   PERFIS_DIGITAIS = col_character(),
#>   ..   PERFIS_PROCESSADOS = col_character(),
#>   ..   PERFIS_ESPECIAIS = col_character(),
#>   ..   AMOSTRA_LATERAL = col_character(),
#>   ..   SISMICA = col_character(),
#>   ..   TABELA_TEMPO_PROFUNDIDADE = col_character(),
#>   ..   DADOS_DIRECIONAIS = col_character(),
#>   ..   TESTE_A_CABO = col_character(),
#>   ..   TESTE_DE_FORMACAO = col_character(),
#>   ..   CANHONEIO = col_character(),
#>   ..   TESTEMUNHO = col_character(),
#>   ..   GEOQUIMICA = col_character(),
#>   ..   SIG_SONDA = col_character(),
#>   ..   NOM_SONDA = col_character(),
#>   ..   ATINGIU_PRESAL = col_character(),
#>   ..   DHA_ATUALIZACAO = col_character()
#>   .. )
#>  - attr(*, "problems")=<externalptr>

Criando um filtro de dados ausentes

n <-  nrow(pocos)

## Calculando razão de valores ausentes
val_ausentes_df <- pocos %>% 
  summarize(across(everything(), ~ sum(is.na(.)))) %>% 
  pivot_longer(everything(), names_to = "variavel", values_to = "num_val_ausentes") %>% 
  mutate(razao_val_ausente = num_val_ausentes / n)

## Vendo resultado
knitr::kable(val_ausentes_df, booktabs = TRUE)
variavel num_val_ausentes razao_val_ausente
POCO 0 0.0000000
CADASTRO 0 0.0000000
OPERADOR 2926 0.0957273
POCO_OPERADOR 0 0.0000000
ESTADO 0 0.0000000
BACIA 0 0.0000000
BLOCO 3792 0.1240594
SIG_CAMPO 4107 0.1343650
CAMPO 4107 0.1343650
TERRA_MAR 0 0.0000000
POCO_POS_ANP 0 0.0000000
TIPO 0 0.0000000
CATEGORIA 0 0.0000000
RECLASSIFICACAO 1263 0.0413204
SITUACAO 108 0.0035333
INICIO 0 0.0000000
TERMINO 1860 0.0608519
CONCLUSAO 146 0.0047765
TITULARIDADE 0 0.0000000
LATITUDE_BASE_4C 0 0.0000000
LONGITUDE_BASE_4C 0 0.0000000
LATITUDE_BASE_DD 0 0.0000000
LONGITUDE_BASE_DD 0 0.0000000
DATUM_HORIZONTAL 0 0.0000000
TIPO_DE_COORDENADA_DE_BASE 0 0.0000000
DIRECAO 0 0.0000000
PROFUNDIDADE_VERTICAL_M 18066 0.5910489
PROFUNDIDADE_SONDADOR_M 1004 0.0328470
PROFUNDIDADE_MEDIDA_M 16550 0.5414513
REFERENCIA_DE_PROFUNDIDADE 0 0.0000000
MESA_ROTATIVA 0 0.0000000
COTA_ALTIMETRICA_M 15971 0.5225087
LAMINA_D_AGUA_M 13946 0.4562586
DATUM_VERTICAL 13437 0.4396061
UNIDADE_ESTRATIGRAFICA 30566 1.0000000
GEOLOGIA_GRUPO_FINAL 27388 0.8960283
GEOLOGIA_FORMACAO_FINAL 27127 0.8874894
GEOLOGIA_MEMBRO_FINAL 30362 0.9933259
CDPE 21320 0.6975070
AGP 23656 0.7739318
PC 22122 0.7237453
PAG 29215 0.9558006
PERFIS_CONVENCIONAIS 21982 0.7191651
DURANTE_PERFURACAO 27530 0.9006740
PERFIS_DIGITAIS 9824 0.3214029
PERFIS_PROCESSADOS 29516 0.9656481
PERFIS_ESPECIAIS 29860 0.9769024
AMOSTRA_LATERAL 29604 0.9685271
SISMICA 28871 0.9445462
TABELA_TEMPO_PROFUNDIDADE 29676 0.9708827
DADOS_DIRECIONAIS 22650 0.7410194
TESTE_A_CABO 26192 0.8568998
TESTE_DE_FORMACAO 29926 0.9790617
CANHONEIO 29326 0.9594320
TESTEMUNHO 30133 0.9858339
GEOQUIMICA 27420 0.8970752
SIG_SONDA 86 0.0028136
NOM_SONDA 4120 0.1347903
ATINGIU_PRESAL 21767 0.7121311
DHA_ATUALIZACAO 0 0.0000000
## filtro
val_ausente_filtro <- val_ausentes_df %>% 
  filter(razao_val_ausente <= 0.5) %>% 
  pull(variavel)

# Aplicando o filtro
poco_filtrado <- pocos %>% 
  select(all_of(val_ausente_filtro))

Vamos inicialmente selecionar algumas colunas para podermos trabalhar com os dados.

As colunas que vamos trabalhar são:

  1. POCO
  2. OPERADOR
  3. ESTADO
  4. BACIA
  5. CAMPO
  6. TERRA_MAR
  7. CATEGORIA
  8. SITUACAO
  9. INICIO
  10. TERMINO
  11. PROFUNDIDADE_SONDADOR_M

Para selecionar colunas usamos a função select

## Vamos selecionar as colunas listadas acima
pocos_01 <- poco_filtrado %>% select(POCO,OPERADOR,ESTADO,BACIA, CAMPO,TERRA_MAR,CATEGORIA,SITUACAO, INICIO, TERMINO, PROFUNDIDADE_SONDADOR_M)
head(pocos_01)
#> # A tibble: 6 × 11
#>   POCO   OPERADOR ESTADO BACIA CAMPO TERRA_MAR CATEGORIA SITUACAO INICIO TERMINO
#>   <chr>  <chr>    <chr>  <chr> <chr> <chr>     <chr>     <chr>    <chr>  <chr>  
#> 1 7-PRG… Equinor… RJ     Camp… PERE… M         Desenvol… ABANDON… 24/04… 01/05/…
#> 2 7-GVR… Eneva    MA     Parn… GAVI… T         Desenvol… ARRASADO 21/06… 05/07/…
#> 3 6-BRS… Petrobr… RJ     Camp… MARL… M         Jazida M… PRODUZI… 28/05… 16/07/…
#> 4 7-CP-… Carmo    SE     Serg… CARM… T         Desenvol… PRODUZI… 24/05… 04/06/…
#> 5 7-GVP… Eneva    MA     Parn… GAVI… T         Desenvol… FECHADO  04/02… 10/02/…
#> 6 7-TIE… SPE Tiê… BA     Recô… TIÊ   T         Desenvol… PRODUZI… 18/02… 10/04/…
#> # ℹ 1 more variable: PROFUNDIDADE_SONDADOR_M <dbl>
summary(pocos_01)
#>      POCO             OPERADOR            ESTADO             BACIA          
#>  Length:30566       Length:30566       Length:30566       Length:30566      
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>     CAMPO            TERRA_MAR          CATEGORIA           SITUACAO        
#>  Length:30566       Length:30566       Length:30566       Length:30566      
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>     INICIO            TERMINO          PROFUNDIDADE_SONDADOR_M
#>  Length:30566       Length:30566       Min.   :   0           
#>  Class :character   Class :character   1st Qu.: 485           
#>  Mode  :character   Mode  :character   Median :1000           
#>                                        Mean   :1506           
#>                                        3rd Qu.:2239           
#>                                        Max.   :8613           
#>                                        NA's   :1004

Outra sumarização

#> 
#> Anexando pacote: 'summarytools'
#> O seguinte objeto é mascarado por 'package:tibble':
#> 
#>     view
dfSummary(pocos_01) |> stview(method = "render")

Data Frame Summary

pocos_01

Dimensions: 30566 x 11
Duplicates: 0
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 POCO [character]
1. 1-A-1-BA
2. 1-AA-1-RN
3. 1-AB-1-BA
4. 1-AB-1-PA
5. 1-AB-1-SE
6. 1-AB-1-SP
7. 1-AB-1A-SE
8. 1-AB-2-SE
9. 1-ABV-1D-RN
10. 1-AC-1-PA
[ 30556 others ]
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
1 ( 0.0% )
30556 ( 100.0% )
30566 (100.0%) 0 (0.0%)
2 OPERADOR [character]
1. Petrobras
2. 3R Potiguar
3. Carmo
4. 3R Candeias
5. 3R Fazenda Belém
6. Potiguar E&P S.A.
7. SPE Miranga
8. PetroRecôncavo
9. Seacrest SPE Cricaré
10. Origem Alagoas
[ 100 others ]
6689 ( 24.2% )
6277 ( 22.7% )
3870 ( 14.0% )
1431 ( 5.2% )
985 ( 3.6% )
912 ( 3.3% )
765 ( 2.8% )
737 ( 2.7% )
736 ( 2.7% )
609 ( 2.2% )
4629 ( 16.7% )
27640 (90.4%) 2926 (9.6%)
3 ESTADO [character]
1. RN
2. BA
3. SE
4. RJ
5. ES
6. CE
7. AL
8. AM
9. MA
10. SP
[ 14 others ]
8454 ( 27.7% )
7201 ( 23.6% )
4706 ( 15.4% )
3873 ( 12.7% )
2351 ( 7.7% )
1273 ( 4.2% )
975 ( 3.2% )
557 ( 1.8% )
398 ( 1.3% )
321 ( 1.1% )
457 ( 1.5% )
30566 (100.0%) 0 (0.0%)
4 BACIA [character]
1. Potiguar
2. Recôncavo
3. Sergipe
4. Campos
5. Espírito Santo
6. Alagoas
7. Santos
8. Solimões
9. Parnaíba
10. Amazonas
[ 27 others ]
9498 ( 31.1% )
6777 ( 22.2% )
4741 ( 15.5% )
3585 ( 11.7% )
2079 ( 6.8% )
941 ( 3.1% )
906 ( 3.0% )
367 ( 1.2% )
246 ( 0.8% )
239 ( 0.8% )
1187 ( 3.9% )
30566 (100.0%) 0 (0.0%)
5 CAMPO [character]
1. ESTREITO
2. CARMÓPOLIS
3. CANTO DO AMARO
4. FAZENDA BELÉM CE
5. DOM JOÃO
6. ALTO DO RODRIGUES
7. RIACHUELO
8. SIRIRIZINHO
9. MIRANGA
10. FAZENDA POCINHO
[ 519 others ]
2053 ( 7.8% )
2033 ( 7.7% )
1906 ( 7.2% )
973 ( 3.7% )
927 ( 3.5% )
874 ( 3.3% )
731 ( 2.8% )
640 ( 2.4% )
620 ( 2.3% )
558 ( 2.1% )
15144 ( 57.2% )
26459 (86.6%) 4107 (13.4%)
6 TERRA_MAR [character]
1. M
2. T
7027 ( 23.0% )
23539 ( 77.0% )
30566 (100.0%) 0 (0.0%)
7 CATEGORIA [character]
1. Desenvolvimento
2. Especial
3. Estratigráfico
4. Extensão
5. Injeção
6. Jazida Mais Profunda
7. Jazida Mais Rasa
8. Pioneiro
9. Pioneiro Adjacente
18949 ( 62.0% )
2026 ( 6.6% )
328 ( 1.1% )
2345 ( 7.7% )
1749 ( 5.7% )
144 ( 0.5% )
35 ( 0.1% )
4157 ( 13.6% )
833 ( 2.7% )
30566 (100.0%) 0 (0.0%)
8 SITUACAO [character]
1. FECHADO
2. ABANDONADO PERMANENTEMENT
3. PRODUZINDO
4. ABANDONADO TEMPORARIAMENT
5. ARRASADO
6. INJETANDO
7. DEVOLVIDO
8. ABANDONADO TEMPORARIAMENT
9. ABANDONADO AGUARDANDO ABA
10. CEDIDO PARA A CAPTAÇÃO DE
[ 13 others ]
6313 ( 20.7% )
5927 ( 19.5% )
5761 ( 18.9% )
4968 ( 16.3% )
2872 ( 9.4% )
1616 ( 5.3% )
1084 ( 3.6% )
835 ( 2.7% )
325 ( 1.1% )
222 ( 0.7% )
535 ( 1.8% )
30458 (99.6%) 108 (0.4%)
9 INICIO [character]
1. 03/08/1982 00:00
2. 22/04/1984 00:00
3. 24/07/1986 00:00
4. 25/11/1981 00:00
5. 29/04/1983 00:00
6. 01/03/1985 00:00
7. 02/09/1982 00:00
8. 05/02/1983 00:00
9. 05/11/1982 00:00
10. 06/01/1987 00:00
[ 16011 others ]
12 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
8 ( 0.0% )
8 ( 0.0% )
8 ( 0.0% )
8 ( 0.0% )
8 ( 0.0% )
30478 ( 99.7% )
30566 (100.0%) 0 (0.0%)
10 TERMINO [character]
1. 01/04/1983 00:00
2. 01/11/1982 00:00
3. 08/03/1983 00:00
4. 11/10/2009 00:00
5. 31/12/1983 00:00
6. 20/11/1984 00:00
7. 22/02/1983 00:00
8. 24/03/1982 00:00
9. 26/11/1983 00:00
10. 02/11/1983 00:00
[ 15172 others ]
11 ( 0.0% )
11 ( 0.0% )
10 ( 0.0% )
10 ( 0.0% )
10 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
9 ( 0.0% )
8 ( 0.0% )
28610 ( 99.7% )
28706 (93.9%) 1860 (6.1%)
11 PROFUNDIDADE_SONDADOR_M [numeric]
Mean (sd) : 1505.8 (1351.3)
min ≤ med ≤ max:
0 ≤ 1000 ≤ 8613
IQR (CV) : 1754 (0.9)
6787 distinct values 29562 (96.7%) 1004 (3.3%)

Generated by summarytools 1.0.1 (R version 4.4.1)
2024-08-20

Manipulação de dados

Vamos eliminar as linhas de dados que apresenta dados ausentes “NA” nas colunas TERMINO e PROFUNDIDADE_SONDADOR_M.

sum(is.na(pocos_01))
#> [1] 10005
sum(is.na(pocos_01$INICIO))
#> [1] 0
sum(is.na(pocos_01$TERMINO))
#> [1] 1860
sum(is.na(pocos_01$PROFUNDIDADE_SONDADOR_M))
#> [1] 1004
pocos_01 <- pocos_01 %>% drop_na(any_of(c("TERMINO",
                            "PROFUNDIDADE_SONDADOR_M")))
# melhorando a visualização dos dados
knitr::kable(
  head(pocos_01, 10), booktabs = TRUE,
  caption = 'Uma tabela mais elegante com as 10 primeras linhas de pocos_01.')
Uma tabela mais elegante com as 10 primeras linhas de pocos_01.
POCO OPERADOR ESTADO BACIA CAMPO TERRA_MAR CATEGORIA SITUACAO INICIO TERMINO PROFUNDIDADE_SONDADOR_M
7-PRG-59H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 24/04/2017 00:00 01/05/2017 00:00 760.00
7-GVR-26D-MA Eneva MA Parnaíba GAVIÃO REAL T Desenvolvimento ARRASADO 21/06/2017 00:00 05/07/2017 00:00 2210.00
6-BRSA-1349-RJS Petrobras RJ Campos MARLIM SUL M Jazida Mais Profunda PRODUZINDO 28/05/2017 00:00 16/07/2017 00:00 4600.00
7-CP-1505D-SE Carmo SE Sergipe CARMÓPOLIS T Desenvolvimento PRODUZINDO 24/05/2019 00:00 04/06/2019 00:00 935.00
7-GVP-6-MA Eneva MA Parnaíba GAVIÃO PRETO T Desenvolvimento FECHADO 04/02/2019 00:00 10/02/2019 00:00 1430.00
7-TIE-1D-BA SPE Tiêta BA Recôncavo TIÊ T Desenvolvimento PRODUZINDO 18/02/2019 00:00 10/04/2019 00:00 2614.42
7-CP-1846D-SE Carmo SE Sergipe CARMÓPOLIS T Desenvolvimento ABANDONADO TEMPORARIAMENTE COM MONITORAMENTO 31/07/2019 00:00 10/08/2019 00:00 896.00
7-CP-1828D-SE Carmo SE Sergipe CARMÓPOLIS T Desenvolvimento PRODUZINDO 06/06/2019 00:00 19/06/2019 00:00 900.00
7-CP-1827D-SE Carmo SE Sergipe CARMÓPOLIS T Desenvolvimento PRODUZINDO 04/07/2019 00:00 29/07/2019 00:00 920.00
7-CP-1638D-SE Carmo SE Sergipe CARMÓPOLIS T Desenvolvimento PRODUZINDO 16/04/2019 00:00 08/05/2019 00:00 954.00
sum(is.na(pocos_01))
#> [1] 6096

Corrigindo tipo de dados

As colunas INICIO e TERMINO são datas, mas foram lidas como caracter, vamos corrigir isto!

Para trabalhar com datas vamos usar o pacote lubridate

library(lubridate)
pocos_01$INICIO <- dmy_hm(pocos_01$INICIO, locale = Sys.getlocale("LC_TIME"))
pocos_01$TERMINO <- dmy_hm(pocos_01$TERMINO, locale = Sys.getlocale("LC_TIME"))
str(pocos_01)
#> tibble [27,793 × 11] (S3: tbl_df/tbl/data.frame)
#>  $ POCO                   : chr [1:27793] "7-PRG-59H-RJS" "7-GVR-26D-MA" "6-BRSA-1349-RJS" "7-CP-1505D-SE" ...
#>  $ OPERADOR               : chr [1:27793] "Equinor Brasil" "Eneva" "Petrobras" "Carmo" ...
#>  $ ESTADO                 : chr [1:27793] "RJ" "MA" "RJ" "SE" ...
#>  $ BACIA                  : chr [1:27793] "Campos" "Parnaíba" "Campos" "Sergipe" ...
#>  $ CAMPO                  : chr [1:27793] "PEREGRINO" "GAVIÃO REAL" "MARLIM SUL" "CARMÓPOLIS" ...
#>  $ TERRA_MAR              : chr [1:27793] "M" "T" "M" "T" ...
#>  $ CATEGORIA              : chr [1:27793] "Desenvolvimento" "Desenvolvimento" "Jazida Mais Profunda" "Desenvolvimento" ...
#>  $ SITUACAO               : chr [1:27793] "ABANDONADO PERMANENTEMENTE" "ARRASADO" "PRODUZINDO" "PRODUZINDO" ...
#>  $ INICIO                 : POSIXct[1:27793], format: "2017-04-24" "2017-06-21" ...
#>  $ TERMINO                : POSIXct[1:27793], format: "2017-05-01" "2017-07-05" ...
#>  $ PROFUNDIDADE_SONDADOR_M: num [1:27793] 760 2210 4600 935 1430 ...

Filtrando dados

Vamos analisar os poços de uma detreminada região, para isto podemos fltrar os poços de um bloco. Vamos filtrar somente os poços do CAMPO PEREGRINO usando a função filter.

pocos_02 <- pocos_01 %>% filter(CAMPO=="PEREGRINO") ##  
summary(pocos_02)
#>      POCO             OPERADOR            ESTADO             BACIA          
#>  Length:108         Length:108         Length:108         Length:108        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>     CAMPO            TERRA_MAR          CATEGORIA           SITUACAO        
#>  Length:108         Length:108         Length:108         Length:108        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>      INICIO                       TERMINO                   
#>  Min.   :1994-07-07 00:00:00   Min.   :1994-08-17 00:00:00  
#>  1st Qu.:2012-02-06 06:00:00   1st Qu.:2012-03-30 00:00:00  
#>  Median :2014-02-08 00:00:00   Median :2014-04-05 12:00:00  
#>  Mean   :2014-12-06 00:13:20   Mean   :2015-01-09 08:00:00  
#>  3rd Qu.:2017-06-25 12:00:00   3rd Qu.:2017-06-14 06:00:00  
#>  Max.   :2023-05-19 00:00:00   Max.   :2023-06-15 00:00:00  
#>  PROFUNDIDADE_SONDADOR_M
#>  Min.   : 269           
#>  1st Qu.:4433           
#>  Median :4924           
#>  Mean   :5070           
#>  3rd Qu.:6138           
#>  Max.   :8613
knitr::kable(
  head(pocos_02, 10), booktabs = TRUE,
  caption = 'Uma tabela mais elegante com as 10 primeras linhas de pocos_02.')
Uma tabela mais elegante com as 10 primeras linhas de pocos_02.
POCO OPERADOR ESTADO BACIA CAMPO TERRA_MAR CATEGORIA SITUACAO INICIO TERMINO PROFUNDIDADE_SONDADOR_M
7-PRG-59H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-04-24 2017-05-01 760.0
7-PRG-66HP-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento PRODUZINDO 2019-02-11 2019-03-07 6529.0
7-PRG-83H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento PRODUZINDO 2023-03-18 2023-04-20 5854.0
7-PRG-8HPA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2011-11-07 2011-12-02 4960.0
7-PRG-7H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento FECHADO 2011-05-14 2011-06-15 4510.0
7-PRG-58HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-05-26 2017-06-04 6015.0
7-PRG-2HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2010-11-17 2010-12-10 3969.8
7-PRG-59HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-07-15 2017-07-15 269.0
7-PRG-67H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento FECHADO 2019-05-09 2019-06-06 4465.0
7-PRG-14H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2012-01-26 2012-02-04 1167.0

Avaliando os dados

Os poços possuem diversas categorias, vamos ver que categorias existem nestes poços campo de Peregrino.

unique(pocos_02$CATEGORIA)
#> [1] "Desenvolvimento" "Injeção"         "Extensão"        "Especial"       
#> [5] "Pioneiro"
pocos_02 %>% group_by(CATEGORIA) %>% summarize(total=n())
#> # A tibble: 5 × 2
#>   CATEGORIA       total
#>   <chr>           <int>
#> 1 Desenvolvimento    84
#> 2 Especial            3
#> 3 Extensão            7
#> 4 Injeção            13
#> 5 Pioneiro            1

Filtrando poços de desenvolvimento

pocos_03 <- pocos_02 %>% filter(CATEGORIA=="Desenvolvimento") ##  
summary(pocos_03)
#>      POCO             OPERADOR            ESTADO             BACIA          
#>  Length:84          Length:84          Length:84          Length:84         
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>     CAMPO            TERRA_MAR          CATEGORIA           SITUACAO        
#>  Length:84          Length:84          Length:84          Length:84         
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>      INICIO                       TERMINO                      
#>  Min.   :2010-11-10 00:00:00   Min.   :2010-11-11 00:00:00.00  
#>  1st Qu.:2012-04-27 06:00:00   1st Qu.:2012-06-08 00:00:00.00  
#>  Median :2014-11-20 00:00:00   Median :2014-12-05 00:00:00.00  
#>  Mean   :2015-06-21 20:00:00   Mean   :2015-07-26 19:25:42.85  
#>  3rd Qu.:2017-08-06 00:00:00   3rd Qu.:2017-08-15 12:00:00.00  
#>  Max.   :2023-03-18 00:00:00   Max.   :2023-04-20 00:00:00.00  
#>  PROFUNDIDADE_SONDADOR_M
#>  Min.   : 269           
#>  1st Qu.:4506           
#>  Median :5081           
#>  Mean   :5291           
#>  3rd Qu.:6397           
#>  Max.   :8613
knitr::kable(
  head(pocos_03, 10), booktabs = TRUE,
  caption = 'Uma tabela mais elegante com as 10 primeras linhas de pocos_03.')
Uma tabela mais elegante com as 10 primeras linhas de pocos_03.
POCO OPERADOR ESTADO BACIA CAMPO TERRA_MAR CATEGORIA SITUACAO INICIO TERMINO PROFUNDIDADE_SONDADOR_M
7-PRG-59H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-04-24 2017-05-01 760.0
7-PRG-66HP-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento PRODUZINDO 2019-02-11 2019-03-07 6529.0
7-PRG-83H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento PRODUZINDO 2023-03-18 2023-04-20 5854.0
7-PRG-8HPA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2011-11-07 2011-12-02 4960.0
7-PRG-7H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento FECHADO 2011-05-14 2011-06-15 4510.0
7-PRG-58HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-05-26 2017-06-04 6015.0
7-PRG-2HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2010-11-17 2010-12-10 3969.8
7-PRG-59HA-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2017-07-15 2017-07-15 269.0
7-PRG-67H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento FECHADO 2019-05-09 2019-06-06 4465.0
7-PRG-14H-RJS Equinor Brasil RJ Campos PEREGRINO M Desenvolvimento ABANDONADO PERMANENTEMENTE 2012-01-26 2012-02-04 1167.0

Criando uma coluna com mutate

Vamos criar uma coluna que nos dará a duração da perfuração dos poços.

pocos_03$INICIO[1]
#> [1] "2017-04-24 UTC"
pocos_03$TERMINO[1]
#> [1] "2017-05-01 UTC"
pocos_03$TERMINO[1] - pocos_03$INICIO[1]
#> Time difference of 7 days
difftime(pocos_03$TERMINO[1], pocos_03$INICIO[1], units = "days")
#> Time difference of 7 days
tempo <- difftime(pocos_03$TERMINO[1], pocos_03$INICIO[1], units = "days")
str(tempo)
#>  'difftime' num 7
#>  - attr(*, "units")= chr "days"
(pocos_03$INICIO[1] %--% pocos_03$TERMINO[1])/ddays(1)
#> [1] 7
pocos_03 <- pocos_03 %>% mutate(TPERF = (INICIO %--% TERMINO)/ddays(1))
summary(pocos_03)
#>      POCO             OPERADOR            ESTADO             BACIA          
#>  Length:84          Length:84          Length:84          Length:84         
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>     CAMPO            TERRA_MAR          CATEGORIA           SITUACAO        
#>  Length:84          Length:84          Length:84          Length:84         
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>      INICIO                       TERMINO                      
#>  Min.   :2010-11-10 00:00:00   Min.   :2010-11-11 00:00:00.00  
#>  1st Qu.:2012-04-27 06:00:00   1st Qu.:2012-06-08 00:00:00.00  
#>  Median :2014-11-20 00:00:00   Median :2014-12-05 00:00:00.00  
#>  Mean   :2015-06-21 20:00:00   Mean   :2015-07-26 19:25:42.85  
#>  3rd Qu.:2017-08-06 00:00:00   3rd Qu.:2017-08-15 12:00:00.00  
#>  Max.   :2023-03-18 00:00:00   Max.   :2023-04-20 00:00:00.00  
#>  PROFUNDIDADE_SONDADOR_M     TPERF        
#>  Min.   : 269            Min.   :-347.00  
#>  1st Qu.:4506            1st Qu.:  14.50  
#>  Median :5081            Median :  24.50  
#>  Mean   :5291            Mean   :  34.98  
#>  3rd Qu.:6397            3rd Qu.:  37.25  
#>  Max.   :8613            Max.   : 598.00

Eliminando colunas com tempos negativos

pocos_03 %>% filter(TPERF<0) %>% select(POCO, INICIO, TERMINO)
#> # A tibble: 2 × 3
#>   POCO            INICIO              TERMINO            
#>   <chr>           <dttm>              <dttm>             
#> 1 7-PRG-71HPA-RJS 2020-12-18 00:00:00 2020-01-06 00:00:00
#> 2 7-PRG-58HB-RJS  2017-06-19 00:00:00 2017-06-04 00:00:00
pocos_03 <- pocos_03 %>% filter(TPERF > 0) 

Visualizando os dados de PEREGRINO

Box-Plot

ggplot(pocos_03, aes(x=CAMPO, y=TPERF)) +
  geom_boxplot()

Veja que existem alguns tempos bem elevados que estão representados por pontos no box-plot. Eles podem ser considerados pontos afastados (outliers), que neste caso vamos eliminar.

pocos_04 <- pocos_03 %>% filter(TPERF < 100)
ggplot(pocos_04, aes(x=CAMPO, y=TPERF)) +
  geom_boxplot()

Histograma

ggplot(pocos_04, aes(x=TPERF)) +
  geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Veja que desta forma o ggplot usa o seu padrão de 30 faixas de dados, que geralmente não é o mais adequado.

Vamos usar uma regra adequada para definição de número de faixas.

Criando um histograma usando a regra de Sturges

A regra de Sturges indica 7 faixas enquanto que o padrão do ggplot2 é 30.

ggplot(pocos_04, aes(x = TPERF)) +
  geom_histogram(bins = round(1+3.322*log10(nrow(pocos_04)),0))

Veja que agora temos um histograma mais suave.

Gráfico de Dispersão

ggplot(pocos_04, aes(x=PROFUNDIDADE_SONDADOR_M, y=TPERF)) + 
  geom_point()

cor(pocos_04$PROFUNDIDADE_SONDADOR_M, pocos_04$TPERF)
#> [1] 0.5253442

Podemos perceber que há uma relação entre o tempo de perfuração e a profundidade do poço.

Também é possível se perceber que ainda existem dados com comportamentos estranhos. Poços rasos com profundidade muito diferente dos demais, além disso um poço muito profundo com duração muito pequena.

Se fossemos construir um modelo certamente terímos que investigar o porque destes comportamentos.

Melhorando a descrição das colunas

names(pocos_04)
#>  [1] "POCO"                    "OPERADOR"               
#>  [3] "ESTADO"                  "BACIA"                  
#>  [5] "CAMPO"                   "TERRA_MAR"              
#>  [7] "CATEGORIA"               "SITUACAO"               
#>  [9] "INICIO"                  "TERMINO"                
#> [11] "PROFUNDIDADE_SONDADOR_M" "TPERF"
pocos_04A <- pocos_04
names(pocos_04) <- tolower(names(pocos_04))
names(pocos_04)
#>  [1] "poco"                    "operador"               
#>  [3] "estado"                  "bacia"                  
#>  [5] "campo"                   "terra_mar"              
#>  [7] "categoria"               "situacao"               
#>  [9] "inicio"                  "termino"                
#> [11] "profundidade_sondador_m" "tperf"
# Outra forma com o pacote janitor
library(janitor)
#> 
#> Anexando pacote: 'janitor'
#> Os seguintes objetos são mascarados por 'package:stats':
#> 
#>     chisq.test, fisher.test
names(pocos_04A)
#>  [1] "POCO"                    "OPERADOR"               
#>  [3] "ESTADO"                  "BACIA"                  
#>  [5] "CAMPO"                   "TERRA_MAR"              
#>  [7] "CATEGORIA"               "SITUACAO"               
#>  [9] "INICIO"                  "TERMINO"                
#> [11] "PROFUNDIDADE_SONDADOR_M" "TPERF"
pocos_04A <- clean_names(pocos_04A)
names(pocos_04A)
#>  [1] "poco"                    "operador"               
#>  [3] "estado"                  "bacia"                  
#>  [5] "campo"                   "terra_mar"              
#>  [7] "categoria"               "situacao"               
#>  [9] "inicio"                  "termino"                
#> [11] "profundidade_sondador_m" "tperf"