import time from datetime import datetime import numpy as np def print_filters(filters): _res = "" for k, v in filters.items(): _res += f"{k}: {v}\n" def pprint(v): return f"\tMédia: {v[0]} \u00b1 {v[1]}; 1o Quartil: {v[3]}; Mediana: {v[2]}; 3o Quartil: {v[4]}; Máximo: {v[5]}; Mínimo: {v[6]}" def stats(data): _stats = f"===Estatística==\nNúmero total de eventos: {len(data)}\n" aux = [] currMonth: datetime = data[0]["DateTime"] idx = 0 while idx < len(data): if data[idx]["DateTime"].month == currMonth.month: aux.append(data[idx]) idx += 1 else: m = calc_mag(aux) d = calc_depth(aux) aux = [] _stats += f"{currMonth.strftime('%Y-%m')}:\n\tMagnitude: {pprint(m)}\n\tProfundidade: {pprint(d)}\n\n" currMonth = data[idx]["DateTime"] m = calc_mag(aux) d = calc_depth(aux) _stats += f"{currMonth.strftime('%Y-%m')}:\nMagnitude: {pprint(m)}\nProfundidade: {pprint(d)}\n" fname = f"stats-{time.time_ns()}.txt" with open(fname, "wb") as fp: fp.write(_stats.encode("utf-8")) # print(_stats) def calc_depth(data): if len(data) == 0: return 0 depths = np.array([v["Depth"] for v in data], dtype=float) quantile = np.quantile(depths, [0.25, 0.75]) return list( map( float, ( round(np.average(depths), 3), round(np.std(depths), 3), round(np.median(depths), 3), round(quantile[0], 3), round(quantile[1], 3), np.min(depths), np.max(depths), ), ) ) def calc_mag(data): if len(data) == 0: return 0 mags = np.array([v["Magnitudes"]["L"]["Magnitude"] for v in data], dtype=float) quantile = np.quantile(mags, [0.25, 0.75]) return list( map( float, ( round(np.average(mags), 3), round(np.std(mags), 3), round(np.median(mags), 3), round(quantile[0], 3), round(quantile[1], 3), np.min(mags), np.max(mags), ), ) )