/
zinyaevaa
/
database
Обзор
Документация
Войти
/
zinyaevaa
/
database
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
lab5/analyseData.py
129 строк
5 KB
zinyaevaa
lab5
04 май 2025, 23:29
04 май 2025, 23:29
f732d70
Код
Авторство
О чём код?
from datetime import datetime, timedelta from savingPriceData import connect_to_picodata def get_average_price(): """ Вычисляет среднюю цену криптовалюты за последнюю неделю. Args: Не принимает аргументы. Returns: Средняя цена или None, если данных нет. """ try: conn = connect_to_picodata() cursor = conn.cursor() seven_days_ago = (datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S') cursor.execute(''' SELECT symbol, AVG(price_usd) as average_price FROM rates WHERE timestamp >= to_date(%s, '%%Y-%%m-%%d %%H:%%M:%%S') GROUP BY symbol; ''', (seven_days_ago,)) average_prices = cursor.fetchall() print("Средняя цена за последнюю неделю:") for row in average_prices: print(f"{row[0]}: {row[1]:.2f}") except Exception as e: print(f"Ошибка получения средней цены криптовалюты: {e}") def get_max_min_price(start_date, end_date): """ Определяет максимальную и минимальную цену криптовалюты. Args: start_date: Дата начала периода. ebd_date: Дата конца периода. Returns: Кортеж (symbol ,max_price, min_price), где symbol - криптовалюта, или (None, None, None), если данных нет. """ try: conn = connect_to_picodata() cursor = conn.cursor() start_date = start_date.strftime('%Y-%m-%d %H:%M:%S') end_date = end_date.strftime('%Y-%m-%d %H:%M:%S') cursor.execute(''' SELECT symbol, MAX(price_usd) as max_price, MIN(price_usd) as min_price FROM rates WHERE timestamp BETWEEN to_date(%s, '%%Y-%%m-%%d %%H:%%M:%%S') AND to_date(%s, '%%Y-%%m-%%d %%H:%%M:%%S') GROUP BY symbol; ''', (start_date, end_date)) max_min_prices = cursor.fetchall() for row in max_min_prices: print(f"Криптовалюта: {row[0]}, максимальная цена: {row[1]}, минимальная цена: {row[2]}") except Exception as e: print(f"Ошибка получения max/min цены криптовалюты: {e}") def get_largest_price_drop(symbol): """ Определяет наибольшее падение цены за сутки. Args: symbol: Криптовалюта. Returns: Наибольшее падение цены или None, если данных недостаточно. """ try: conn = connect_to_picodata() cursor = conn.cursor() cursor.execute(''' WITH daily_prices AS ( SELECT timestamp, MAX(price_usd) as max_price, MIN(price_usd) as min_price FROM rates WHERE symbol = %s GROUP BY timestamp ) SELECT timestamp, max_price - min_price as price_drop, (max_price - min_price) / max_price * 100 as drop_percentage FROM daily_prices ORDER BY drop_percentage DESC LIMIT 1 ''', (symbol,)) max_drop = cursor.fetchone() print(f"Криптовалюта: {symbol}, наибольшее падение: {max_drop[1]}, {max_drop[2]:.2f}%, дата: {max_drop[0]}") except Exception as e: print(f"Ошибка получения наибольшего падения цены криптовалюты: {e}") if __name__ == '__main__': conn = connect_to_picodata() if conn: # 1. Средняя цена за последнюю неделю get_average_price() print("-------------------") # 2. Максимальная и минимальная цена за последнюю неделю get_max_min_price(datetime(2025, 5, 3, 0, 0, 0), datetime(2025, 5, 4, 23, 59, 59)) print("##------------------------------##") # 3. Наибольшее падение цены за сутки (требует данных за сутки) get_largest_price_drop("bitcoin") get_largest_price_drop("ethereum") get_largest_price_drop("litecoin") get_largest_price_drop("ripple") get_largest_price_drop("cardano") get_largest_price_drop("dogecoin") conn.close() else: print("Не удалось установить соединение с базой данных.")