File size: 4,695 Bytes
bc9904d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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