1
1
import logging
2
2
from dataclasses import dataclass
3
- from typing import List
4
3
5
4
from pandas import DataFrame
6
5
9
8
TRAVELTIME_API ,
10
9
get_capitalized_provider_name ,
11
10
)
11
+ from traveltime_google_comparison .config import Providers
12
12
13
13
14
14
def absolute_error (api_provider : str ) -> str :
@@ -26,31 +26,31 @@ class QuantileErrorResult:
26
26
27
27
28
28
def log_results (
29
- results_with_differences : DataFrame , quantile : float , api_providers : List [ str ]
29
+ results_with_differences : DataFrame , quantile : float , api_providers : Providers
30
30
):
31
- for provider in api_providers :
32
- capitalized_provider = get_capitalized_provider_name (provider )
31
+ for provider in api_providers .competitors :
32
+ name = provider .name
33
+ capitalized_provider = get_capitalized_provider_name (name )
33
34
logging .info (
34
35
f"Mean relative error compared to { capitalized_provider } "
35
- f"API: { results_with_differences [relative_error (provider )].mean ():.2f} %"
36
- )
37
- quantile_errors = calculate_quantiles (
38
- results_with_differences , quantile , provider
36
+ f"API: { results_with_differences [relative_error (name )].mean ():.2f} %"
39
37
)
38
+ quantile_errors = calculate_quantiles (results_with_differences , quantile , name )
40
39
logging .info (
41
40
f"{ int (quantile * 100 )} % of TravelTime results differ from { capitalized_provider } API "
42
41
f"by less than { int (quantile_errors .relative_error )} %"
43
42
)
44
43
45
44
46
45
def format_results_for_csv (
47
- results_with_differences : DataFrame , api_providers : List [ str ]
46
+ results_with_differences : DataFrame , api_providers : Providers
48
47
) -> DataFrame :
49
48
formatted_results = results_with_differences .copy ()
50
49
51
- for provider in api_providers :
52
- formatted_results = formatted_results .drop (columns = [absolute_error (provider )])
53
- relative_error_col = relative_error (provider )
50
+ for provider in api_providers .competitors :
51
+ name = provider .name
52
+ formatted_results = formatted_results .drop (columns = [absolute_error (name )])
53
+ relative_error_col = relative_error (name )
54
54
formatted_results [relative_error_col ] = formatted_results [
55
55
relative_error_col
56
56
].astype (int )
@@ -59,7 +59,7 @@ def format_results_for_csv(
59
59
60
60
61
61
def run_analysis (
62
- results : DataFrame , output_file : str , quantile : float , api_providers : List [ str ]
62
+ results : DataFrame , output_file : str , quantile : float , api_providers : Providers
63
63
):
64
64
results_with_differences = calculate_differences (results , api_providers )
65
65
log_results (results_with_differences , quantile , api_providers )
@@ -71,21 +71,22 @@ def run_analysis(
71
71
formatted_results .to_csv (output_file , index = False )
72
72
73
73
74
- def calculate_differences (results : DataFrame , api_providers : List [ str ] ) -> DataFrame :
74
+ def calculate_differences (results : DataFrame , api_providers : Providers ) -> DataFrame :
75
75
results_with_differences = results .copy ()
76
76
77
- for provider in api_providers :
78
- absolute_error_col = absolute_error (provider )
79
- relative_error_col = relative_error (provider )
77
+ for provider in api_providers .competitors :
78
+ name = provider .name
79
+ absolute_error_col = absolute_error (name )
80
+ relative_error_col = relative_error (name )
80
81
81
82
results_with_differences [absolute_error_col ] = abs (
82
- results [Fields .TRAVEL_TIME [provider ]]
83
+ results [Fields .TRAVEL_TIME [name ]]
83
84
- results [Fields .TRAVEL_TIME [TRAVELTIME_API ]]
84
85
)
85
86
86
87
results_with_differences [relative_error_col ] = (
87
88
results_with_differences [absolute_error_col ]
88
- / results_with_differences [Fields .TRAVEL_TIME [provider ]]
89
+ / results_with_differences [Fields .TRAVEL_TIME [name ]]
89
90
* 100
90
91
)
91
92
@@ -95,13 +96,13 @@ def calculate_differences(results: DataFrame, api_providers: List[str]) -> DataF
95
96
def calculate_quantiles (
96
97
results_with_differences : DataFrame ,
97
98
quantile : float ,
98
- api_provider : str ,
99
+ api_provider_name : str ,
99
100
) -> QuantileErrorResult :
100
101
quantile_absolute_error = results_with_differences [
101
- absolute_error (api_provider )
102
+ absolute_error (api_provider_name )
102
103
].quantile (quantile , "higher" )
103
104
quantile_relative_error = results_with_differences [
104
- relative_error (api_provider )
105
+ relative_error (api_provider_name )
105
106
].quantile (quantile , "higher" )
106
107
return QuantileErrorResult (
107
108
int (quantile_absolute_error ), int (quantile_relative_error )
0 commit comments