forked from punitarani/fli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresult_processing.py
More file actions
143 lines (112 loc) · 4.28 KB
/
Copy pathresult_processing.py
File metadata and controls
143 lines (112 loc) · 4.28 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python3
"""Custom result processing and analysis example.
This example demonstrates how to process flight search results
and convert them to different formats for analysis.
"""
from datetime import datetime, timedelta
from fli.models import (
Airport,
FlightResult,
FlightSearchFilters,
FlightSegment,
PassengerInfo,
)
from fli.search import SearchFlights
# Note: Install pandas with: pip install pandas
try:
import pandas as pd
PANDAS_AVAILABLE = True
except ImportError:
PANDAS_AVAILABLE = False
print("Warning: pandas not installed. Install with: pip install pandas")
def analyze_results(results: list[FlightResult]) -> dict:
"""Convert results to dictionary format for analysis."""
flights_data = []
for flight in results:
for leg in flight.legs:
flights_data.append(
{
"price": flight.price,
"total_duration": flight.duration,
"stops": flight.stops,
"airline": leg.airline.value,
"flight_number": leg.flight_number,
"departure_airport": leg.departure_airport.value,
"arrival_airport": leg.arrival_airport.value,
"departure_time": leg.departure_datetime,
"arrival_time": leg.arrival_datetime,
"leg_duration": leg.duration,
}
)
return flights_data
def analyze_results_pandas(results: list[FlightResult]):
"""Convert results to pandas DataFrame for advanced analysis."""
if not PANDAS_AVAILABLE:
print("Pandas not available. Install with: pip install pandas")
return None
flights_data = analyze_results(results)
df = pd.DataFrame(flights_data)
print("=== Flight Analysis with Pandas ===")
print(f"Total flights analyzed: {len(df)}")
print("\nPrice statistics:")
print(df["price"].describe())
print("\nAirlines distribution:")
print(df["airline"].value_counts())
print("\nAverage duration by airline:")
print(df.groupby("airline")["total_duration"].mean().sort_values())
return df
def analyze_results_basic(results: list[FlightResult]):
"""Basic analysis without external dependencies."""
print("=== Basic Flight Analysis ===")
print(f"Total flights: {len(results)}")
# Price analysis
prices = [flight.price for flight in results]
if prices:
print(f"Price range: ${min(prices):.2f} - ${max(prices):.2f}")
print(f"Average price: ${sum(prices) / len(prices):.2f}")
# Airline analysis
airlines = {}
for flight in results:
for leg in flight.legs:
airline = leg.airline.value
airlines[airline] = airlines.get(airline, 0) + 1
print("\nAirlines found:")
for airline, count in sorted(airlines.items(), key=lambda x: x[1], reverse=True):
print(f" {airline}: {count} flights")
# Duration analysis
durations = [flight.duration for flight in results]
if durations:
print(f"\nDuration range: {min(durations)} - {max(durations)} minutes")
print(f"Average duration: {sum(durations) / len(durations):.1f} minutes")
def main():
"""Demonstrate result processing capabilities."""
# Create search filters
filters = FlightSearchFilters(
passenger_info=PassengerInfo(adults=1),
flight_segments=[
FlightSegment(
departure_airport=[[Airport.JFK, 0]],
arrival_airport=[[Airport.LAX, 0]],
travel_date=(datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d"),
)
],
)
# Search for flights
search = SearchFlights()
results = search.search(filters)
if not results:
print("No flights found for analysis")
return
# Basic analysis
analyze_results_basic(results)
# Advanced analysis with pandas (if available)
if PANDAS_AVAILABLE:
print("\n" + "=" * 50)
df = analyze_results_pandas(results)
# Save to CSV for further analysis
if df is not None:
filename = f"flight_analysis_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
df.to_csv(filename, index=False)
print(f"\nData saved to {filename}")
if __name__ == "__main__":
main()