Hinweis: Obwohl JavaScript für diese Website nicht unbedingt erforderlich ist, werden Ihre Interaktionsmöglichkeiten mit den Inhalten eingeschränkt sein. Bitte aktivieren Sie JavaScript für das volle Erlebnis.

Python zur Unterstützung von Meteorologen

Einleitung

ForecastWatch.com, ein Dienst von Intellovations, beschäftigt sich mit der Bewertung der Genauigkeit von Wettervorhersagen von Unternehmen wie Accuweather, MyForecast.com und The Weather Channel. Jeden Tag werden über 36.000 Wettervorhersagen für über 800 US-Städte gesammelt und später mit tatsächlichen klimatologischen Daten verglichen. Diese Vergleiche werden von Meteorologen verwendet, um ihre Wettervorhersagen zu verbessern und sie mit anderen zu vergleichen. Sie werden auch von Verbrauchern genutzt, um die wahrscheinliche Genauigkeit einer Vorhersage besser zu verstehen.

Die Architektur

ForecastWatch.com basiert auf vier Hauptkomponenten: einem Eingabeprozess zur Beschaffung von Vorhersagen, einem Eingabeprozess zur Beschaffung gemessener klimatologischer Daten, der Datenaggregationsmaschine und dem Webanwendungsframework.

Es gibt zwei Haupt-Eingabeprozesse im System: Der Vorhersage-Parser und der Ist-Daten-Parser. Der Vorhersage-Parser ist dafür verantwortlich, Vorhersagen aus dem Web für jeden der von ForecastWatch.com verfolgten Anbieter abzurufen. Er parst die Vorhersage von der Seite und fügt die Vorhersagedaten in eine Datenbank ein, bis sie mit den Ist-Daten verglichen werden können. Der Ist-Daten-Parser holt Ist-Daten vom National Climatic Data Center des National Weather Service, das Höchsttemperaturen, Tiefsttemperaturen, Niederschläge und signifikante Wetterereignisse für über 800 US-Städte liefert und die Daten in die Datenbank einfügt. Dieser Prozess bewertet auch die Vorhersagen anhand der tatsächlichen Wetterdaten und speichert diese Informationen in der Datenbank.

Sobald die Daten gesammelt und bewertet wurden, werden sie von der Aggregationsmaschine verarbeitet, die die Ergebnisse in jährliche und monatliche Blöcke zusammenfasst, unterteilt nach Anbieter, Ort und der Anzahl der Tage im Voraus, für die die Vorhersagen getroffen wurden. Im ersten Jahr, 2003, sammelte das System nur Vorhersagen für 20 US-Städte, oder etwa 250.000 einzelne Vorhersagen, so dass die meisten Datenausgaben auf den rohen Bewertungsdaten basierten. Die Aggregationsmaschine wurde hinzugefügt, als das System auf 800 Städte skaliert wurde, was den Datenstrom um fast 4000% erhöhte. In der ersten Hälfte des Jahres 2004 hat das System bereits über 4 Millionen Vorhersagen bewertet, die alle gesammelt, geparst und im Web angezeigt wurden.

Screenshot of ForecastWatch.com

ForecastWatch.com kann verwendet werden, um die Genauigkeit von Wettervorhersagen zu bestimmen, z. B. durch die Überprüfung von Karten mit Fehlern bei der Vorhersage von Tiefst- und Höchsttemperaturen Zoomen Sie hinein

Die letzte Komponente der Architektur von ForecastWatch.com ist die Website selbst. Dies ist die Schnittstelle, über die Kunden die gesammelten und aggregierten Informationen zur Genauigkeit von Vorhersagen abrufen.

Implementiert mit Python

ForecastWatch.com ist eine 100%ige reine Python-Lösung. Python wird in allen Komponenten eingesetzt, vom Back-End bis zum Front-End, einschließlich der leistungsintensiveren Teile des Systems.

Python wurde ursprünglich gewählt, da es viele Standardbibliotheken zur Sammlung, zum Parsen und zur Speicherung von Daten aus dem Web mitbringt. Besonders nützlich in dieser Anwendung waren die Bibliothek für reguläre Ausdrücke, die Thread-Bibliothek, die Objektserialisierungsbibliothek und die Gzip-Datenkompressionsbibliothek. Andere Bibliotheken, wie ein HTTP-Client, der Cookies akzeptieren kann (ClientCookie), und ein HTML-Tabellen-Parser (ClientTable) waren als Drittanbieter-Module verfügbar. Diese erwiesen sich als unschätzbar wertvoll und waren einfach zu bedienen.

Die Threading-Bibliothek erwies sich als sehr wichtig für die Skalierung der Abdeckung von ForecastWatch.com auf über 800 Städte. Das Abrufen von Webseiten ist ein sehr I/O-gebundener Prozess, und das Anfordern einer Seite nach der anderen für etwa 5000 Webseiten pro Tag wäre zeitaufwändig gewesen. Mit Pythons Threading-Bibliothek ruft die Schleife zum Abrufen von Webseiten einfach thread.start_new() für jede Anfrage auf und übergibt die notwendige Klasseninstanzmethode, die die Webseite abruft und verarbeitet, zusammen mit den notwendigen Parametern, um die Stadt für die gewünschte Vorhersage zu beschreiben. Die Anfrageklassen verwenden eine eingebaute Python-Instanz der Klasse Event, um mit dem Hauptsteuerungs-Thread zu kommunizieren, wenn die Verarbeitung abgeschlossen ist. Python hat diese Anwendung des Threadings unglaublich einfach gemacht.

