ホームページ >バックエンド開発 >Python チュートリアル >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 を使用していて、次の条件も満たしていることを前提としています:
# 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. 以下を収集します:
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 を使用してデータをクエリできます。 (左側のナビゲーション バーから) データ エクスプローラーに移動します。クエリ ビルダーを使用して、視覚化するデータと視覚化する範囲を選択し、[送信] をクリックします。 図 1. 気象データのデフォルトの実体化ビュー。 InfluxDB は時系列データを自動的に集計するため、新しいユーザーが誤って大量のデータをクエリしてタイムアウトを引き起こすことがなくなります。 プロのヒント: クエリ ビルダーを使用してデータをクエリすると、InfluxDB は自動的にデータをダウンサンプリングします。生データをクエリするには、スクリプト エディターに移動して、基礎となる Flux クエリを表示します。 Flux は、時系列データを使用した予測の分析と作成に使用できる、InfluxDB のネイティブ クエリおよびスクリプト言語です。元のデータを確認するには、aggregateWindow() 関数を使用して行のコメントを解除または削除します。
図 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 サイトの他の関連記事を参照してください。