U svijetu analize podataka, rukovanje podacima vremenskih serija ključni je aspekt. Jedna od najčešće korištenih biblioteka u tu svrhu je **pandas** u programskom jeziku Python. Uobičajeni zadatak pri radu s vremenskim serijama podataka je pretvaranje vremenskih razlika između različitih događaja u standardni format. Ovdje pande Timedelta dobro dolaze. Međutim, kada radite s bazama podataka kao što je PostgreSQL, pohranjivanje ovih vremenskih delta može biti malo nezgodno. U ovom ćemo članku raspravljati o tome kako pretvoriti pandas Timedelta u format koji se može pohraniti u PostgreSQL i dohvatiti ga uz zadržavanje njegovog ispravnog prikaza.
Rješenje problema
Rješenje ovog problema uključuje korištenje knjižnica pandas i psycopg2, koje se naširoko koriste za manipulaciju podacima odnosno upravljanje PostgreSQL bazom podataka. Biblioteka psycopg2 ima podršku za rukovanje timedeltas, koristeći tip podataka `interval` u PostgreSQL-u. Iskoristit ćemo ovu značajku za pohranjivanje naše pande Timedelta u PostgreSQL i dohvaćanje je natrag u ispravnom formatu.
Prvo, uvezimo potrebne biblioteke i uspostavimo vezu s našom PostgreSQL bazom podataka.
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 i PostgreSQL Interval
pandas Timedelta moćan je alat za izražavanje vremenskih razlika na dosljedan i čitljiv način. Lako je stvoriti i manipulirati timedelta objektima u pandama, ali kada je u pitanju njihovo pohranjivanje u PostgreSQL bazu podataka, moramo ih pretvoriti u odgovarajući format.
PostgreSQL nudi tip podataka `interval` za pohranu vremenskih intervala. Ova vrsta podataka može predstavljati vremenski raspon u različitim granularnostima, kao što su dani, sati, minute i sekunde. Kako bismo pohranili pandas Timedelta u PostgreSQL bazu podataka, moramo je pretvoriti u PostgreSQL interval.
Kreirajmo ogledni pandas DataFrame sa stupcem 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)
Kreirajmo sada funkciju za umetanje ovih podataka u našu PostgreSQL bazu podataka i pretvaranje podataka Timedelta u interval kompatibilan 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()
Koristeći ovu funkciju, možemo umetnuti naše pandas DataFrame podatke u PostgreSQL bazu podataka:
for _, row in df.iterrows(): event_name, time, difference = row['event_name'], row['time'], row['difference'] insert_data(event_name, time, difference, conn)
Dohvaćanje Timedeltas iz PostgreSQL
Nakon što se podaci pandas Timedelta pohrane u PostgreSQL kao intervali, možemo ih lako dohvatiti i pretvoriti natrag u pandas Timedelta dok čitamo podatke.
Kreirajmo funkciju za dohvaćanje podataka iz naše PostgreSQL tablice:
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
Pomoću ove funkcije možemo dohvatiti i ispisati podatke iz naše PostgreSQL baze podataka:
result = fetch_data(conn) print(result)
Podaci dohvaćeni iz PostgreSQL-a sada imaju svoje Timedeltas ispravno predstavljene kao pandas Timedeltas.
Zaključno, pretvaranje pandas Timedelta u format prikladan za PostgreSQL pohranu i njegovo dohvaćanje u izvornom obliku je jednostavan proces. Iskorištavanjem moćnih biblioteka pandas i psycopg2, možemo jednostavno rukovati podacima o vremenskim serijama i održavati njihov ispravan prikaz, kako u našoj analizi podataka, tako i u našoj pohrani baze podataka.