Atualização

Este módulo atualiza as bases. Executa as queries sql do STEL, RADCOM e baixa os arquivos de estações e plano básico do MOSAICO.
# Insert in Path Project Directory
sys.path.insert(0, str(Path().cwd().parent))

Conexão com o banco de dados

A função a seguir é um wrapper simples que utiliza o pyodbc para se conectar ao banco de dados base da Anatel e retorna o objeto da conexão


source

connect_db

 connect_db (server:str='ANATELBDRO05', database:str='SITARWEB',
             trusted_conn:str='yes', mult_results:bool=True)

Conecta ao Banco server e retorna o ‘cursor’ (iterador) do Banco

Type Default Details
server str ANATELBDRO05 Servidor do Banco de Dados
database str SITARWEB Nome do Banco de Dados
trusted_conn str yes Conexão Segura: yes | no
mult_results bool True Múltiplos Resultados
Returns Connection
from fastcore.test import test_eq
#echo: false
def test_connection():
    conn = connect_db()
    cursor = conn.cursor()
    for query in (SQL_RADCOM,SQL_STEL):
        cursor.execute(query)
        test_eq(type(cursor.fetchone()), pyodbc.Row)
test_connection()

source

clean_mosaico

 clean_mosaico (df:pandas.core.frame.DataFrame,
                pasta:Union[str,pathlib.Path])

Clean the merged dataframe with the data from the MOSAICO page

Type Details
df DataFrame DataFrame com os dados de Estações e Plano_Básico mesclados
pasta Union
Returns DataFrame DataFrame com os dados mesclados e limpos

Atualização das bases de dados

As bases de dados são atualizadas atráves das funções a seguir, o único argumento passado em todas elas é a pasta na qual os arquivos locais processados serão salvos, os nomes dos arquivos são padronizados e não podem ser editados para que as funções de leitura e processamento recebam somente a pasta na qual esses arquivos foram salvos.

RADCOM


source

update_radcom

 update_radcom (conn:pyodbc.Connection, folder:Union[str,pathlib.Path])

Atualiza a tabela local retornada pela query RADCOM, com tratamento de erro de conectividade.

Type Details
conn Connection Objeto de conexão de banco
folder Union Pasta onde salvar os arquivos
Returns DataFrame DataFrame com os dados atualizados
import warnings
import os
# warnings.filterwarnings("ignore", message='install "ipywidgets" for Jupyter support')
warnings.filterwarnings("ignore")
folder = Path.cwd().parent / 'dados'
conn = connect_db()
CPU times: total: 0 ns
Wall time: 4.01 ms
radcom = update_radcom(conn, folder)
radcom.sample(5)

CPU times: total: 547 ms
Wall time: 1.22 s
Frequência Entidade Fistel Número_Estação Município Código_Município UF Latitude Longitude Classe Num_Serviço Classe_Emissão Largura_Emissão(kHz) Validade_RF Status Fonte Multiplicidade
2154 87.9 ASSOCIACAO CULTURAL COMUNITARIA SIMONENSE 50014035022 631438289 São Simão 3550902 SP -21.479722222222165 -47.55694444444433 3 231 <NA> 256 <NA> RADCOM SRD 1
2126 87.9 ASSOCIACAO COM.BENEF.NOSSA SRA.DA CONCEICAO-RA... 50011838558 659050722 Pereiras 3537503 SP -23.075833333333332 -47.969444444444335 3-A 231 <NA> 256 <NA> RADCOM SRD 1
2354 98.3 ASSOCIAÇÃO DE RADIODIFUSÃO COMUNITÁRIA ARNORED... 50407724672 699363594 Governador Celso Ramos 4206009 SC -27.3155555555555 -48.5480555555555 P-A 231 <NA> 256 <NA> RADCOM SRD 1
3248 104.9 ASSOCIACAO COMUNITARIA DE SANTO ANTONIO DO MONTE 50013840010 684040328 Santo Antônio do Monte 3160405 MG -20.087777777777667 -45.29388888888883 3-B 231 <NA> 256 <NA> RADCOM SRD 1
2042 87.9 ASSOCIACAO COMUNIT. PRO-DESENV. CULT. E ARTIST... 50011314303 631374922 Caconde 3508702 SP -21.538333333333334 -46.648611111111 3 231 <NA> 256 <NA> RADCOM SRD 1

