Skip to content

Commit

Permalink
Merge pull request #9 from RJ-SMTR/tooltip-identifica-servico
Browse files Browse the repository at this point in the history
acrescenta quantidade de veiculos com problema de acordo com servico …
  • Loading branch information
borisaraujo authored Feb 16, 2024
2 parents e677323 + 26eac12 commit 7e9e7d1
Showing 1 changed file with 86 additions and 23 deletions.
109 changes: 86 additions & 23 deletions src/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

import os
import geopandas as gpd
import pandas as pd
import traceback
import folium
import branca.colormap as cm
import folium
import folium.plugins as plugins
import geopandas as gpd
import pytz


Expand Down Expand Up @@ -84,7 +84,7 @@ def create_map(data=None):
"horario_leitura_estacao",
"acumulado_chuva_15_min",
"acumulado_chuva_1_h",
"servico",
"servicos",
"indicador_veiculo_parado_10_min",
"indicador_veiculo_parado_30_min",
"indicador_veiculo_parado_1_hora",
Expand Down Expand Up @@ -457,28 +457,90 @@ def main():
print(f"df columns are:\n{df.columns}")

# Calcula os indicadores de cada tile
df_tile_indicators = (
df
.loc[df.groupby(["tile_id", "servico", "id_veiculo"]).timestamp_gps.idxmax()]
.groupby(["tile_id", "tile", "horario_leitura_estacao"]).agg(
{
"acumulado_chuva_15_min": "max",
"acumulado_chuva_1_h": "max",
"acumulado_chuva_4_h": "max",
"id_veiculo": "count",
"servico": lambda x: ", ".join(list(set(x))),
"indicador_veiculo_parado_10_min": "sum",
"indicador_veiculo_fora_rota_10_min": "sum",
"indicador_veiculo_parado_30_min": "sum",
"indicador_veiculo_fora_rota_30_min": "sum",
"indicador_veiculo_parado_1_hora": "sum",
"indicador_veiculo_fora_rota_1_hora": "sum",
}
).reset_index()
)
df_tile_indicators = df.loc[df.groupby(["tile_id", "servico", "id_veiculo"]).timestamp_gps.idxmax()].reset_index()
df_tile_indicators = df_tile_indicators.loc[df_tile_indicators.groupby(["tile_id", "servico", "id_veiculo"]).horario_leitura_estacao.idxmax()].reset_index()
df_tile_indicators = df_tile_indicators.groupby(["tile_id", "tile", "servico"]).agg(
{
"horario_leitura_estacao": "max",
"acumulado_chuva_15_min": "max",
"acumulado_chuva_1_h": "max",
"acumulado_chuva_4_h": "max",
"indicador_veiculo_parado_10_min": "sum",
"indicador_veiculo_fora_rota_10_min": "sum",
"indicador_veiculo_parado_30_min": "sum",
"indicador_veiculo_fora_rota_30_min": "sum",
"indicador_veiculo_parado_1_hora": "sum",
"indicador_veiculo_fora_rota_1_hora": "sum",
}
).reset_index()

df_tile_indicators['total_veiculo_problema'] = (
df_tile_indicators.indicador_veiculo_parado_10_min +
df_tile_indicators.indicador_veiculo_parado_30_min +
df_tile_indicators.indicador_veiculo_parado_1_hora +
df_tile_indicators.indicador_veiculo_fora_rota_10_min +
df_tile_indicators.indicador_veiculo_fora_rota_30_min +
df_tile_indicators.indicador_veiculo_fora_rota_1_hora)

servicos_dict = {}

for i, row in df_tile_indicators.iterrows():
if row['tile_id'] not in servicos_dict:
servicos_dict[row['tile_id']] = []
servicos_dict[row['tile_id']].append((row['servico'], row['total_veiculo_problema']))

for tile_id in servicos_dict:
lista = servicos_dict[tile_id]
lista.sort(key=lambda x : x[1], reverse=True)
s = ''
for servico, total in lista:
s += f'{servico}: {total}, '
servicos_dict[tile_id] = s


servicos_df = pd.DataFrame(servicos_dict.items(), columns=['tile_id', 'servicos'])
df_tile_indicators = df_tile_indicators.merge(servicos_df, how='inner', on='tile_id')
# display(servicos_df)
df_tile_indicators = df_tile_indicators.groupby(["tile_id", "tile"]).agg(
{
"servicos": "max",
"horario_leitura_estacao": "max",
"acumulado_chuva_15_min": "max",
"acumulado_chuva_1_h": "max",
"acumulado_chuva_4_h": "max",
"indicador_veiculo_parado_10_min": "sum",
"indicador_veiculo_fora_rota_10_min": "sum",
"indicador_veiculo_parado_30_min": "sum",
"indicador_veiculo_fora_rota_30_min": "sum",
"indicador_veiculo_parado_1_hora": "sum",
"indicador_veiculo_fora_rota_1_hora": "sum",
}
).reset_index()



# df_tile_indicators = (
# df
# .loc[df.groupby(["tile_id", "servico", "id_veiculo"]).timestamp_gps.idxmax()]
# .groupby(["tile_id", "tile", "horario_leitura_estacao"]).agg(
# {
# "acumulado_chuva_15_min": "max",
# "acumulado_chuva_1_h": "max",
# "acumulado_chuva_4_h": "max",
# "id_veiculo": "count",
# "servico": lambda x: ", ".join(list(set(x))),
# "indicador_veiculo_parado_10_min": "sum",
# "indicador_veiculo_fora_rota_10_min": "sum",
# "indicador_veiculo_parado_30_min": "sum",
# "indicador_veiculo_fora_rota_30_min": "sum",
# "indicador_veiculo_parado_1_hora": "sum",
# "indicador_veiculo_fora_rota_1_hora": "sum",
# }
# ).reset_index()
# )

# Filtra a última medida da estacao
df_tile_indicators = df_tile_indicators.loc[df_tile_indicators.groupby(["tile_id"]).horario_leitura_estacao.idxmax()]
# df_tile_indicators = df_tile_indicators.loc[df_tile_indicators.groupby(["tile_id"]).horario_leitura_estacao.idxmax()]
# df_tile_indicators["horario_leitura_estacao"] = df_tile_indicators.horario_leitura_estacao.astype(str)
df_tile_indicators["horario_leitura_estacao"] = df_tile_indicators.horario_leitura_estacao.dt.total_seconds().apply(lambda s: f'{s // 3600:02.0f}:{(s % 3600) // 60:02.0f}')
df_tile_indicators['geometry'] = df_tile_indicators['tile'].dropna().astype(str).apply(loads)
Expand Down Expand Up @@ -512,4 +574,5 @@ def main():
redis.set('last_crash', last_crash)

if __name__ == '__main__':
main()
main()
cache_mapa()

0 comments on commit 7e9e7d1

Please sign in to comment.