# Insert in Path Project Directory
sys.path.insert(0, str(Path().cwd().parent))Atualização
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
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()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
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
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
split_designacao
split_designacao (df:pandas.core.frame.DataFrame)
Parse a bandwidth string to extract the numerical component and a character class
SRD
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
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
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
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 |
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)
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! ⚠