STEL


source

update_stel

 update_stel (conn:pyodbc.Connection, folder:Union[str,pathlib.Path])

Atualiza a tabela local retornada pela query STEL, com tratamento de erro de conectividade.

Type Details
conn Connection Objeto de conexão de banco
folder Union Pasta onde salvar os arquivos
Returns DataFrame DataFrame com os dados atualizados
stel = update_stel(conn, folder)
stel.sample(5)

CPU times: total: 3.98 s
Wall time: 29.6 s
Frequência Entidade Fistel Número_Estação Município Código_Município UF Latitude Longitude Classe Num_Serviço Classe_Emissão Largura_Emissão(kHz) Validade_RF Status Fonte Multiplicidade
23384 767.0 TELEVISAO RIO FORMOSO LTDA 13030154475 3298213 Miranorte 1713304 TO -9.535833333333333 -48.576111111111 TX 728 C3F 6000.0 1997-10-20 L STEL 1
14150 156.55 VOPAK BRASIL S.A. 50415542502 1006008893 Santos 3548500 SP -23.926388888888834 -46.372777777777664 FC 604 F3E 11.0 2037-10-07 L STEL 1
31795 25.375 EDIFICIO DOUBLE SPACE FARIA LIMA 50403887305 688907423 São Paulo 3550308 SP -23.591116666666668 -46.68056944444433 TX 060 F3E 16.0 2016-10-24 L STEL 1
2056 131.875 AZUL LINHAS AEREAS BRASILEIRAS S.A 50405707169 1009310787 São Gonçalo do Amarante 2412005 RN -5.763611111111 -35.37222222222216 FA 507 A3E 6.0 2029-01-07 L STEL 1
20432 156.75 PETROLEO BRASILEIRO S A PETROBRAS 50411168908 700046925 Santos 3548500 SP -25.266938888888834 -45.252811111111 FC 604 G3E 16.0 2033-12-03 L STEL 1

MOSAICO


source

split_designacao

 split_designacao (df:pandas.core.frame.DataFrame)

Parse a bandwidth string to extract the numerical component and a character class

SRD


source

update_srd

 update_srd (mongo_client:pymongo.mongo_client.MongoClient,
             folder:Union[str,pathlib.Path])

Efetua a query na tabela de Radiodifusão no banco mongoDB mongo_client e atualiza o arquivo local

Type Details
mongo_client MongoClient Objeto de conexão com o MongoDB
folder Union Pasta onde salvar os arquivos
Returns DataFrame DataFrame com os dados atualizados
uri = os.environ['MONGO_URI']
mongo_client = MongoClient(uri)
mongo_client.server_info()
{'version': '4.0.5',
 'gitVersion': '3739429dd92b92d1b0ab120911a23d50bf03c412',
 'targetMinOS': 'Windows 7/Windows Server 2008 R2',
 'modules': [],
 'allocator': 'tcmalloc',
 'javascriptEngine': 'mozjs',
 'sysInfo': 'deprecated',
 'versionArray': [4, 0, 5, 0],
 'openssl': {'running': 'Windows SChannel'},
 'buildEnvironment': {'distmod': '2008plus-ssl',
  'distarch': 'x86_64',
  'cc': 'cl: Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24223 for x64',
  'ccflags': '/nologo /EHsc /W3 /wd4355 /wd4800 /wd4267 /wd4244 /wd4290 /wd4068 /wd4351 /wd4373 /we4013 /we4099 /we4930 /WX /errorReport:none /MD /O2 /Oy- /bigobj /utf-8 /Zc:rvalueCast /Zc:strictStrings /volatile:iso /Gw /Gy /Zc:inline',
  'cxx': 'cl: Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24223 for x64',
  'cxxflags': '/TP',
  'linkflags': '/nologo /DEBUG /INCREMENTAL:NO /LARGEADDRESSAWARE /OPT:REF',
  'target_arch': 'x86_64',
  'target_os': 'windows'},
 'bits': 64,
 'debug': False,
 'maxBsonObjectSize': 16777216,
 'storageEngines': ['devnull', 'ephemeralForTest', 'mmapv1', 'wiredTiger'],
 'ok': 1.0}
mosaico = update_srd(mongo_client, folder)
mosaico.sample(5)

