Skip to content

Commit

Permalink
Adicionado log referente ao processamento da coluna Designação_Emissão
Browse files Browse the repository at this point in the history
Closes Issue #13
  • Loading branch information
Ronaldo da Silva Alves Batista committed Nov 16, 2023
1 parent dfbad83 commit b5c1355
Show file tree
Hide file tree
Showing 6 changed files with 399 additions and 313 deletions.
6 changes: 6 additions & 0 deletions extracao/_modidx.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,13 @@
'extracao/datasources/telecom.py')},
'extracao.estacoes': { 'extracao.estacoes.Estacoes': ('estacoes.html#estacoes', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes.__init__': ('estacoes.html#estacoes.__init__', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._cast2cat': ('estacoes.html#estacoes._cast2cat', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._cast2float': ('estacoes.html#estacoes._cast2float', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._cast2int': ('estacoes.html#estacoes._cast2int', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._cast2str': ('estacoes.html#estacoes._cast2str', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._format': ('estacoes.html#estacoes._format', 'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._remove_invalid_frequencies': ( 'estacoes.html#estacoes._remove_invalid_frequencies',
'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._simplify_sources': ( 'estacoes.html#estacoes._simplify_sources',
'extracao/estacoes.py'),
'extracao.estacoes.Estacoes._update_source': ( 'estacoes.html#estacoes._update_source',
Expand Down
12 changes: 7 additions & 5 deletions extracao/datasources/mosaico.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,12 @@ def _extract(self, collection: str, pipeline: list):
database = client[self.database]
collection = database[collection]
dtype = "string[pyarrow]" if self.stem == "srd" else "category"
df = pd.DataFrame(
[c for c in collection.aggregate(pipeline)], copy=False, dtype=dtype
)
df = pd.DataFrame(list(collection.aggregate(pipeline)), copy=False, dtype=dtype)
# Substitui strings vazias e somente com espaços por nulo
return df.replace(r"^\s*$", pd.NA, regex=True)

@staticmethod
def split_designacao(
self,
df: pd.DataFrame, # DataFrame com coluna original DesignacaoEmissao
) -> (
pd.DataFrame
Expand All @@ -69,7 +67,11 @@ def split_designacao(
.str.upper()
.str.split(" ")
)
df = df.explode("Designação_Emissão")
df = df.explode("Designação_Emissão").reset_index(drop=True)
exploded_rows = df["Designação_Emissão"].apply(lambda x: isinstance(x, list))
log = """[("Colunas", "Designação_Emissão"]),
("Processamento", "Registro expandido nos componentes individuais e extraídas Largura e Classe")]"""
df = self.register_log(df, log, exploded_rows)
df = df[df["Designação_Emissão"] != "/"] # Removes empty rows
# Apply the parse_bw function
parsed_data = zip(*df["Designação_Emissão"].apply(Base.parse_bw))
Expand Down
95 changes: 90 additions & 5 deletions extracao/datasources/sitarweb.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/01c_sitarweb.ipynb.

# %% auto 0
__all__ = ['SQLSERVER_PARAMS', 'Sitarweb', 'Radcom', 'Stel']
__all__ = ['SQLSERVER_PARAMS', 'Radcom', 'Stel', 'Sitarweb']

# %% ../../nbs/01c_sitarweb.ipynb 3
import os
Expand All @@ -25,7 +25,92 @@
getcontext().prec = 5
load_dotenv(find_dotenv(), override=True)

# %% ../../nbs/01c_sitarweb.ipynb 6
# %% ../../nbs/01c_sitarweb.ipynb 7
class Radcom(Sitarweb):
def __init__(self, sql_params: dict = SQLSERVER_PARAMS):
super().__init__(sql_params)

@property
def query(self):
return SQL_RADCOM

@property
def stem(self):
return "radcom"

def _format(
self,
df: pd.DataFrame, # DataFrame com o resultantes do banco de dados
) -> pd.DataFrame: # DataFrame formatado
"""Formata, limpa e padroniza os dados provenientes da query no banco"""
df["Entidade"] = df["Entidade"].str.strip()
df["Serviço"] = "231"
df["Classe_Emissão"] = pd.NA
df["Largura_Emissão(kHz)"] = "256"
df["Validade_RF"] = pd.NA
df["Status"] = "RADCOM"
df["Fonte"] = "SRD"
df["Multiplicidade"] = "1"
a = df.Situação.isna()
df.loc[a, "Classe"] = df.loc[a, "Fase"].astype("string")
df.loc[~a, "Classe"] = (
df.loc[~a, "Fase"].astype("string")
+ "-"
+ df.loc[~a, "Situação"].astype("string")
)
df.drop(["Fase", "Situação"], axis=1, inplace=True)
df["Log"] = ""
df["Frequência"] = pd.to_numeric(df["Frequência"], errors="coerce").astype(
"float"
)
discarded = df[df.Frequência.isna()].copy()
if not discarded.empty:
log = """[("Colunas", "Frequência"),
("Processamento", "Valor Nulo")]"""
self.append2discarded(self.register_log(discarded, log))
df.dropna(subset=["Frequência"], inplace=True)
return df.loc[:, self.columns]

# %% ../../nbs/01c_sitarweb.ipynb 8
class Stel(Sitarweb):
def __init__(self, sql_params: dict = SQLSERVER_PARAMS):
super().__init__(sql_params)

@property
def query(self):
return SQL_STEL

@property
def stem(self):
return "stel"

def _format(
self,
df: pd.DataFrame, # DataFrame com o resultantes do banco de dados
) -> pd.DataFrame: # DataFrame formatado
"""Formata, limpa e padroniza os dados provenientes da query no banco"""
df["Status"] = "L"
df["Entidade"] = df.Entidade.str.strip()
df["Fonte"] = "STEL"
df["Largura_Emissão"] = df["Largura_Emissão"].astype("string")
df.loc[:, ["Largura_Emissão(kHz)", "_"]] = (
df.Largura_Emissão.fillna("").apply(self.parse_bw).tolist()
)
df.drop(["Largura_Emissão", "_"], axis=1, inplace=True)
df.loc[:, "Validade_RF"] = df.Validade_RF.astype("string").str.slice(0, 10)
df["Frequência"] = df["Frequência"].astype("float")
df.loc[df.Unidade == "kHz", "Frequência"] = df.loc[
df.Unidade == "kHz", "Frequência"
].apply(lambda x: float(Decimal(x) / Decimal(1000)))
df.loc[df.Unidade == "GHz", "Frequência"] = df.loc[
df.Unidade == "GHz", "Frequência"
].apply(lambda x: float(Decimal(x) * Decimal(1000)))
df.drop("Unidade", axis=1, inplace=True)
df["Multiplicidade"] = 1
df["Log"] = ""
return df.loc[:, self.columns]

# %% ../../nbs/01c_sitarweb.ipynb 10
SQLSERVER_PARAMS = dict(
driver=os.environ.get("SQL_DRIVER"),
server=os.environ.get("SQL_SERVER"),
Expand Down Expand Up @@ -62,7 +147,7 @@ def query(self):
def extraction(self):
return pd.read_sql_query(self.query, self.connect(), dtype="category")

# %% ../../nbs/01c_sitarweb.ipynb 7
# %% ../../nbs/01c_sitarweb.ipynb 11
class Radcom(Sitarweb):
def __init__(self, sql_params: dict = SQLSERVER_PARAMS):
super().__init__(sql_params)
Expand All @@ -81,7 +166,7 @@ def _format(
) -> pd.DataFrame: # DataFrame formatado
"""Formata, limpa e padroniza os dados provenientes da query no banco"""
df["Entidade"] = df["Entidade"].str.strip()
df["Serviço"] = "231"
df["Num_Serviço"] = "231"
df["Classe_Emissão"] = pd.NA
df["Largura_Emissão(kHz)"] = "256"
df["Validade_RF"] = pd.NA
Expand All @@ -108,7 +193,7 @@ def _format(
df.dropna(subset=["Frequência"], inplace=True)
return df.loc[:, self.columns]

# %% ../../nbs/01c_sitarweb.ipynb 8
# %% ../../nbs/01c_sitarweb.ipynb 13
class Stel(Sitarweb):
def __init__(self, sql_params: dict = SQLSERVER_PARAMS):
super().__init__(sql_params)
Expand Down
Loading

0 comments on commit b5c1355

Please sign in to comment.