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

Dapatkan dan simpan data siri masa dengan Python

WBOY
Lepaskan: 2023-04-11 19:30:32
ke hadapan
1817 orang telah melayarinya

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
Salin selepas log masuk

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']
Salin selepas log masuk
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)
Salin selepas log masuk
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")
Salin selepas log masuk
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")
Salin selepas log masuk
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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan