>  기사  >  백엔드 개발  >  Python을 사용하여 시계열 데이터 가져오기 및 저장

Python을 사용하여 시계열 데이터 가져오기 및 저장

WBOY
WBOY앞으로
2023-04-11 19:30:321804검색

Python을 사용하여 시계열 데이터 가져오기 및 저장

번역기 | Bugatti

Reviewer | Sun Shujuan

이 튜토리얼에서는 Python을 사용하여 OpenWeatherMap API에서 시계열 데이터를 얻고 이를 Pandas DataFrame으로 변환하는 방법을 소개합니다. 다음으로 InfluxDB Python 클라이언트를 사용하여 이 데이터를 시계열 데이터 플랫폼 InfluxDB에 씁니다.

InfluxDB에 데이터를 쓰는 가장 쉬운 방법이므로 API 호출의 JSON 응답을 Pandas DataFrame으로 변환합니다. InfluxDB는 특별히 구축된 데이터베이스이므로 InfluxDB에 대한 쓰기는 시계열 데이터 수집 측면에서 높은 요구 사항을 충족하도록 설계되었습니다.

Requirements

이 튜토리얼은 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를 사용 중이고 다음 작업도 수행했다고 가정합니다.

  • 버킷을 생성했습니다. 버킷은 데이터베이스 또는 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 타임스탬프에서 날짜/시간 객체로 변환합니다. InfluxDB 쓰기 방법에서는 타임스탬프가 날짜/시간 객체 형식이어야 하기 때문에 이 변환이 수행됩니다. 다음으로 이 방법을 사용하여 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의 데이터 구성에서 버킷 다음으로 두 번째로 높은 수준의 구조라고 생각하시면 됩니다.

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

Query data

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-)를 읽어보세요. 매핑- 배열/?utm_source=vendor&utm_medium=referral&utm_campaign=2022-07_spnsr-ctn_obtaining-storing-ts-pything_tns).

위 내용은 Python을 사용하여 시계열 데이터 가져오기 및 저장의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제