T1 a T4 implementados, provavelmente
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
# pyright: basic
|
# pyright: basic
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
@@ -13,11 +14,10 @@ MENU ="""[1] Criar a base de dados
|
|||||||
[2] Atualizar uma entrada
|
[2] Atualizar uma entrada
|
||||||
[3] Apagar um evento
|
[3] Apagar um evento
|
||||||
[4] Apagar uma entrada de um evento
|
[4] Apagar uma entrada de um evento
|
||||||
[5] Visualizar uma entrada
|
[5] Visualizar um evento
|
||||||
[6] Guardar como JSON
|
[6] Guardar como JSON
|
||||||
[7] Guardar como CSV
|
[7] Guardar como CSV
|
||||||
[8] Estatísticas
|
[8] Estatísticas
|
||||||
[9] Atualizar uma entrada de um evento
|
|
||||||
|
|
||||||
[Q] Sair
|
[Q] Sair
|
||||||
"""
|
"""
|
||||||
@@ -78,9 +78,22 @@ def main():
|
|||||||
|
|
||||||
case "2":
|
case "2":
|
||||||
if db is not None:
|
if db is not None:
|
||||||
continue
|
crud.read_ids(db)
|
||||||
|
eid_choice = _get_usr_input("Escolhe o ID: ", int)
|
||||||
|
|
||||||
|
if not _event_exists(db, eid_choice):
|
||||||
|
retInfo = "ID do event não encontrado!"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
retInfo = "Base de dados não encontrada!"
|
table = crud.get_table(db, eid_choice)
|
||||||
|
crud.show_table(table)
|
||||||
|
row_choice = _get_usr_input("Escolhe a linha a atualizar: ", int)
|
||||||
|
new_data = {}
|
||||||
|
for col in crud.TABLE_READ_RET:
|
||||||
|
val = _get_usr_input(f"Novo valor para {col} (Enter para manter o valor atual): ")
|
||||||
|
if val is not None:
|
||||||
|
new_data[col] = val
|
||||||
|
crud.update_table_row(db, row_choice, new_data)
|
||||||
|
|
||||||
case "3":
|
case "3":
|
||||||
if db is not None:
|
if db is not None:
|
||||||
@@ -111,13 +124,10 @@ def main():
|
|||||||
table = crud.get_table(db, eid_choice)
|
table = crud.get_table(db, eid_choice)
|
||||||
_prettify_event(table)
|
_prettify_event(table)
|
||||||
crud.show_table(table)
|
crud.show_table(table)
|
||||||
|
|
||||||
row_choice = _get_usr_input("Escolhe a linha a apagar:", int)
|
row_choice = _get_usr_input("Escolhe a linha a apagar:", int)
|
||||||
# TODO: balizar a escolha para apenas as linhas do evento em questao
|
# TODO: balizar a escolha para apenas as linhas do evento em questao
|
||||||
row_choice = _get_usr_input("Escolhe a linha a apagar:", int)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: balizar a escolha para apenas as linhas do evento em questao
|
|
||||||
row_choice = _get_usr_input("Escolhe a linha a apagar: ", int)
|
|
||||||
db = crud.delete_table_row(db, eid_choice, row_choice)
|
db = crud.delete_table_row(db, eid_choice, row_choice)
|
||||||
new_table = crud.get_table(db, eid_choice)
|
new_table = crud.get_table(db, eid_choice)
|
||||||
crud.show_table(new_table)
|
crud.show_table(new_table)
|
||||||
@@ -137,6 +147,7 @@ def main():
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
table = crud.get_table(db, choice)
|
table = crud.get_table(db, choice)
|
||||||
|
_prettify_event(table)
|
||||||
crud.show_table(table)
|
crud.show_table(table)
|
||||||
input()
|
input()
|
||||||
|
|
||||||
@@ -167,25 +178,6 @@ def main():
|
|||||||
else:
|
else:
|
||||||
retInfo = "Base de dados não encontrada!"
|
retInfo = "Base de dados não encontrada!"
|
||||||
|
|
||||||
case "9":
|
|
||||||
if db is not None:
|
|
||||||
crud.read_ids(db)
|
|
||||||
eid_choice = _get_usr_input("Escolhe o ID: ", int)
|
|
||||||
|
|
||||||
if not _event_exists(db, eid_choice):
|
|
||||||
retInfo = "ID do event não encontrado!"
|
|
||||||
|
|
||||||
else:
|
|
||||||
table = crud.get_table(db, eid_choice)
|
|
||||||
crud.show_table(table)
|
|
||||||
row_choice = _get_usr_input("Escolhe a linha a atualizar: ", int)
|
|
||||||
new_data = {}
|
|
||||||
for col in crud.TABLE_READ_RET:
|
|
||||||
val = _get_usr_input(f"Novo valor para {col} (Enter para manter o valor atual): ")
|
|
||||||
if val is not None:
|
|
||||||
new_data[col] = val
|
|
||||||
crud.update_table_row(db, row_choice, new_data)
|
|
||||||
|
|
||||||
case "q":
|
case "q":
|
||||||
isRunning = False
|
isRunning = False
|
||||||
continue
|
continue
|
||||||
@@ -220,11 +212,6 @@ def _prettify_event(df):
|
|||||||
preambleInfo = df.drop_duplicates(subset="ID", keep="first")
|
preambleInfo = df.drop_duplicates(subset="ID", keep="first")
|
||||||
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
|
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
|
||||||
info = df.drop_duplicates(subset="Data", keep="first")
|
info = df.drop_duplicates(subset="Data", keep="first")
|
||||||
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
|
|
||||||
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
|
|
||||||
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info.Lat.values[0]}\nLongitude: {info.Long.values[0]}"
|
|
||||||
+ f"\nProfundidade: {info.Prof.values[0]}\nTipo de evento: {info['Tipo Ev'].values[0]}\n")
|
|
||||||
info = df.drop_duplicates(subset="Data", keep="first")
|
|
||||||
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
|
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
|
||||||
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info.Lat.values[0]}\nLongitude: {info.Long.values[0]}"
|
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info.Lat.values[0]}\nLongitude: {info.Long.values[0]}"
|
||||||
+ f"\nProfundidade: {info.Prof.values[0]}\nTipo de evento: {info['Tipo Ev'].values[0]}\n")
|
+ f"\nProfundidade: {info.Prof.values[0]}\nTipo de evento: {info['Tipo Ev'].values[0]}\n")
|
||||||
|
|||||||
@@ -1,29 +1,37 @@
|
|||||||
# pyright: basic
|
# pyright: basic
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from . import parser
|
|
||||||
|
|
||||||
pd.set_option('display.max_rows', 500)
|
pd.set_option('display.max_rows', 500)
|
||||||
pd.set_option('display.max_columns', 500)
|
pd.set_option('display.max_columns', 500)
|
||||||
pd.set_option('display.width', 150)
|
pd.set_option('display.width', 150)
|
||||||
|
|
||||||
|
# -- globals
|
||||||
|
|
||||||
HEADER_COLS = ["Data", "Distancia", "Tipo Ev", "Lat", "Long", "Prof", "Magnitudes"]
|
HEADER_COLS = ["Data", "Distancia", "Tipo Ev", "Lat", "Long", "Prof", "Magnitudes"]
|
||||||
TABLE_READ_RET = ["Data", "Lat", "Long", "Distancia", "Tipo Ev", "Amplitude"]
|
TABLE_READ_RET = ["Estacao","Componente","", "Amplitude"]
|
||||||
|
|
||||||
|
# -- helper funcs
|
||||||
|
|
||||||
def _get_uniques(df) -> pd.DataFrame:
|
def _get_uniques(df) -> pd.DataFrame:
|
||||||
return df.get(["ID", "Data", "Regiao"]).drop_duplicates(subset="ID", keep="first")
|
return df.get(["ID", "Data", "Regiao"]).drop_duplicates(subset="ID", keep="first")
|
||||||
|
|
||||||
|
|
||||||
def _show_events(df):
|
def _show_events(df):
|
||||||
for (_, row) in df.iterrows():
|
for (_, row) in df.iterrows():
|
||||||
print(f"{row["ID"]}: {row["Regiao"]}")
|
print(f"{row["ID"]}: {row["Regiao"]}")
|
||||||
|
|
||||||
|
# -- main
|
||||||
|
|
||||||
def read_ids(df):
|
def read_ids(df):
|
||||||
ids = _get_uniques(df)
|
ids = _get_uniques(df)
|
||||||
_show_events(ids)
|
_show_events(ids)
|
||||||
|
|
||||||
|
|
||||||
def get_unique_events_table(df):
|
def get_unique_events_table(df):
|
||||||
return df.drop_duplicates(subset="ID", keep="first")
|
return df.drop_duplicates(subset="ID", keep="first")
|
||||||
|
|
||||||
|
|
||||||
def read_header(df, event_id):
|
def read_header(df, event_id):
|
||||||
# Informações do header do evento
|
# Informações do header do evento
|
||||||
row = df[df["ID"] == event_id].iloc[0]
|
row = df[df["ID"] == event_id].iloc[0]
|
||||||
@@ -37,12 +45,13 @@ def read_header(df, event_id):
|
|||||||
infoString = f"Header do evento {event_id}:\n" + "\n".join(info)
|
infoString = f"Header do evento {event_id}:\n" + "\n".join(info)
|
||||||
return infoString
|
return infoString
|
||||||
|
|
||||||
|
|
||||||
def show_table(df, retCols=TABLE_READ_RET):
|
def show_table(df, retCols=TABLE_READ_RET):
|
||||||
print(df.loc[:,retCols])
|
print(df.loc[:,retCols])
|
||||||
|
|
||||||
|
|
||||||
def get_table(df, event_id):
|
def get_table(df, event_id):
|
||||||
rows = df[df["ID"] == event_id]
|
rows = df[df["ID"] == event_id]
|
||||||
rows = rows.drop("ID", axis=1)
|
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
|
||||||
@@ -61,12 +70,14 @@ def read_table_row(df, event_id, row_number_1):
|
|||||||
info.append(f"{i+1} {col}: {row[col]}")
|
info.append(f"{i+1} {col}: {row[col]}")
|
||||||
return f"Linha {row_number_1:02d} do evento {event_id}:\n" + "\n".join(info)
|
return f"Linha {row_number_1:02d} do evento {event_id}:\n" + "\n".join(info)
|
||||||
|
|
||||||
|
|
||||||
def update_table_row(df, row_line, new_data):
|
def update_table_row(df, row_line, new_data):
|
||||||
for key, value in new_data.items():
|
for key, value in new_data.items():
|
||||||
if key in df.columns:
|
if key in df.columns:
|
||||||
df.loc[row_line, key] = value
|
df.loc[row_line, key] = value
|
||||||
return f"Linha {row_line} do evento atualizada com sucesso."
|
return f"Linha {row_line} do evento atualizada com sucesso."
|
||||||
|
|
||||||
|
|
||||||
def update_header(df, event_id, new_data):
|
def update_header(df, event_id, new_data):
|
||||||
# atualiza o header de um evento
|
# atualiza o header de um evento
|
||||||
for key, value in new_data.items():
|
for key, value in new_data.items():
|
||||||
@@ -74,17 +85,20 @@ def update_header(df, event_id, new_data):
|
|||||||
df.loc[(df["ID"] == event_id) | df.iloc[0], key] = value
|
df.loc[(df["ID"] == event_id) | df.iloc[0], key] = value
|
||||||
return f"Header do evento {event_id} atualizado com sucesso."
|
return f"Header do evento {event_id} atualizado com sucesso."
|
||||||
|
|
||||||
|
|
||||||
def delete_event(df, event_id):
|
def delete_event(df, event_id):
|
||||||
# Apaga um evento inteiro (header + tabela)
|
# Apaga um evento inteiro (header + tabela)
|
||||||
new_df = df.drop(df[df["ID"] == event_id].index)
|
new_df = df.drop(df[df["ID"] == event_id].index)
|
||||||
print(f"Evento {event_id} apagado!")
|
print(f"Evento {event_id} apagado!")
|
||||||
return new_df
|
return new_df
|
||||||
|
|
||||||
|
|
||||||
def delete_table_row(df, event_id, row_number):
|
def delete_table_row(df, event_id, row_number):
|
||||||
# Apaga uma linha específica da tabela do evento
|
# Apaga uma linha específica da tabela do evento
|
||||||
new_df = df.drop([row_number]).reset_index(drop=True)
|
new_df = df.drop([row_number]).reset_index(drop=True)
|
||||||
return new_df
|
return new_df
|
||||||
|
|
||||||
|
|
||||||
def create_blank_event(df, event_id):
|
def create_blank_event(df, event_id):
|
||||||
# Criar um evento vazio com linha de header e 1 linha de coluna
|
# Criar um evento vazio com linha de header e 1 linha de coluna
|
||||||
df.loc[df["ID"] >= event_id, "ID"] += 1
|
df.loc[df["ID"] >= event_id, "ID"] += 1
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import os
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
STAT_HEADER ="""=== Earthquakes ===
|
STAT_HEADER ="""=== Terramotos ===
|
||||||
== Estatísticas ==
|
== Estatísticas ==
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -51,12 +51,14 @@ def stat_menu(df: pd.DataFrame):
|
|||||||
|
|
||||||
match usrIn:
|
match usrIn:
|
||||||
case "1":
|
case "1":
|
||||||
# TODO: verificar se estamos a tratar de numeros ou strings
|
|
||||||
c = filter_submenu("Média")
|
c = filter_submenu("Média")
|
||||||
|
|
||||||
if c is not None:
|
if c is not None:
|
||||||
retValue = average(df, c)
|
retValue = average(df, c)
|
||||||
|
if retValue:
|
||||||
print(f"A média de {c} é {retValue}")
|
print(f"A média de {c} é {retValue}")
|
||||||
|
else:
|
||||||
|
print("Um erro aconteceu. Nada a apresentar de momento.")
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -65,17 +67,22 @@ def stat_menu(df: pd.DataFrame):
|
|||||||
|
|
||||||
if c is not None:
|
if c is not None:
|
||||||
retValue = variance(df, c)
|
retValue = variance(df, c)
|
||||||
|
if retValue:
|
||||||
print(f"A variância dos dados de {c} é {retValue}")
|
print(f"A variância dos dados de {c} é {retValue}")
|
||||||
|
else:
|
||||||
|
print("Um erro aconteceu. Nada a apresentar de momento.")
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
case "3":
|
case "3":
|
||||||
# TODO: verificar se estamos a tratar de numeros ou strings
|
|
||||||
c = filter_submenu("Desvio Padrão")
|
c = filter_submenu("Desvio Padrão")
|
||||||
|
|
||||||
if c is not None:
|
if c is not None:
|
||||||
retValue = std_dev(df, c)
|
retValue = std_dev(df, c)
|
||||||
|
if retValue:
|
||||||
print(f"O desvio padrão de {c} é {retValue}")
|
print(f"O desvio padrão de {c} é {retValue}")
|
||||||
|
else:
|
||||||
|
print("Um erro aconteceu. Nada a apresentar de momento.")
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -112,7 +119,7 @@ def stat_menu(df: pd.DataFrame):
|
|||||||
|
|
||||||
case _:
|
case _:
|
||||||
pass
|
pass
|
||||||
input("Clica Enter para continuar")
|
input("Clica `Enter` para continuar")
|
||||||
|
|
||||||
|
|
||||||
def average(df: pd.DataFrame, filter_by):
|
def average(df: pd.DataFrame, filter_by):
|
||||||
@@ -121,8 +128,10 @@ def average(df: pd.DataFrame, filter_by):
|
|||||||
|
|
||||||
if filter_by == "Magnitudes":
|
if filter_by == "Magnitudes":
|
||||||
values = _unpack_mags(values)
|
values = _unpack_mags(values)
|
||||||
|
try:
|
||||||
return np.average(values)
|
return np.average(values)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def variance(df, filter_by):
|
def variance(df, filter_by):
|
||||||
@@ -132,7 +141,10 @@ def variance(df, filter_by):
|
|||||||
if filter_by == "Magnitudes":
|
if filter_by == "Magnitudes":
|
||||||
values = _unpack_mags(values)
|
values = _unpack_mags(values)
|
||||||
|
|
||||||
|
try:
|
||||||
return np.var(values)
|
return np.var(values)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def std_dev(df, filter_by):
|
def std_dev(df, filter_by):
|
||||||
@@ -142,7 +154,10 @@ def std_dev(df, filter_by):
|
|||||||
if filter_by == "Magnitudes":
|
if filter_by == "Magnitudes":
|
||||||
values = _unpack_mags(values)
|
values = _unpack_mags(values)
|
||||||
|
|
||||||
|
try:
|
||||||
return np.std(values)
|
return np.std(values)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def max_v(df, filter_by):
|
def max_v(df, filter_by):
|
||||||
@@ -164,6 +179,7 @@ def min_v(df, filter_by):
|
|||||||
|
|
||||||
return np.min(values)
|
return np.min(values)
|
||||||
|
|
||||||
|
|
||||||
def moda(df, filter_by):
|
def moda(df, filter_by):
|
||||||
events = df.drop_duplicates(subset="ID", keep='first')
|
events = df.drop_duplicates(subset="ID", keep='first')
|
||||||
values = events[filter_by].to_numpy()
|
values = events[filter_by].to_numpy()
|
||||||
|
|||||||
Reference in New Issue
Block a user