ホームページ  >  記事  >  バックエンド開発  >  Python を使用して時系列データを取得して保存する

Python を使用して時系列データを取得して保存する

WBOY
WBOY転載
2023-04-11 19:30:321773ブラウズ

Python を使用して時系列データを取得して保存する

##翻訳者| Bugatti

レビュアー| Sun Shujuan

このチュートリアルでは Python の使用方法を紹介しますOpenWeatherMap API から時系列データを取得し、それを Pandas DataFrame に変換します。次に、InfluxDB Python クライアントを使用して、このデータを時系列データ プラットフォーム InfluxDB に書き込みます。

これが InfluxDB にデータを書き込む最も簡単な方法であるため、API 呼び出しからの JSON 応答を Pandas DataFrame に変換します。 InfluxDB は専用データベースであるため、InfluxDB への書き込みは時系列データの取り込みに関する高い要件を満たすように設計されています。

要件

このチュートリアルは、Homebrew 経由で Python 3 がインストールされている macOS システムで完了します。 Python とクライアントのインストールを簡素化するために、virtualenv、pyenv、conda-env などの追加ツールをインストールすることをお勧めします。完全な要件はここにあります:

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

このチュートリアルでは、無料利用枠の InfluxDB クラウド アカウントをすでに作成しているか、InfluxDB OSS を使用していて、次の条件も満たしていることを前提としています:

    Createdバケツ。バケットは、データベースまたは InfluxDB 内の最高レベルのデータ編成と考えることができます。
  • トークンが作成されました。
最後に、このチュートリアルでは、OpenWeatherMap でアカウントを作成し、トークンを作成しておく必要があります。

気象データのリクエスト

まず、データをリクエストする必要があります。リクエスト ライブラリを使用して、OpenWeatherMap API 経由で指定された経度と緯度から時間ごとの気象データを返します。

# 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']

データを Pandas DataFrame に変換する

次に、JSON データを Pandas DataFrame に変換します。また、タイムスタンプを秒精度の Unix タイムスタンプから datetime オブジェクトに変換します。 InfluxDB 書き込みメソッドではタイムスタンプが datetime オブジェクト形式である必要があるため、この変換が行われます。次に、このメソッドを使用して InfluxDB にデータを書き込みます。また、InfluxDB に書き込んだくない列も削除しました。

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 を InfluxDB に書き込む

次に、InfluxDB Python クライアント ライブラリのインスタンスを作成し、DataFrame を InfluxDB に書き込みます。測定名を指定しました。測定値にはバケット内のデータが含まれます。これは、InfluxDB のデータ構成においてバケットに次いで 2 番目に高いレベルの構造と考えることができます。

data_frame__tag_columns パラメーターを使用して、どの列をタグに変換するかを指定することもできます。

列をラベルとして指定しなかったため、すべての列が InfluxDB のフィールドに変換されます。タグは時系列データに関するメタデータを書き込むために使用され、これを使用してデータのサブセットをより効率的にクエリすることができます。フィールドは、InfluxDB に実際の時系列データを保存する場所です。このドキュメント (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) では、これらのデータ概念について詳しく説明します。 。

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")

完全なスクリプト

確認するには、完全なスクリプトを参照してください。次の手順を実行します:

1. ライブラリをインポートします。

2. 以下を収集します:

    InfluxDB バケット
  • InfluxDB 組織
  • InfluxDB トークン
  • InfluxDB URL
  • OpenWeatherMap URL
  • OpenWeatherMap トークン
3. リクエストを作成します。

4. JSON 応答を Pandas DataFrame に変換します。

5. InfluxDB に書き込みたくない列を削除します。

6. タイムスタンプ列を Unix 時間から Pandas の日時オブジェクトに変換します。

7. InfluxDB Python クライアント ライブラリのインスタンスを作成します。

8. DataFrame を記述し、測定名とタイムスタンプ列を指定します。

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")

データのクエリ

データを InfluxDB に書き込んだので、InfluxDB UI を使用してデータをクエリできます。 (左側のナビゲーション バーから) データ エクスプローラーに移動します。クエリ ビルダーを使用して、視覚化するデータと視覚化する範囲を選択し、[送信] をクリックします。

Python を使用して時系列データを取得して保存する

図 1. 気象データのデフォルトの実体化ビュー。 InfluxDB は時系列データを自動的に集計するため、新しいユーザーが誤って大量のデータをクエリしてタイムアウトを引き起こすことがなくなります。

プロのヒント: クエリ ビルダーを使用してデータをクエリすると、InfluxDB は自動的にデータをダウンサンプリングします。生データをクエリするには、スクリプト エディターに移動して、基礎となる Flux クエリを表示します。 Flux は、時系列データを使用した予測の分析と作成に使用できる、InfluxDB のネイティブ クエリおよびスクリプト言語です。元のデータを確認するには、aggregateWindow() 関数を使用して行のコメントを解除または削除します。

Python を使用して時系列データを取得して保存する

図 2. スクリプト エディターに移動し、aggregateWindow() 関数のコメントを解除するか削除して生の気象データを表示します

結論

この記事が InfluxDB を最大限に活用するのに役立つことを願っていますPython クライアント ライブラリ。時系列データを取得し、InfluxDB に保存します。 Python クライアント ライブラリを使用して InfluxDB からデータをクエリする方法について詳しく知りたい場合は、この記事 (https://thenewstack.io/getting-started-with-python-and-influxdb/) を参照することをお勧めします。 Flux を使用して OpenWeatherMap API からデータを取得し、それを InfluxDB に保存できることにも言及する価値があります。 InfluxDB Cloud を使用する場合、Flux スクリプトがホストされて定期的に実行されるため、インスタンスに供給される気象データの信頼できるストリームを取得できます。 Flux を使用してユーザー定義のスケジュールに従って気象データを取得する方法の詳細については、この記事 (https://www.influxdata.com/blog/tldr-influxdb-tech-tips-handling-json-objects-) を参照してください。マッピング-arrays/?utm_source=vendor&utm_medium=referral&utm_campaign=2022-07_spnsr-ctn_obtaining-storing-ts-pything_tns)。

以上がPython を使用して時系列データを取得して保存するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。