Python wird auch in der Aggregationsmaschine verwendet, die als separater Prozess läuft, um die Genauigkeit von Vorhersagen in monatliche und jährliche Abschnitte zu kombinieren. Der Aggregationsprozess verwendet Abfragen über MySQLdb an die MySQL-Datenbank, in die die Eingabemodule die gesammelten Vorhersage- und klimatologischen Daten platziert haben. Farbige Karten, die die Vorhersagegenauigkeit nach geografischen Gebieten zeigen, werden dann für die Verwendung auf der Website und in gedruckten Berichten generiert.

Example Forecast Accuracy Map

Diese Karte zur Vorhersagegenauigkeit verwendet die Intensität von Blau und Rot, um den Grad des Fehlers bei der Vorhersage von Temperaturen nach geografischem Gebiet anzuzeigen.

Die Weboberfläche von ForecastWatch.com wurde ursprünglich in PHP geschrieben, wurde aber später zu Python geändert, um das Toolset zu vereinfachen und die Integration mit den anderen Komponenten des Systems zu verbessern. Quixote, ein Python-Webanwendungsframework, wurde als Grundlage für das vollständig Python-basierte Web-Front-End ausgewählt. Die Quixote-basierte Webanwendung läuft unter Linux mit Apache und mod_scgi und konnte Seiten genauso schnell ausliefern wie die PHP-basierte Implementierung. Python erleichterte Änderungen und das Hinzufügen von Funktionen im Vergleich zur PHP-Implementierung. Quixote ermöglichte auch die flexiblere Gestaltung von URLs und ersetzte PHP-URLs wie diese

http://www.forecastwatch.com/drilldown.php?s=2&m=2&d=1&p=1&st=33

Mit leichter zu verwaltenden URLs wie dieser

http://www.forecastwatch.com/drilldown/awx/2004/02/1/AL

Das ist für den Kunden viel angenehmer zu bookmarken oder mit Kunden oder potenziellen Kunden zu teilen. Schließlich war Quixote einfach zu bedienen und integrierte sich gut mit Apache. Zum Beispiel ist eine Weiterleitung in Quixote einfach

request.redirect(path-or-URL)

Python machte es möglich

Python spielte eine bedeutende Rolle für den Erfolg von ForecastWatch.com. Das Produkt enthält derzeit über 5.000 Zeilen Python-Code, von denen die meisten für die Implementierung der High-Level-Funktionalität der Anwendung zuständig sind, während die meisten Details von Pythons leistungsfähigen Standardbibliotheken und den oben genannten Drittanbieter-Modulen übernommen werden. Viele weitere Codezeilen wären in Sprachen wie Java oder PHP erforderlich gewesen. Die Integrationsfähigkeiten dieser Sprachen sind nicht so stark, und ihre Threading-Unterstützung ist schwieriger zu verwenden.

Python ist beeindruckend als objektorientierte Rapid Application Development-Sprache. Eine der Kernstärken von Python liegt in seiner Fähigkeit, schnell Ergebnisse zu liefern, ohne die Wartbarkeit des resultierenden Codes zu beeinträchtigen. Bei ForecastWatch.com wurde Python auch zum Prototyping verwendet, und diese Prototypen konnten sauber in den Produktionscode übergehen, ohne dass eine vollständige Neufassung oder ein Wechsel des Toolsets erforderlich war. Dies sparte erheblichen Aufwand und machte den Entwicklungsprozess flexibler und effektiver.

Aufgrund des sauberen Designs der Sprache war das Refactoring des Python-Codes auch einfacher als in anderen Sprachen; das Verschieben von Code erfordert einfach weniger Aufwand.

Die interpretierte Natur von Python war ebenfalls ein Vorteil: Code-Ideen können einfach in der interaktiven Python-Shell getestet werden, und das Fehlen eines Kompilierungsschritts verkürzt den Editier-/Testzyklus.

All diese Faktoren zusammen machen Python zu einer hervorragenden Alternative zu C++ und Java als Allzweck-Programmiersprache. ForecastWatch.com wurde durch die Einfachheit der Programmierung komplexer Aufgaben in Python und die schnelle Entwicklung, die Python ermöglicht, möglich.

Über den Autor

Eric Floehr ist spezialisiert auf die Erfassung und Analyse von Big Data sowie auf Consumer-Internet-Software und hat mit Unternehmen wie MCI, Datalytics und Battelle zusammengearbeitet. Er hat einen Abschluss in Informatik von der Ohio State University. Er ist seit über 13 Jahren in der Technologiebranche tätig und Gründer von Intellovations, LLC, einem Technologieberatungsunternehmen, das sich auf den Aufbau von Software für die Entdeckung konzentriert – herausfordernde Projekte, die neue Informationen und Kenntnisse in Unternehmen einbringen, um Wettbewerbsvorteile, höhere Produktivität und größere Gewinne zu erzielen. Intellovations hat Büros in Marysville, Ohio, und ist im Web unter http://www.intellovations.com zu finden.