У свету анализе података, руковање подацима временских серија је кључни аспект. Једна од најчешће коришћених библиотека за ову сврху је **пандас** у програмском језику Питхон. Уобичајени задатак при раду са подацима о временским серијама је претварање временских разлика између различитих догађаја у стандардни формат. Овде панде Тимеделта добро долазе. Међутим, када радите са базама података као што је ПостгреСКЛ, чување ових временских делта може бити мало незгодно. У овом чланку ћемо разговарати о томе како да конвертујете панде Тимеделта у формат који може да се складишти у ПостгреСКЛ-у и да га преузмете уз одржавање исправног приказа.
Решење проблема
Решење овог проблема подразумева коришћење панда и псицопг2 библиотека, које се широко користе за манипулацију подацима и ПостгреСКЛ управљање базом података. Библиотека псицопг2 има подршку за руковање временским делтама, користећи тип података `интервал` у ПостгреСКЛ-у. Искористићемо ову функцију да сачувамо наше панде Тимеделта у ПостгреСКЛ и вратимо је у одговарајућем формату.
Прво, хајде да увеземо потребне библиотеке и успоставимо везу са нашом ПостгреСКЛ базом података.
import pandas as pd import psycopg2 conn = psycopg2.connect(database="your_database", user="your_user", password="your_password", host="your_host", port="your_port")
пандас Тимеделта и ПостгреСКЛ Интервал
пандас Тимеделта је моћно средство за изражавање временских разлика на доследан и читљив начин. Лако је креирати и манипулисати тимеделта објектима у пандама, али када је у питању њихово складиштење у ПостгреСКЛ бази података, морамо их конвертовати у одговарајући формат.
ПостгреСКЛ нуди тип података `интервал` за чување временских интервала. Овај тип података може представљати временски распон у различитим грануларностима, као што су дани, сати, минути и секунде. Да бисмо сачували панду Тимеделта у ПостгреСКЛ бази података, морамо да је конвертујемо у ПостгреСКЛ интервал.
Хајде да направимо узорак пандас ДатаФраме са колоном Тимеделта:
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)
Сада направимо функцију за уметање ових података у нашу ПостгреСКЛ базу података и конвертовање Тимеделта података у интервал компатибилан са ПостгреСКЛ-ом.
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()
Користећи ову функцију, можемо да убацимо наше пандас ДатаФраме податке у ПостгреСКЛ базу података:
for _, row in df.iterrows(): event_name, time, difference = row['event_name'], row['time'], row['difference'] insert_data(event_name, time, difference, conn)
Преузимање Тимеделта из ПостгреСКЛ-а
Када се подаци о пандас Тимеделта чувају у ПостгреСКЛ-у као интервали, лако можемо да их преузмемо и конвертујемо назад у пандас Тимеделта док читамо податке.
Хајде да направимо функцију за преузимање података из наше ПостгреСКЛ табеле:
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
Помоћу ове функције можемо преузети и одштампати податке из наше ПостгреСКЛ базе података:
result = fetch_data(conn) print(result)
Подаци који се преузимају из ПостгреСКЛ-а сада имају своје Тимеделте правилно представљене као панде Тимеделтас.
У закључку, претварање панди Тимеделта у формат погодан за ПостгреСКЛ складиште и његово преузимање у оригиналном облику је једноставан процес. Коришћењем моћних библиотека панда и псицопг2, можемо лако да рукујемо подацима временских серија и одржавамо њихову исправну репрезентацију, како у нашој анализи података, тако иу нашој бази података.