Spaces:
Sleeping
Sleeping
File size: 6,099 Bytes
14df075 aa32941 296469d c0326b0 2fa5186 aa32941 2fa5186 296469d 9aa2a23 14df075 9aa2a23 2fa5186 c0326b0 9aa2a23 296469d 9aa2a23 aa32941 2fa5186 2de0ed6 2fa5186 c0326b0 2fa5186 c0326b0 01961c2 c0326b0 408bfed 2de0ed6 408bfed 2fa5186 2de0ed6 2fa5186 c0326b0 2fa5186 408bfed 2fa5186 408bfed 2fa5186 408bfed 2fa5186 c0326b0 2de0ed6 c0326b0 408bfed c0326b0 90ba9ea 87ce0fc 296469d 9aa2a23 c0326b0 408bfed 87ce0fc 2fa5186 c0326b0 408bfed 01961c2 408bfed c0326b0 aa32941 296469d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# app.py
import gradio as gr
import requests
import pandas as pd
from datetime import datetime
import os
# --------------------------------------------------------------
# ⚙️ Получение данных
# --------------------------------------------------------------
def fetch_bank_data():
try:
url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
r = requests.get(url, timeout=10)
r.raise_for_status()
from xml.etree import ElementTree as ET
root = ET.fromstring(r.text)
data = [
{"Валюта": c.attrib["currency"], "Курс к EUR": float(c.attrib["rate"])}
for c in root.findall(".//{*}Cube[@currency]")
]
df = pd.DataFrame(data).sort_values("Курс к EUR")
return "✅ Данные успешно загружены (ECB)", df
except Exception as e:
return f"❌ Ошибка: {e}", pd.DataFrame()
# --------------------------------------------------------------
# Анализ данных
# --------------------------------------------------------------
def analyze_data(df: pd.DataFrame):
if df.empty:
return "⚠️ Нет данных для анализа."
strongest, weakest = df.iloc[-1], df.iloc[0]
return (
f"📊 Сводка валют:\n\n"
f"• Самая сильная валюта — **{strongest['Валюта']} ({strongest['Курс к EUR']:.2f})**\n"
f"• Самая слабая валюта — **{weakest['Валюта']} ({weakest['Курс к EUR']:.2f})**\n"
f"• Средний курс: **{df['Курс к EUR'].mean():.2f}**"
)
# --------------------------------------------------------------
# Генерация SWOT-анализа (эмуляция RAG)
# --------------------------------------------------------------
def generate_swot(df: pd.DataFrame):
if df.empty:
return "⚠️ Нет данных для SWOT-анализа."
strongest, weakest = df.iloc[-1], df.iloc[0]
avg = df["Курс к EUR"].mean()
return (
f"💡 **SWOT-анализ валютного рынка (по данным ЕЦБ)**\n\n"
f"**Strengths (Сильные стороны):**\n"
f"- Стабильность курса евро как базовой валюты.\n"
f"- {strongest['Валюта']} демонстрирует наибольшую устойчивость.\n\n"
f"**Weaknesses (Слабости):**\n"
f"- {weakest['Валюта']} имеет низкую покупательную способность.\n"
f"- Зависимость многих валют от макроэкономических факторов.\n\n"
f"**Opportunities (Возможности):**\n"
f"- Потенциал для инвестиций в растущие валюты.\n"
f"- Использование колебаний курса для арбитража.\n\n"
f"**Threats (Угрозы):**\n"
f"- Глобальные кризисы и политическая нестабильность.\n"
f"- Волатильность курсов ниже среднего ({avg:.2f})."
)
# --------------------------------------------------------------
# Экспорт в Excel (Power BI)
# --------------------------------------------------------------
def export_to_excel(df: pd.DataFrame):
if df.empty:
return None, "⚠️ Нет данных для экспорта."
filename = f"bank_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
filepath = os.path.join(os.getcwd(), filename)
try:
with pd.ExcelWriter(filepath, engine="openpyxl") as writer:
# Лист 1 — данные
df.to_excel(writer, index=False, sheet_name="Rates")
# Лист 2 — аналитика
summary_text = analyze_data(df)
summary_df = pd.DataFrame({"RAG Summary": [summary_text]})
summary_df.to_excel(writer, index=False, sheet_name="AI_Analysis")
# Лист 3 — SWOT
swot_text = generate_swot(df)
swot_df = pd.DataFrame({"SWOT Analysis": [swot_text]})
swot_df.to_excel(writer, index=False, sheet_name="SWOT_AI")
return filepath, f"✅ Отчёт '{filename}' готов. Можно загрузить в Power BI."
except Exception as e:
return None, f"❌ Ошибка при создании файла: {e}"
# --------------------------------------------------------------
# Интерфейс Gradio
# --------------------------------------------------------------
with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data RAG Prototype") as demo:
gr.Markdown(
"## 🏦 Banking Data RAG Prototype\n"
"Загружай открытые банковские данные, выполняй RAG-анализ и выгружай отчёт для Power BI."
)
with gr.Row():
with gr.Column(scale=1):
btn_load = gr.Button(" Загрузить данные", variant="primary")
btn_analyze = gr.Button(" Сводный анализ")
btn_swot = gr.Button(" SWOT-анализ")
btn_export = gr.Button(" Экспорт в Power BI")
with gr.Column(scale=3):
status = gr.Textbox(label="Статус", value="Ожидание...")
summary = gr.Textbox(label="Сводка анализа", lines=6)
swot = gr.Textbox(label="SWOT-анализ", lines=10)
table = gr.DataFrame(label=" Курсы валют", interactive=False)
file_out = gr.File(label="Скачать отчёт")
# Кнопки
btn_load.click(fetch_bank_data, None, [status, table])
btn_analyze.click(analyze_data, [table], [summary])
btn_swot.click(generate_swot, [table], [swot])
btn_export.click(export_to_excel, [table], [file_out, status])
demo.queue(max_size=32).launch(server_name="0.0.0.0", server_port=7860)
|