Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dapatkan dan simpan data siri masa dengan Python

Dapatkan dan simpan data siri masa dengan Python

WBOY
WBOYke hadapan
2023-04-11 19:30:321772semak imbas

Dapatkan dan simpan data siri masa dengan Python

Penterjemah| Bugatti

Pengulas| untuk mendapatkan data siri masa daripada OpenWeatherMap API dan menukarnya menjadi Pandas DataFrame. Seterusnya, kami akan menggunakan Pelanggan Python InfluxDB untuk menulis data ini ke platform data siri masa InfluxDB.

Kami akan menukar respons JSON daripada panggilan API kepada Pandas DataFrame kerana ini adalah cara paling mudah untuk menulis data ke InfluxDB. Memandangkan InfluxDB ialah pangkalan data yang dibina khas, penulisan kami kepada InfluxDB direka bentuk untuk memenuhi keperluan tinggi dari segi pengambilan data siri masa.

Keperluan

Tutorial ini dilengkapkan pada sistem macOS dengan Python 3 dipasang melalui Homebrew. Adalah disyorkan untuk memasang alat tambahan, seperti virtualenv, pyenv atau conda-env, untuk memudahkan pemasangan Python dan Klien. Keperluan penuh ada di sini:

Tutorial ini juga mengandaikan bahawa anda telah membuat akaun awan InfluxDB Peringkat Percuma atau sedang menggunakan InfluxDB OSS, dan anda juga mempunyai:

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

Mencipta baldi . Anda boleh menganggap baldi sebagai tahap tertinggi organisasi data dalam pangkalan data atau InfluxDB.

    Token dicipta.
  • Akhir sekali, tutorial ini memerlukan anda telah membuat akaun dengan OpenWeatherMap dan mencipta token.
Minta data cuaca

Pertama, kami perlu meminta data tersebut. Kami akan menggunakan perpustakaan permintaan untuk mengembalikan data cuaca setiap jam daripada longitud dan latitud yang ditentukan melalui OpenWeatherMap API.

Tukar data kepada Pandas DataFrame

# 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']
Seterusnya, tukar data JSON kepada Pandas DataFrame. Kami juga menukar cap masa daripada cap masa Unix ketepatan kedua kepada objek datetime. Penukaran ini dilakukan kerana kaedah tulis InfluxDB memerlukan cap waktu dalam format objek datetime. Seterusnya, kami akan menggunakan kaedah ini untuk menulis data ke InfluxDB. Kami juga mengalih keluar lajur yang kami tidak mahu ditulis kepada InfluxDB.

Menulis Pandas DataFrame ke 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)
Sekarang buat contoh untuk perpustakaan klien Python InfluxDB dan tulis DataFrame ke InfluxDB. Kami menyatakan nama ukuran. Pengukuran mengandungi data dalam baldi. Anda boleh menganggapnya sebagai struktur tahap kedua tertinggi dalam organisasi data InfluxDB selepas baldi.

Anda juga boleh menentukan lajur yang hendak ditukar kepada teg menggunakan parameter data_frame__tag_columns.

Memandangkan kami tidak menentukan sebarang lajur sebagai label, semua lajur kami akan ditukar menjadi medan dalam InfluxDB. Teg digunakan untuk menulis metadata tentang data siri masa anda, yang boleh digunakan untuk menanya subset data dengan lebih cekap. Medan ialah tempat anda menyimpan data siri masa sebenar dalam InfluxDB. Dokumen ini (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) menerangkan dengan lebih terperinci tentang konsep data ini .

Skrip Penuh

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")
Untuk imbas kembali, apa kata lihat skrip lengkapnya. Kami mengambil langkah berikut:

1.

2. Kumpul yang berikut:

Badi InfluxDB

    Organisasi InfluxDB
  • Token InfluxDB
  • URL InfluxDB
  • URL OpenWeatherMap
  • Token OpenWeatherMap
  • 3. Buat permintaan.
4. Tukar respons JSON kepada Pandas DataFrame.

5. Padamkan mana-mana lajur yang anda tidak mahu tulis ke InfluxDB.

6. Tukar lajur cap masa daripada masa Unix kepada objek masa tarikh Pandas.

7. Buat contoh untuk pustaka Pelanggan Python InfluxDB.

8 Tulis DataFrame dan nyatakan nama ukuran dan lajur cap masa.

Mencari data

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")
Sekarang kami telah menulis data ke InfluxDB, kami boleh menggunakan UI InfluxDB untuk menanyakan data. Navigasi ke Penjelajah Data (dari bar navigasi kiri). Menggunakan Pembina Pertanyaan, pilih data yang anda mahu gambarkan dan julat yang anda mahu gambarkan, dan klik Serah.

Rajah 1. Paparan lalai terwujud data cuaca. InfluxDB mengagregatkan data siri masa secara automatik supaya pengguna baharu tidak menanyakan terlalu banyak data secara tidak sengaja dan menyebabkan tamat masa Dapatkan dan simpan data siri masa dengan Python

Petua Pro: Apabila anda menanya data menggunakan pembina pertanyaan, InfluxDB menurunkan sampel data secara automatik. Untuk menanyakan data mentah, navigasi ke Editor Skrip untuk melihat pertanyaan Fluks yang mendasari. Flux ialah bahasa pertanyaan dan skrip asli untuk InfluxDB yang boleh digunakan untuk menganalisis dan membuat ramalan menggunakan data siri masa anda. Gunakan fungsi aggregateWindow() untuk menyahkomen atau memadamkan baris untuk melihat data asal.

Rajah 2. Navigasi ke editor skrip dan nyahkomen atau padam fungsi aggregateWindow() untuk melihat data cuaca mentah

Kesimpulan

Semoga artikel ini membantu anda memanfaatkan InfluxDB sepenuhnya Pustaka Pelanggan Python, memperoleh data siri masa dan menyimpannya dalam InfluxDB. Jika anda ingin mengetahui lebih lanjut tentang menggunakan perpustakaan Klien Python untuk menanyakan data daripada InfluxDB, saya syorkan anda melihat artikel ini (https://thenewstack.io/getting-started-with-python-and-influxdb/). Perlu juga dinyatakan bahawa anda boleh menggunakan Flux untuk mendapatkan data daripada OpenWeatherMap API dan menyimpannya ke dalam InfluxDB. Jika anda menggunakan InfluxDB Cloud, ini bermakna skrip Flux akan dihoskan dan dilaksanakan secara berkala, supaya anda boleh mendapatkan aliran data cuaca yang boleh dipercayai yang dimasukkan ke dalam contoh. Untuk mengetahui lebih lanjut tentang cara menggunakan Flux untuk mendapatkan data cuaca pada jadual yang ditentukan pengguna, sila baca artikel ini (https://www.influxdata.com/blog/tldr-influxdb-tech-tips-handling-json-objects- pemetaan- tatasusunan/?utm_source=vendor&utm_medium=referral&utm_campaign=2022-07_spnsr-ctn_obtaining-storing-ts-pything_tns).

Atas ialah kandungan terperinci Dapatkan dan simpan data siri masa dengan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam