V svetu analize podatkov je ravnanje s podatki časovnih vrst ključni vidik. Ena najpogosteje uporabljenih knjižnic za ta namen je **pandas** v programskem jeziku Python. Pogosta naloga pri delu s podatki časovne vrste je pretvorba časovnih razlik med različnimi dogodki v standardno obliko. Tukaj pride prav panda Timedelta. Vendar pa je pri delu z bazami podatkov, kot je PostgreSQL, shranjevanje teh časovnih delt lahko nekoliko težavno. V tem članku bomo razpravljali o tem, kako pretvoriti pandas Timedelta v obliko, ki jo je mogoče shraniti v PostgreSQL, in jo pridobiti, pri tem pa ohraniti pravilno predstavitev.
Rešitev problema
Rešitev te težave vključuje uporabo knjižnic pandas in psycopg2, ki se pogosto uporabljajo za manipulacijo s podatki oziroma upravljanje baze podatkov PostgreSQL. Knjižnica psycopg2 ima podporo za ravnanje s časovnimi deltami z uporabo podatkovnega tipa `interval` v PostgreSQL. To funkcijo bomo izkoristili za shranjevanje naše pande Timedelta v PostgreSQL in jo pridobili nazaj v pravilni obliki.
Najprej uvozimo potrebne knjižnice in vzpostavimo povezavo z našo bazo podatkov PostgreSQL.
import pandas as pd import psycopg2 conn = psycopg2.connect(database="your_database", user="your_user", password="your_password", host="your_host", port="your_port")
pandas Timedelta in PostgreSQL Interval
pandas Timedelta je močno orodje za izražanje časovnih razlik na dosleden in berljiv način. V pandah je enostavno ustvariti in manipulirati objekte timedelta, ko pa jih želimo shraniti v zbirko podatkov PostgreSQL, jih moramo pretvoriti v ustrezno obliko.
PostgreSQL ponuja podatkovni tip `interval` za shranjevanje časovnih intervalov. Ta podatkovni tip lahko predstavlja časovno obdobje v različnih podrobnostih, kot so dnevi, ure, minute in sekunde. Da bi shranili pandas Timedelta v bazo podatkov PostgreSQL, jo moramo pretvoriti v interval PostgreSQL.
Ustvarimo vzorčni pandas DataFrame s stolpcem Timedelta:
data = {'event_name': ['start', 'end'], 'time': [pd.Timestamp('2021-01-01'), pd.Timestamp('2021-01-03')]} df = pd.DataFrame(data) df['difference'] = df['time'].diff() print(df)
Zdaj pa ustvarimo funkcijo za vstavljanje teh podatkov v našo bazo podatkov PostgreSQL in pretvorbo podatkov Timedelta v interval, združljiv s PostgreSQL.
def insert_data(event_name, time, difference, conn): query = """ INSERT INTO timedeltas (event_name, time, difference) VALUES (%s, %s, %s) """ with conn.cursor() as cur: cur.execute(query, (event_name, time, difference)) conn.commit()
S to funkcijo lahko vstavimo naše podatke pandas DataFrame v bazo podatkov PostgreSQL:
for _, row in df.iterrows(): event_name, time, difference = row['event_name'], row['time'], row['difference'] insert_data(event_name, time, difference, conn)
Pridobivanje časovnih delt iz PostgreSQL
Ko so podatki pandas Timedelta shranjeni v PostgreSQL kot intervali, jih lahko preprosto pridobimo in pretvorimo nazaj v pandas Timedeltas med branjem podatkov.
Ustvarimo funkcijo za pridobivanje podatkov iz naše tabele PostgreSQL:
def fetch_data(conn): query = "SELECT event_name, time, difference FROM timedeltas" data = pd.read_sql(query, conn) data['difference'] = pd.to_timedelta(data['difference']) return data
S to funkcijo lahko pridobimo in natisnemo podatke iz naše baze podatkov PostgreSQL:
result = fetch_data(conn) print(result)
Podatki, pridobljeni iz PostgreSQL, imajo zdaj svoje časovne delte pravilno predstavljene kot pande časovne delte.
Skratka, pretvorba pandas Timedelta v obliko, primerno za shranjevanje v PostgreSQL, in njeno pridobivanje v izvirni obliki je preprost postopek. Z izkoriščanjem zmogljivih knjižnic pandas in psycopg2 lahko enostavno obdelujemo podatke o časovnih vrstah in vzdržujemo njihovo pravilno predstavitev, tako v naši analizi podatkov kot v shranjevanju podatkovne baze.