Heim  >  Artikel  >  Backend-Entwicklung  >  Erhalten und speichern Sie Zeitreihendaten mit Python

Erhalten und speichern Sie Zeitreihendaten mit Python

WBOY
WBOYnach vorne
2023-04-11 19:30:321773Durchsuche

Erhalten und speichern Sie Zeitreihendaten mit Python

Übersetzer |. Bugatti

Reviewer |. In diesem Tutorial erfahren Sie, wie Sie mit Python Zeitreihendaten von der OpenWeatherMap-API abrufen und in einen Pandas DataFrame konvertieren. Als Nächstes verwenden wir den InfluxDB-Python-Client, um diese Daten in die Zeitreihen-Datenplattform InfluxDB zu schreiben.

Wir werden die JSON-Antwort vom API-Aufruf in einen Pandas DataFrame konvertieren, da dies der einfachste Weg ist, Daten in InfluxDB zu schreiben. Da es sich bei InfluxDB um eine speziell entwickelte Datenbank handelt, sind unsere Schreibvorgänge in InfluxDB darauf ausgelegt, die hohen Anforderungen hinsichtlich der Aufnahme von Zeitreihendaten zu erfüllen.

Anforderungen

Dieses Tutorial wird auf einem macOS-System durchgeführt, auf dem Python 3 über Homebrew installiert ist. Es wird empfohlen, zusätzliche Tools wie virtualenv, pyenv oder conda-env zu installieren, um die Installation von Python und Client zu vereinfachen. Vollständige Anforderungen hier:

txt
influxdb-client=1.30.0
pandas=1.4.3
requests>=2.27.1

In diesem Tutorial wird außerdem davon ausgegangen, dass Sie bereits ein kostenloses InfluxDB-Cloud-Konto erstellt haben oder InfluxDB OSS verwenden und dass Sie außerdem:

den Bucket erstellt haben. Sie können sich Buckets als die höchste Ebene der Datenorganisation in einer Datenbank oder InfluxDB vorstellen.

    Token erstellt.
  • Abschließend erfordert dieses Tutorial, dass Sie bereits ein Konto bei OpenWeatherMap erstellt und einen Token erstellt haben.
Wetterdaten anfordern

Zuerst müssen wir Daten anfordern. Wir werden die Anforderungsbibliothek verwenden, um stündliche Wetterdaten von einem bestimmten Längen- und Breitengrad über die OpenWeatherMap-API zurückzugeben.

# Get time series data from OpenWeatherMap API
params = {'lat':openWeatherMap_lat, 'lon':openWeatherMap_lon, 'exclude': 
"minutely,daily", 'appid':openWeatherMap_token}
r = requests.get(openWeather_url, params = params).json()
hourly = r['hourly']

Daten in Pandas DataFrame konvertieren

Als nächstes konvertieren Sie die JSON-Daten in Pandas DataFrame. Wir konvertieren auch den Zeitstempel von einem Unix-Zeitstempel mit zweiter Genauigkeit in ein Datetime-Objekt. Diese Konvertierung erfolgt, da die InfluxDB-Schreibmethode erfordert, dass der Zeitstempel im Datetime-Objektformat vorliegt. Als nächstes werden wir diese Methode verwenden, um Daten in InfluxDB zu schreiben. Wir haben auch Spalten entfernt, die nicht in InfluxDB geschrieben werden sollten.

python
# Convert data to Pandas DataFrame and convert timestamp to datetime 
object
df = pd.json_normalize(hourly)
df = df.drop(columns=['weather', 'pop'])
df['dt'] = pd.to_datetime(df['dt'], unit='s')
print(df.head)

Pandas DataFrame in InfluxDB schreiben

Erstellen Sie nun eine Instanz für die InfluxDB-Python-Client-Bibliothek und schreiben Sie den DataFrame in InfluxDB. Wir haben den Messnamen angegeben. Messungen enthalten Daten in Buckets. Sie können es sich als die Struktur der zweithöchsten Ebene in der Datenorganisation von InfluxDB nach Buckets vorstellen.

Mit dem Parameter data_frame__tag_columns können Sie auch angeben, welche Spalten in Tags umgewandelt werden sollen.

Da wir keine Spalten als Beschriftungen angegeben haben, werden alle unsere Spalten in InfluxDB in Felder umgewandelt. Mithilfe von Tags werden Metadaten zu Ihren Zeitreihendaten geschrieben, mit denen Teilmengen der Daten effizienter abgefragt werden können. In Feldern speichern Sie die tatsächlichen Zeitreihendaten in InfluxDB. Dieses Dokument (https://docs.influxdata.com/influxdb/cloud/reference/key-concepts/?utm_source=vendor&utm_medium=referral&utm_campaign=2022-07_spnsr-ctn_obtaining-storing-ts-pything_tns) geht detaillierter auf diese Datenkonzepte ein .

on
# Write data to InfluxDB
with InfluxDBClient(url=url, token=token, org=org) as client:
df = df
client.write_api(write_options=SYNCHRONOUS).write(bucket=bucket,record=df,
data_frame_measurement_name="weather",
data_frame_timestamp_column="dt")

Vollständiges Skript

Schauen Sie sich zur Überprüfung das vollständige Skript an. Wir führen folgende Schritte aus:

1. Importieren Sie die Bibliothek.

2. Sammeln Sie Folgendes:

InfluxDB-Bucket

    InfluxDB-Organisation
  • InfluxDB-Token
  • InfluxDB-URL
  • OpenWeatherMap-URL
  • OpenWeatherMap-Token
  • 3 . Erstellen Sie eine Anfrage.
4. JSON-Antwort in Pandas DataFrame konvertieren.

5. Löschen Sie alle Spalten, die Sie nicht in InfluxDB schreiben möchten.

6. Konvertieren Sie die Zeitstempelspalte von der Unix-Zeit in das Pandas-Datetime-Objekt.

7. Erstellen Sie eine Instanz für die InfluxDB Python Client-Bibliothek.

8. Schreiben Sie einen DataFrame und geben Sie den Messnamen und die Zeitstempelspalte an.

python
import requests
import influxdb_client
import pandas as pd
from influxdb_client import InfluxDBClient
from influxdb_client.client.write_api import SYNCHRONOUS
bucket = "OpenWeather"
org = "" # or email you used to create your Free Tier 
InfluxDB Cloud account
token = " 
url = "" # for example, 
https://us-west-2-1.aws.cloud2.influxdata.com/
openWeatherMap_token = ""
openWeatherMap_lat = "33.44"
openWeatherMap_lon = "-94.04"
openWeather_url = "https://api.openweathermap.org/data/2.5/onecall"
# Get time series data from OpenWeatherMap API
params = {'lat':openWeatherMap_lat, 'lon':openWeatherMap_lon, 'exclude': 
"minutely,daily", 'appid':openWeatherMap_token}
r = requests.get(openWeather_url, params = params).json()
hourly = r['hourly']
# Convert data to Pandas DataFrame and convert timestamp to datetime 
object
df = pd.json_normalize(hourly)
df = df.drop(columns=['weather', 'pop'])
df['dt'] = pd.to_datetime(df['dt'], unit='s')
print(df.head)
# Write data to InfluxDB
with InfluxDBClient(url=url, token=token, org=org) as client:
df = df
client.write_api(write_options=SYNCHRONOUS).write(bucket=bucket,record=df,
data_frame_measurement_name="weather",
data_frame_timestamp_column="dt")

Daten abfragen

Da wir nun die Daten in InfluxDB geschrieben haben, können wir die InfluxDB-Benutzeroberfläche verwenden, um die Daten abzufragen. Navigieren Sie zum Daten-Explorer (in der linken Navigationsleiste). Wählen Sie mit Query Builder die Daten aus, die Sie visualisieren möchten, sowie den Bereich, den Sie visualisieren möchten, und klicken Sie auf „Senden“.

Abbildung 1. Standardmäßige materialisierte Ansicht von Wetterdaten. InfluxDB aggregiert Zeitreihendaten automatisch, damit neue Benutzer nicht versehentlich zu viele Daten abfragen und Zeitüberschreitungen verursachen Erhalten und speichern Sie Zeitreihendaten mit Python

Profi-Tipp: Wenn Sie Daten mit dem Abfrage-Builder abfragen, führt InfluxDB automatisch ein Downsampling der Daten durch. Um Rohdaten abzufragen, navigieren Sie zum Skripteditor, um die zugrunde liegende Flux-Abfrage anzuzeigen. Flux ist eine native Abfrage- und Skriptsprache für InfluxDB, mit der Sie Ihre Zeitreihendaten analysieren und Vorhersagen erstellen können. Verwenden Sie die Funktion „aggregatWindow()“, um Zeilen zu kommentieren oder zu löschen und die Originaldaten anzuzeigen.

Abbildung 2. Navigieren Sie zum Skripteditor und entfernen Sie das Kommentarzeichen oder löschen Sie die Funktion „aggregatWindow()“, um die rohen Wetterdaten anzuzeigen Speichern Sie es in InfluxDB. Wenn Sie mehr über die Verwendung der Python-Client-Bibliothek zum Abfragen von Daten aus InfluxDB erfahren möchten, empfehle ich Ihnen einen Blick auf diesen Artikel (https://thenewstack.io/getting-started-with-python-and-influxdb/). Erwähnenswert ist auch, dass Sie Flux verwenden können, um Daten von der OpenWeatherMap-API abzurufen und in InfluxDB zu speichern. Wenn Sie InfluxDB Cloud verwenden, bedeutet dies, dass das Flux-Skript regelmäßig gehostet und ausgeführt wird, sodass Sie einen zuverlässigen Strom von Wetterdaten in die Instanz einspeisen können. Um mehr darüber zu erfahren, wie Sie mit Flux Wetterdaten nach einem benutzerdefinierten Zeitplan abrufen können, lesen Sie bitte diesen Artikel (https://www.influxdata.com/blog/tldr-influxdb-tech-tips-handling-json-objects- (mapping- arrays/?utm_source=vendor&utm_medium=referral&utm_campaign=2022-07_spnsr-ctn_obtaining-storing-ts-pything_tns).

Das obige ist der detaillierte Inhalt vonErhalten und speichern Sie Zeitreihendaten mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen