QAway-to commited on
Commit
2fa5186
·
1 Parent(s): 01961c2

Base app.py interface v2.1

Browse files
Files changed (1) hide show
  1. app.py +33 -19
app.py CHANGED
@@ -2,9 +2,12 @@
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
  def fetch_bank_data():
9
  try:
10
  url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
@@ -13,22 +16,22 @@ def fetch_bank_data():
13
 
14
  from xml.etree import ElementTree as ET
15
  root = ET.fromstring(r.text)
16
- data = []
17
- for cube in root.findall(".//{*}Cube[@currency]"):
18
- data.append({
19
- "Валюта": cube.attrib["currency"],
20
- "Курс к EUR": float(cube.attrib["rate"])
21
- })
22
  df = pd.DataFrame(data).sort_values("Курс к EUR")
23
  return "✅ Данные успешно загружены (ECB)", df
24
  except Exception as e:
25
  return f"❌ Ошибка: {e}", pd.DataFrame()
26
 
 
 
 
27
  def analyze_data(df: pd.DataFrame):
28
  if df.empty:
29
  return "⚠️ Нет данных для анализа."
30
- strongest = df.iloc[-1]
31
- weakest = df.iloc[0]
32
  return (
33
  f"📊 Сводка валют:\n\n"
34
  f"• Самая сильная валюта — **{strongest['Валюта']} ({strongest['Курс к EUR']:.2f})**\n"
@@ -36,17 +39,28 @@ def analyze_data(df: pd.DataFrame):
36
  f"• Средний курс: **{df['Курс к EUR'].mean():.2f}**"
37
  )
38
 
39
- # ✅ исправленный экспорт
 
 
40
  def export_to_excel(df: pd.DataFrame):
41
  if df.empty:
42
  return None, "⚠️ Нет данных для экспорта."
43
- filename = f"bank_report_{datetime.now().strftime('%Y%m%d')}.xlsx"
44
- output = BytesIO()
45
- with pd.ExcelWriter(output, engine="openpyxl") as writer:
46
- df.to_excel(writer, index=False, sheet_name="Rates")
47
- output.seek(0)
48
- # 🟢 Gradio требует именно (file-like, name)
49
- return gr.File.update(value=output, visible=True, label=filename), f"✅ Отчёт '{filename}' готов для Power BI."
 
 
 
 
 
 
 
 
 
50
 
51
  # --------------------------------------------------------------
52
  # 🧱 Интерфейс Gradio
@@ -54,7 +68,7 @@ def export_to_excel(df: pd.DataFrame):
54
  with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data RAG Prototype") as demo:
55
  gr.Markdown(
56
  "## 🏦 Banking Data RAG Prototype\n"
57
- "Загружай открытые банковские данные, анализируй и выгружай отчёт для Power BI.\n"
58
  )
59
 
60
  with gr.Row():
@@ -66,7 +80,7 @@ with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data RAG Prototype")
66
  status = gr.Textbox(label="Статус", value="Ожидание...")
67
  summary = gr.Textbox(label="Сводка анализа", lines=6)
68
  table = gr.DataFrame(label="📋 Курсы валют", interactive=False)
69
- file_out = gr.File(label="Скачать отчёт", visible=False)
70
 
71
  btn_load.click(fetch_bank_data, None, [status, table])
72
  btn_analyze.click(analyze_data, [table], [summary])
 
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
 
5
  from datetime import datetime
6
+ import os
7
 
8
+ # --------------------------------------------------------------
9
+ # ⚙️ Получение данных
10
+ # --------------------------------------------------------------
11
  def fetch_bank_data():
12
  try:
13
  url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
 
16
 
17
  from xml.etree import ElementTree as ET
18
  root = ET.fromstring(r.text)
19
+ data = [
20
+ {"Валюта": c.attrib["currency"], "Курс к EUR": float(c.attrib["rate"])}
21
+ for c in root.findall(".//{*}Cube[@currency]")
22
+ ]
 
 
23
  df = pd.DataFrame(data).sort_values("Курс к EUR")
24
  return "✅ Данные успешно загружены (ECB)", df
25
  except Exception as e:
26
  return f"❌ Ошибка: {e}", pd.DataFrame()
27
 
28
+ # --------------------------------------------------------------
29
+ # 🧠 Анализ данных
30
+ # --------------------------------------------------------------
31
  def analyze_data(df: pd.DataFrame):
32
  if df.empty:
33
  return "⚠️ Нет данных для анализа."
34
+ strongest, weakest = df.iloc[-1], df.iloc[0]
 
35
  return (
36
  f"📊 Сводка валют:\n\n"
37
  f"• Самая сильная валюта — **{strongest['Валюта']} ({strongest['Курс к EUR']:.2f})**\n"
 
39
  f"• Средний курс: **{df['Курс к EUR'].mean():.2f}**"
40
  )
41
 
42
+ # --------------------------------------------------------------
43
+ # 📤 Экспорт в Excel (Power BI)
44
+ # --------------------------------------------------------------
45
  def export_to_excel(df: pd.DataFrame):
46
  if df.empty:
47
  return None, "⚠️ Нет данных для экспорта."
48
+
49
+ filename = f"bank_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
50
+ filepath = os.path.join(os.getcwd(), filename)
51
+
52
+ try:
53
+ with pd.ExcelWriter(filepath, engine="openpyxl") as writer:
54
+ df.to_excel(writer, index=False, sheet_name="Rates")
55
+
56
+ # Добавляем текстовую сводку как отдельный лист
57
+ summary_text = analyze_data(df)
58
+ summary_df = pd.DataFrame({"RAG Summary": [summary_text]})
59
+ summary_df.to_excel(writer, index=False, sheet_name="AI_Analysis")
60
+
61
+ return filepath, f"✅ Отчёт '{filename}' готов. Можно загрузить в Power BI."
62
+ except Exception as e:
63
+ return None, f"❌ Ошибка при создании файла: {e}"
64
 
65
  # --------------------------------------------------------------
66
  # 🧱 Интерфейс Gradio
 
68
  with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Banking Data RAG Prototype") as demo:
69
  gr.Markdown(
70
  "## 🏦 Banking Data RAG Prototype\n"
71
+ "Загружай открытые банковские данные, анализируй их и выгружай отчёт для Power BI."
72
  )
73
 
74
  with gr.Row():
 
80
  status = gr.Textbox(label="Статус", value="Ожидание...")
81
  summary = gr.Textbox(label="Сводка анализа", lines=6)
82
  table = gr.DataFrame(label="📋 Курсы валют", interactive=False)
83
+ file_out = gr.File(label="Скачать отчёт")
84
 
85
  btn_load.click(fetch_bank_data, None, [status, table])
86
  btn_analyze.click(analyze_data, [table], [summary])