daisy-rrhh-backend / src /tools /api_local /stats_service.py
Freight's picture
pr/42 (#1)
bc9904d verified
Raw
History Blame Contribute Delete
4.7 kB
import pandas as pd
def city2city_info(route_c2c, distance, df_segments):
query_data = df_segments[df_segments['c2c_route'] == route_c2c]
count_segments = query_data.shape[0] # Número de segmentos
# Calcular el precio por milla
price_mille = query_data['adjust_price_usd'] / query_data['distance']
price_mille_median = price_mille.median()
price_mille_median = round(price_mille_median, 2)
# Calcular precio promedio
mean_price = price_mille_median * distance
mean_price = round(mean_price, 2)
# Calcular rango intercuartílico (IQR)
q1 = price_mille.quantile(0.25) # Percentil 25
q3 = price_mille.quantile(0.75) # Percentil 75
iqr = q3 - q1
# Ajustar rango de precios mínimo y máximo usando IQR
price_mille_ajusted_min = q1 # Precio mínimo ajustado
range_min = distance * price_mille_ajusted_min
range_min = round(range_min, 2)
price_mille_ajusted_max = q3 # Precio máximo ajustado
range_max = distance * price_mille_ajusted_max
range_max = round(range_max, 2)
# Ordenar los últimos segmentos por fecha y seleccionar las columnas relevantes
last_segments = query_data.copy()
last_segments = last_segments.sort_values(by='inserted_at', ascending=False)
last_segments['distance'] = last_segments['distance']
last_segments['price_mille'] = last_segments['adjust_price_usd'] / last_segments['distance']
last_ten_segments = last_segments.head(10)
# Calcular métricas finales para los últimos segmentos
price_mille_ten = last_ten_segments['adjust_price_usd'].median() / distance
price_mille_ten = round(price_mille_ten,2)
last_trip = str(last_segments['inserted_at'].iloc[0])[0:10]
last_price = last_ten_segments['adjust_price_usd'].iloc[0]
mean_price_ten = last_ten_segments['adjust_price_usd'].median()
#diccionario de metricas
stats = {"mean_price": float(mean_price),
"range_min": float(range_min),
"range_max": float(range_max),
"count_segments": int(count_segments),
"price_mille_median": float(price_mille_median),
"last_trip": str(last_trip),
"last_price": float(last_price),
"mean_price_ten": float(mean_price_ten),
"price_mille_ten": float(price_mille_ten)}
# Retornar métricas calculadas
return stats
def state2state_info(route_s2s, distance, df_segments):
query_data = df_segments[df_segments['s2s_route'] == route_s2s]
count_segments = query_data.shape[0] # Número de segmentos
# Calcular el precio por milla
price_mille = query_data['adjust_price_usd'] / query_data['distance']
price_mille_median = price_mille.median()
price_mille_median = round(price_mille_median, 2)
# Calcular precio promedio
mean_price = price_mille_median * distance
mean_price = round(mean_price, 2)
# Calcular rango intercuartílico (IQR)
q1 = price_mille.quantile(0.25) # Percentil 25
q3 = price_mille.quantile(0.75) # Percentil 75
iqr = q3 - q1
# Ajustar rango de precios mínimo y máximo usando IQR
price_mille_ajusted_min = q1 # Precio mínimo ajustado
range_min = distance * price_mille_ajusted_min
range_min = round(range_min, 2)
price_mille_ajusted_max = q3 # Precio máximo ajustado
range_max = distance * price_mille_ajusted_max
range_max = round(range_max, 2)
# Ordenar los últimos segmentos por fecha y seleccionar las columnas relevantes
last_segments = query_data.copy()
last_segments = last_segments.sort_values(by='inserted_at', ascending=False)
last_segments['distance'] = last_segments['distance']
last_segments['price_mille'] = last_segments['adjust_price_usd'] / last_segments['distance']
last_ten_segments = last_segments.head(10)
# Calcular métricas finales para los últimos segmentos
price_mille_ten = last_ten_segments['adjust_price_usd'].median() / distance
price_mille_ten = round(price_mille_ten,2)
last_trip = str(last_segments['inserted_at'].iloc[0])[0:10]
last_price = last_ten_segments['adjust_price_usd'].iloc[0]
mean_price_ten = last_ten_segments['adjust_price_usd'].median()
stats = {"mean_price": float(mean_price),
"range_min": float(range_min),
"range_max": float(range_max),
"count_segments": int(count_segments),
"price_mille_median": float(price_mille_median),
"last_trip": str(last_trip),
"last_price": float(last_price),
"mean_price_ten": float(mean_price_ten),
"price_mille_ten": float(price_mille_ten)}
return stats