| """ |
| Weather Data Analyzer - Main Program |
| """ |
|
|
| from data_generator import DataGenerator |
| from analyzer import WeatherAnalyzer |
| from globals import APPLICATION_NAME, APPLICATION_VERSION |
|
|
| def print_separator(char='=', length=70): |
| """ |
| Print separator line |
| """ |
| print(char * length) |
|
|
| def display_statistics(analyzer): |
| """ |
| Display statistical analysis |
| """ |
| print_separator() |
| print("Temperature Statistics") |
| print_separator() |
| |
| temp_stats = analyzer.get_temperature_stats() |
| if temp_stats: |
| print(f"Count: {temp_stats['count']} readings") |
| print(f"Mean: {temp_stats['mean']} C") |
| print(f"Median: {temp_stats['median']} C") |
| print(f"Min: {temp_stats['min']} C") |
| print(f"Max: {temp_stats['max']} C") |
| if 'stdev' in temp_stats: |
| print(f"Standard Deviation: {temp_stats['stdev']} C") |
| |
| print("") |
| print_separator() |
| print("Humidity Statistics") |
| print_separator() |
| |
| humidity_stats = analyzer.get_humidity_stats() |
| if humidity_stats: |
| print(f"Mean: {humidity_stats['mean']}%") |
| print(f"Median: {humidity_stats['median']}%") |
| print(f"Min: {humidity_stats['min']}%") |
| print(f"Max: {humidity_stats['max']}%") |
| |
| print("") |
|
|
| def display_distribution(analyzer): |
| """ |
| Display weather distribution |
| """ |
| print_separator() |
| print("Temperature Distribution") |
| print_separator() |
| |
| distribution = analyzer.get_weather_distribution() |
| total = sum(distribution.values()) |
| |
| for category, count in distribution.items(): |
| percentage = (count / total * 100) if total > 0 else 0 |
| print(f"{category}: {count} readings ({percentage:.1f}%)") |
| |
| print("") |
|
|
| def display_location_averages(analyzer): |
| """ |
| Display average temperatures by location |
| """ |
| print_separator() |
| print("Average Temperature by Location") |
| print_separator() |
| |
| averages = analyzer.get_average_by_location() |
| |
| for location, avg_temp in sorted(averages.items(), key=lambda x: x[1], reverse=True): |
| print(f"{location}: {avg_temp} C") |
| |
| print("") |
|
|
| def display_extreme_weather(analyzer): |
| """ |
| Display extreme weather events |
| """ |
| print_separator() |
| print("Extreme Weather Events") |
| print_separator() |
| |
| extreme_days = analyzer.find_extreme_days() |
| |
| if not extreme_days: |
| print("No extreme weather detected") |
| else: |
| print(f"Found {len(extreme_days)} extreme weather events:") |
| for weather in extreme_days[:5]: |
| print(f" {weather.timestamp.strftime('%Y-%m-%d %H:%M')} - {weather.location}") |
| print(f" Temperature: {weather.temperature} C") |
| if weather.wind_speed and weather.wind_speed > 80: |
| print(f" Wind: {weather.wind_speed} km/h") |
| if weather.precipitation and weather.precipitation > 50: |
| print(f" Precipitation: {weather.precipitation} mm") |
| |
| print("") |
|
|
| def main(): |
| """ |
| Main program execution |
| """ |
| print_separator() |
| print(f"{APPLICATION_NAME} v{APPLICATION_VERSION}") |
| print_separator() |
| print("") |
| |
| |
| print("Generating sample weather data...") |
| generator = DataGenerator() |
| dataset = generator.generate_dataset(days=14, readings_per_day=4) |
| print(f"Generated {len(dataset)} weather readings") |
| print("") |
| |
| |
| analyzer = WeatherAnalyzer() |
| for data in dataset: |
| analyzer.add_data(data) |
| |
| |
| display_statistics(analyzer) |
| display_distribution(analyzer) |
| display_location_averages(analyzer) |
| display_extreme_weather(analyzer) |
| |
| |
| print_separator() |
| print("Temperature Trend Analysis") |
| print_separator() |
| trend = analyzer.detect_trend() |
| print(f"Overall trend: {trend}") |
| print("") |
| |
| |
| print_separator() |
| print("Sample Weather Readings") |
| print_separator() |
| for i, weather in enumerate(dataset[:5], 1): |
| print(f"{i}. {weather.location} - {weather.timestamp.strftime('%Y-%m-%d %H:%M')}") |
| print(f" Temperature: {weather.temperature} C") |
| print(f" Humidity: {weather.humidity}%") |
| print(f" Conditions: {weather.conditions}") |
| print("") |
|
|
| if __name__ == "__main__": |
| main() |
|
|