12. Dataviz Code Session: Dados Geoespaciais#

12.1. Objetivos da DCS#

  • Aplicar técnicas de dataviz para plotagem e manipulação de representações visuais geoespaciais relacionadas a campos e poços de petróleo em bacias sedimentares brasileiras.

12.2. Ferramentas utilizadas#

  • Módulos Python

    • numpy

    • pandas

    • matplotlib

    • seaborn

    • geopandas

12.3. Aplicação do modelo referencial#

import numpy as np, pandas as pd, matplotlib.pyplot as plt, seaborn as sb, geopandas as geo

12.3.1. Dados de entrada#

  • Shapefiles dos campos de produção (ANP) - [Fonte]

geocp = geo.read_file('../data/ANP_campos_shp/CAMPOS_PRODUCAO_SIRGASPolygon.shp')
geocp
NUM_RODADA NOM_CAMPO AREA OPERADOR_C NUM_CONTRA DAT_ASSINA DAT_TERMIN NOM_BACIA COD_CAMPO SIG_CAMPO DAT_DESCOB DAT_INICIO ETAPA MED_LAMINA FLUIDO_PRI ID geometry
0 Rodada 11 IRARA 6.0 BGM Petróleo e Gás Ltda. 48610005457201381 None None Espírito Santo 4841.0 IRAR 03/01/2022 13/07/2022 Produção 0.0 ÓLEO 2460.0 POLYGON ((-39.81288 -19.25048, -39.81288 -19.2...
1 Rodada 0 PESCADA 55.0 Petróleo Brasileiro S.A. 480000039129784 06-08-1998 None Potiguar 213.0 PE 24-10-1980 01-05-1999 Produção 19.0 GÁS 1100.0 POLYGON ((-36.76596 -4.73997, -36.76856 -4.739...
2 Rodada 0 SALGO 11.0 Petróleo Brasileiro S.A. 480000038419738 06-08-1998 None Sergipe 275.0 SG 01-12-1984 31-12-1986 Em Devolução 14.0 ÓLEO 1102.0 POLYGON ((-36.57586 -10.63324, -36.57846 -10.6...
3 Rodada 0 CAXAREU 34.0 Petróleo Brasileiro S.A. 480000035609749 06/08/1998 None Campos 1164.0 CXR 07-08-2002 None Desenvolvimento 1141.0 ÓLEO 1125.0 POLYGON ((-40.07812 -21.39323, -40.07812 -21.3...
4 Rodada 0 CEXIS 54.0 3R Candeias S.A. 480000036419749 06-08-1998 None Recôncavo 88.0 CX 07-03-1966 30-06-1966 Produção 0.0 GÁS 1126.0 POLYGON ((-38.4639 -12.62544, -38.4613 -12.625...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
422 AM2 Porto do Mangue 6.0 Máxima 07 Exploração e Produção de Petróleo Ltda 48610007488200648 None None Potiguar 4535.0 4201 10/10/2011 None Plano de Avaliação (Teste de longa duração) 0.0 None 2623.0 POLYGON ((-36.79461 -5.09674, -36.79461 -5.099...
423 Rodada 0 MIRANGA LESTE 1.0 Petróleo Brasileiro S.A. 480000036759761 None None Recôncavo 182.0 MGL None None Em Devolução 0.0 OUTROS 2661.0 POLYGON ((-38.14358 -12.32336, -38.14619 -12.3...
424 Rodada 13 (AM) SÃO JOÃO 6.0 Petro-Victory Energia Ltda. 48610002005201691 12/5/2016 None Barreirinhas 4695.0 SJ 01/08/1966 01/07/2020 Produção 0.0 Óleo 2662.0 POLYGON ((-43.32852 -2.59932, -43.32852 -2.596...
425 Rodada 9 GAVIÃO CARIJÓ 163.0 Eneva S.A. 48610001413200815 None None Parnaíba 4629.0 GVCA None None Desenvolvimento 0.0 GÁS 2700.0 POLYGON ((-44.33073 -5.66927, -44.33073 -5.684...
426 Rodada 0 LESTE DE POÇO XAVIER 22.0 Potiguar E&P S.A. 4861000400098 None None Potiguar 167.0 LPX None None Produção 0.0 ÓLEO 2701.0 POLYGON ((-37.67708 -5.52122, -37.67448 -5.521...

427 rows × 17 columns

  • Shapefiles do território nacional

geobr = geo.read_file('../data/gadm36_BRA_shp/gadm36_BRA_1.shp')
geobr
GID_0 NAME_0 GID_1 NAME_1 VARNAME_1 NL_NAME_1 TYPE_1 ENGTYPE_1 CC_1 HASC_1 geometry
0 BRA Brazil BRA.1_1 Acre None None Estado State None BR.AC POLYGON ((-68.10553 -10.72192, -68.10547 -10.7...
1 BRA Brazil BRA.2_1 Alagoas None None Estado State None BR.AL MULTIPOLYGON (((-35.88986 -9.84431, -35.88986 ...
2 BRA Brazil BRA.3_1 Amapá None None Estado State None BR.AP MULTIPOLYGON (((-50.8257 2.52208, -50.8257 2.5...
3 BRA Brazil BRA.4_1 Amazonas Amazone None Estado State None BR.AM POLYGON ((-58.13699 -7.35614, -58.13682 -7.356...
4 BRA Brazil BRA.5_1 Bahia Ba¡a None Estado State None BR.BA MULTIPOLYGON (((-38.69208 -17.95958, -38.69208...
5 BRA Brazil BRA.6_1 Ceará None None Estado State None BR.CE MULTIPOLYGON (((-40.83181 -2.88125, -40.83181 ...
6 BRA Brazil BRA.7_1 Distrito Federal None None Distrito Federal Federal District None BR.DF POLYGON ((-47.93915 -16.05135, -48.0211 -16.05...
7 BRA Brazil BRA.8_1 Espírito Santo Espiritu Santo None Estado State None BR.ES MULTIPOLYGON (((-40.88403 -21.16125, -40.88403...
8 BRA Brazil BRA.9_1 Goiás Goiáz|Goyáz None Estado State None BR.GO POLYGON ((-49.0048 -18.53718, -49.01248 -18.53...
9 BRA Brazil BRA.10_1 Maranhão São Luíz de Maranhão None Estado State None BR.MA MULTIPOLYGON (((-44.54986 -1.88458, -44.54986 ...
10 BRA Brazil BRA.12_1 Mato Grosso Matto Grosso None Estado State None BR.MT POLYGON ((-52.47143 -16.12672, -52.48842 -16.1...
11 BRA Brazil BRA.11_1 Mato Grosso do Sul None None Estado State None BR.MS POLYGON ((-54.16836 -23.9992, -54.17063 -24.00...
12 BRA Brazil BRA.13_1 Minas Gerais Minas|Minas Geraes None Estado State None BR.MG POLYGON ((-50.84402 -19.96758, -50.85332 -19.9...
13 BRA Brazil BRA.14_1 Pará None None Estado State None BR.PA MULTIPOLYGON (((-47.29792 -0.63375, -47.29792 ...
14 BRA Brazil BRA.15_1 Paraíba Parahyba None Estado State None BR.PB MULTIPOLYGON (((-43.01208 -9.40801, -43.01453 ...
15 BRA Brazil BRA.16_1 Paraná None None Estado State None BR.PR MULTIPOLYGON (((-48.36514 -25.73403, -48.36514...
16 BRA Brazil BRA.17_1 Pernambuco Pernambouc None Estado State None BR.PE MULTIPOLYGON (((-35.13597 -8.83792, -35.13597 ...
17 BRA Brazil BRA.18_1 Piauí Piauhy None Estado State None BR.PI POLYGON ((-42.69078 -9.54547, -42.69122 -9.545...
18 BRA Brazil BRA.19_1 Rio de Janeiro None None Estado State None BR.RJ MULTIPOLYGON (((-44.67125 -23.35458, -44.67125...
19 BRA Brazil BRA.20_1 Rio Grande do Norte None None Estado State None BR.RN MULTIPOLYGON (((-35.10958 -6.19375, -35.10958 ...
20 BRA Brazil BRA.21_1 Rio Grande do Sul None None Estado State None BR.RS MULTIPOLYGON (((-52.07069 -32.02847, -52.07069...
21 BRA Brazil BRA.22_1 Rondônia Guaporé None Estado State None BR.RO POLYGON ((-62.89219 -12.86014, -62.89212 -12.8...
22 BRA Brazil BRA.23_1 Roraima Rio Branco None Estado State None BR.RR POLYGON ((-60.0379 0.26349, -60.04676 0.23211,...
23 BRA Brazil BRA.24_1 Santa Catarina Santa Catharina None Estado State None BR.SC MULTIPOLYGON (((-48.54236 -27.9318, -48.54236 ...
24 BRA Brazil BRA.25_1 São Paulo None None Estado State None BR.SP MULTIPOLYGON (((-48.08236 -25.28431, -48.08236...
25 BRA Brazil BRA.26_1 Sergipe None None Estado State None BR.SE MULTIPOLYGON (((-37.38458 -11.45986, -37.38458...
26 BRA Brazil BRA.27_1 Tocantins None None Estado State None BR.TO POLYGON ((-49.23736 -12.88397, -49.23532 -12.8...
  • Planilhas de poços públicos (2022 e 2023)

p2022 = pd.read_excel('../data/ANP_pocos_publicos/planilha-pocos-publicos-2022.xlsx')
p2023 = pd.read_excel('../data/ANP_pocos_publicos/planilha-pocos-publicos-2023.xlsx')

12.3.2. Processamento#

def filter_by_state(state,fluid,phase):
    """Seleciona poços e campos para estado, bacia e propriedades especificados."""
    
    a = p2022[p2022.ESTADO == state[0]]
    b = p2023[p2023.ESTADO == state[0]]
    c = geobr[geobr.NAME_1 == state[1]]
    d = geocp[(geocp.NOM_BACIA == basin) & (geocp.FLUIDO_PRI == fluid) & (geocp.ETAPA == phase)]
    
    return a, b, c, d
  • Escolha de parâmetros e aplicação de filtragem

state = ('BA','Bahia')
basin = 'Recôncavo'
fluid = 'ÓLEO'
stage = 'Produção'
p2022_s, p2023_s, geo_s, geo_cp = filter_by_state(state,fluid,stage)
# casting de coordenadas
p2023_s['LATITUDE_BASE_DD'] = p2023_s['LATITUDE_BASE_DD'].str.replace(',','.').astype(float)
p2023_s['LONGITUDE_BASE_DD'] = p2023_s['LONGITUDE_BASE_DD'].str.replace(',','.').astype(float)

12.3.3. Visualizações#

  • Mapa geográfico de território e campos

f, a = plt.subplots()
geo_s.plot(ax=a,edgecolor='k',facecolor='r',alpha=0.4)
geo_cp.plot(ax=a,edgecolor='w',facecolor='g',alpha=1.0);
../_images/23-dcs-geoespacial_22_0.png
  • Selecionando poços (onshore ou offshore) que se tornaram públicos em 2022 e em 2023

# para onshore, 'T' 
p2022_m = p2022_s[p2022_s['TERRA_MAR'] == 'T']
p2022_tcm = p2022_m['CAMPO'].unique()

p2023_m = p2023_s[p2023_s['TERRA_MAR'] == 'T']
p2023_tcm = p2023_m['CAMPO'].unique()
  • Selecionando campos relacionados aos poços

geo_cp_m_2022 = geo_cp.apply(lambda row: row[geo_cp['NOM_CAMPO'].isin(p2022_tcm)])
geo_cp_m_2023 = geo_cp.apply(lambda row: row[geo_cp['NOM_CAMPO'].isin(p2023_tcm)])
  • Plota campos de interesse

f, a = plt.subplots()

#geo_s.plot(ax=a,edgecolor='k',facecolor='gray',alpha=.2)
geo_cp_m_2022.plot(ax=a,edgecolor='k',lw=.5,facecolor='lightblue',alpha=.7)
geo_cp_m_2023.plot(ax=a,edgecolor='k',lw=.5,facecolor='darkblue',alpha=.7);
../_images/23-dcs-geoespacial_28_0.png
  • Lista de campos participantes da RV

cp_list_2022 =  geo_cp_m_2022.NOM_CAMPO.tolist()
cp_list_2023 =  geo_cp_m_2023.NOM_CAMPO.tolist()

print('Atividade de divulgação em 2022 nos campos de: ')
print(*[x for x in cp_list_2022], sep=', ', end='.\n\n')

print('Atividade de divulgação em 2023 nos campos de: ')
print(*[x for x in cp_list_2023], sep=', ', end='.\n')
Atividade de divulgação em 2022 nos campos de: 
TIÊ, ARAÇÁS, MATA DE SÃO JOÃO.

Atividade de divulgação em 2023 nos campos de: 
TIÊ.

12.3.4. RV finalística#

f, a = plt.subplots(2,1,figsize=(14,6),sharex=True)

# --- 2022

geo_cp_m_2022.plot(ax=a[0],edgecolor='k',lw=.5,facecolor='lightblue',alpha=.5)
p2022_m_1 = p2022_m[p2022_m['CAMPO'].isin(cp_list_2022)]
p2022_m_1f = sb.scatterplot(data=p2022_m_1,
                              x='LONGITUDE1',
                              y='LATITUDE_1',
                              hue='POCO',
                              marker='o',edgecolor='k',
                              palette='magma',
                              ax=a[0])
p2022_m_1f.legend(bbox_to_anchor=(1.4,1),ncol=2,fontsize=8)

a[0].set_ylabel('Longitude')
a[0].set_title(f'Poços públicos em 2022 - Bacia: {basin}',fontsize=10)

geo_cp_m_2022.apply(lambda x: a[0].annotate(
                            text=f'{x.NOM_CAMPO} ({x.SIG_CAMPO})',
                            xy=np.array(x.geometry.centroid.coords[0]) + np.array([0.15,0]), 
                            ha='left', 
                            va='center',
                            color = "black",
                            fontsize=6, 
                            weight='light'),                            
                            axis=1)


# --- 2023

geo_cp_m_2023.plot(ax=a[1],edgecolor='k',lw=.5,facecolor='darkblue',alpha=.5)
p2023_m_1 = p2023_m[p2023_m['CAMPO'].isin(cp_list_2023)]
p2023_m_1f = sb.scatterplot(data=p2023_m_1,
                             x='LONGITUDE_BASE_DD',
                             y='LATITUDE_BASE_DD',
                             hue='POCO',
                             marker='o',edgecolor='k',
                             palette='cividis',
                             ax=a[1])
p2023_m_1f.legend(bbox_to_anchor=(1.4,1),ncol=2,fontsize=8)

a[1].set_xlabel('Latitude')
a[1].set_ylabel('Longitude')
a[1].set_title(f'Poços públicos em 2023 - Bacia: {basin}',fontsize=10)

geo_cp_m_2023.apply(lambda x: a[1].annotate(
                            text=f'{x.NOM_CAMPO} ({x.SIG_CAMPO})',
                            xy=np.array(x.geometry.centroid.coords[0]) + np.array([0.15,0]), 
                            ha='left', 
                            va='center',
                            color = "black",
                            fontsize=6, 
                            weight='light'),                            
                            axis=1);
../_images/23-dcs-geoespacial_32_0.png