CPU times: total: 3 s
Wall time: 3.75 s
Frequência Entidade Fistel Número_Estação Município Código_Município UF Latitude Longitude Classe Num_Serviço Classe_Emissão Largura_Emissão(kHz) Validade_RF Status Fonte Multiplicidade
6112 57.0 PREFEITURA MUNICIPAL DE SAO BONIFACIO 14023501395 323090044 São Bonifácio 4215901 SC -27.9013888888888333 -48.9291666666666666 C 800 <NA> 6000.0 2018-12-31 TV-C7 MOS 1
10493 533.0 TELEVISAO INDEPENDENTE DE SAO JOSE DO RIO PRET... 50409648620 699602360 Cajazeiras 2503704 PB -6.8947277777776666 -38.5508333333333333 A 801 <NA> 5700.0 2027-07-30 TV-C4 MOS 1
3721 213.0 PREFEITURA MUNICIPAL DE SONORA 50400553821 322828732 Sonora 5007935 MS -17.5802777777776666 -54.7505555555555000 C 800 <NA> 6000.0 2018-12-31 TV-C7 MOS 1
16865 107.3 BRASIL AMAZONIA COMUNICACAO E EMPREENDIMENTOS ... 50001791109 323688144 Nova Timboteua 1505007 PA -1.1997222222221666 -47.3977777777776666 A3 230 <NA> 256.0 2028-12-08 FM-C4 MOS 1
11089 521.0 TELEVISAO ANHANGUERA DE ARAGUAINA LTDA 50411145363 1005698659 Augustinópolis 1702554 TO <NA> <NA> C 801 <NA> 5700.0 2028-10-03 TV-C3 MOS 1

TELECOM


source

update_telecom

 update_telecom (mongo_client:pymongo.mongo_client.MongoClient,
                 folder:Union[str,pathlib.Path])

Efetua a query na tabela licenciamento no banco mongoDB mongo_client e atualiza o arquivo local

Type Details
mongo_client MongoClient Objeto de conexão com o MongoDB
folder Union Pasta onde salvar os arquivos
Returns DataFrame DataFrame com os dados atualizados
telecom = update_telecom(mongo_client, folder)
telecom.sample(5)
# telecom = pd.read_parquet(folder / 'telecom.parquet.gzip')
 ⚠ Executando a query na base licenciamento do Mosaico, processo demorado! ⚠
AttributeError: 'bool' object has no attribute 'iteritems'

AERONAUTICA


source

update_aero

 update_aero (folder:Union[str,pathlib.Path])

Atualiza a base de dados de emissões da aeronáutica

Type Details
folder Union Pasta onde salvar os arquivos
Returns DataFrame DataFrame com os dados atualizados
aero = update_aero(folder)
aero.sample(5)
ExpatError: junk after document element: line 39, column 16

Base Consolidada ANATEL


source

validar_coords

 validar_coords (row:pandas.core.series.Series,
                 connector:pyodbc.Connection=None)

Valida os dados de coordenadas e município em row no polígono dos municípios em banco corporativ do IBGE

Type Default Details
row Series Linha de um DataFrame
connector Connection None Conector de Banco de Dados
Returns List DataFrame com dados do município

source

update_cached_df

 update_cached_df (df:pandas.core.frame.DataFrame,
                   df_cache:pandas.core.frame.DataFrame)

Mescla ambos dataframes eliminando os excluídos (existentes somente em df_cache)


source

update_base

 update_base (conn:pyodbc.Connection,
              clientMongoDB:pymongo.mongo_client.MongoClient,
              folder:Union[str,pathlib.Path], conn_threads:bool=False)

Wrapper que atualiza opcionalmente lê e atualiza as 4 bases indicadas anteriormente, as combina e salva o arquivo consolidado na folder folder

Type Default Details
conn Connection Objeto de conexão de banco
clientMongoDB MongoClient Objeto de conexão com o MongoDB
folder Union Pasta onde salvar os arquivos
conn_threads bool False Flag para criar uma conexão de banco por thread
Returns DataFrame DataFrame com os dados atualizados
# base = update_base(conn, mongo_client, folder)
# base.sample(5)



 ⚠ Executando a query na base licenciamento do Mosaico, processo demorado! ⚠