QAway-to commited on
Commit
c0326b0
·
1 Parent(s): 9aa2a23

Base app.py interface v1.9

Browse files
Files changed (1) hide show
  1. app.py +55 -9
app.py CHANGED
@@ -2,16 +2,19 @@
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
5
- from io import StringIO
 
6
 
 
 
 
7
  def fetch_bank_data():
8
- """Загружаем курсы валют от Европейского Центробанка (пример открытых банковских данных)."""
9
  try:
10
  url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
11
  r = requests.get(url, timeout=10)
12
  r.raise_for_status()
13
 
14
- # Простая XML-обработка через pandas
15
  from xml.etree import ElementTree as ET
16
  root = ET.fromstring(r.text)
17
  data = []
@@ -20,19 +23,62 @@ def fetch_bank_data():
20
  "Валюта": cube.attrib["currency"],
21
  "Курс к EUR": float(cube.attrib["rate"])
22
  })
23
- df = pd.DataFrame(data)
24
  return "✅ Данные успешно загружены (ECB)", df
25
  except Exception as e:
26
  return f"❌ Ошибка: {e}", pd.DataFrame()
27
 
28
- with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data Viewer") as demo:
29
- gr.Markdown("## 🏦 Курсы валют от Европейского Центробанка (ECB)")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  with gr.Row():
31
  with gr.Column(scale=1):
32
- btn = gr.Button("🔄 Загрузить данные", variant="primary")
 
 
33
  with gr.Column(scale=3):
34
  status = gr.Textbox(label="Статус", value="Ожидание...")
35
- table = gr.DataFrame(label="💶 Курсы валют", interactive=False)
36
- btn.click(fetch_bank_data, None, [status, table], show_progress=True)
 
 
 
 
 
 
37
 
38
  demo.queue(max_size=32).launch(server_name="0.0.0.0", server_port=7860)
 
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
5
+ from io import BytesIO
6
+ from datetime import datetime
7
 
8
+ # --------------------------------------------------------------
9
+ # ⚙️ Загрузка открытых банковских данных
10
+ # --------------------------------------------------------------
11
  def fetch_bank_data():
12
+ """Получаем курсы валют от Европейского Центробанка."""
13
  try:
14
  url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
15
  r = requests.get(url, timeout=10)
16
  r.raise_for_status()
17
 
 
18
  from xml.etree import ElementTree as ET
19
  root = ET.fromstring(r.text)
20
  data = []
 
23
  "Валюта": cube.attrib["currency"],
24
  "Курс к EUR": float(cube.attrib["rate"])
25
  })
26
+ df = pd.DataFrame(data).sort_values("Курс к EUR")
27
  return "✅ Данные успешно загружены (ECB)", df
28
  except Exception as e:
29
  return f"❌ Ошибка: {e}", pd.DataFrame()
30
 
31
+ # --------------------------------------------------------------
32
+ # 🧠 Простая LLM-сводка (эмуляция RAG анализа)
33
+ # --------------------------------------------------------------
34
+ def analyze_data(df: pd.DataFrame):
35
+ if df.empty:
36
+ return "⚠️ Нет данных для анализа."
37
+ strongest = df.iloc[-1]
38
+ weakest = df.iloc[0]
39
+ return (
40
+ f"📊 Сводка валют:\n\n"
41
+ f"• Самая сильная валюта к EUR — **{strongest['Валюта']} ({strongest['Курс к EUR']:.2f})**\n"
42
+ f"• Самая слабая валюта к EUR — **{weakest['Валюта']} ({weakest['Курс к EUR']:.2f})**\n"
43
+ f"• Средний курс по всем валютам: **{df['Курс к EUR'].mean():.2f}**"
44
+ )
45
+
46
+ # --------------------------------------------------------------
47
+ # 📤 Экспорт данных в Excel для Power BI
48
+ # --------------------------------------------------------------
49
+ def export_to_excel(df: pd.DataFrame):
50
+ if df.empty:
51
+ return None, "⚠️ Нет данных для экспорта."
52
+ output = BytesIO()
53
+ df.to_excel(output, index=False, sheet_name="Rates")
54
+ output.seek(0)
55
+ filename = f"bank_report_{datetime.now().strftime('%Y%m%d')}.xlsx"
56
+ return output, f"✅ Отчёт '{filename}' готов для Power BI."
57
+
58
+ # --------------------------------------------------------------
59
+ # 🧱 Интерфейс Gradio
60
+ # --------------------------------------------------------------
61
+ with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data RAG Prototype") as demo:
62
+ gr.Markdown(
63
+ "## 🏦 Banking Data RAG Prototype\n"
64
+ "Загружай открытые банковские данные, анализируй их и выгружай отчёт для Power BI.\n"
65
+ "_Первая версия RAG-анализа без внешнего LLM-API._"
66
+ )
67
+
68
  with gr.Row():
69
  with gr.Column(scale=1):
70
+ btn_load = gr.Button("🔄 Загрузить данные", variant="primary")
71
+ btn_analyze = gr.Button("🧠 Проанализировать")
72
+ btn_export = gr.Button("📤 Экспорт в Power BI (Excel)")
73
  with gr.Column(scale=3):
74
  status = gr.Textbox(label="Статус", value="Ожидание...")
75
+ summary = gr.Textbox(label="Сводка анализа", lines=6)
76
+ table = gr.DataFrame(label="📋 Курсы валют", interactive=False)
77
+ file_out = gr.File(label="Скачать отчёт", interactive=False)
78
+
79
+ # Логика кнопок
80
+ btn_load.click(fetch_bank_data, None, [status, table], show_progress=True)
81
+ btn_analyze.click(lambda df: analyze_data(df), [table], [summary])
82
+ btn_export.click(export_to_excel, [table], [file_out, status])
83
 
84
  demo.queue(max_size=32).launch(server_name="0.0.0.0", server_port=7860)