File size: 5,925 Bytes
6e219f7 56785c7 6e219f7 31b8dbd 6e219f7 31a92cb 3c5f61b 31a92cb 56785c7 31a92cb 56785c7 09fed9f 552e5da 56785c7 09fed9f 630d112 09fed9f 56785c7 3c5f61b 6e219f7 d7fd570 c6706a3 d7fd570 6e219f7 d7fd570 09fed9f 56785c7 c6706a3 56785c7 630d112 c6706a3 d7fd570 c6706a3 56785c7 c6706a3 d7fd570 6e219f7 31a92cb 3c5f61b 31a92cb 3c5f61b c6706a3 31a92cb 552e5da d7fd570 c6706a3 31a92cb c6706a3 3c5f61b c6706a3 5c54d71 c6706a3 3c5f61b d7fd570 6e219f7 |
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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import streamlit as st
import pandas as pd
from transformers import pipeline
from datetime import datetime
# Oldal konfiguráció
st.set_page_config(page_title="Orvosi Ügyeleti Beosztás Generáló", layout="wide")
st.title("Orvosi Ügyeleti Beosztás Generáló")
st.write("Töltsd fel az orvosi adatokat tartalmazó Excel fájlt, és generálj beosztást az ügyeletekhez!")
# Hugging Face nyelvi modell betöltése
@st.cache_resource
def load_model():
return pipeline("text-generation", model="gpt2")
generator = load_model()
# Függvény a dátumok felismerésére és konverziójára
def parse_date(value):
try:
if any(char.isdigit() for char in value):
return datetime.strptime(value, "%d %B %Y")
parsed_date = datetime.strptime(value, "%d %B")
return parsed_date.replace(year=2025)
except (ValueError, TypeError):
return None
# Adatok tisztítása és egységesítése
def clean_data(df):
st.write("Eredeti oszlopnevek:", df.columns.tolist())
df = df.dropna(how='all') # Üres sorok eltávolítása
df.columns = df.columns.str.strip().str.lower()
st.write("Tisztított oszlopnevek:", df.columns.tolist())
df = df.rename(columns={
"orvos": "Név",
"név": "Név",
"elérhetőség": "Elérhetőség",
"korlátozások": "Korlátozások"
})
if "Név" not in df.columns:
st.warning("A munkalap nem tartalmaz 'Név' oszlopot, ellenőrizze az adatok helyességét!")
df = df.dropna(subset=["Név"], errors='ignore') # Üres név mezők eltávolítása
return df
# Adatok Excel exportálása
@st.cache_data
def convert_to_excel(data):
import io
output = io.BytesIO()
with pd.ExcelWriter(output, engine="openpyxl") as writer:
data.to_excel(writer, index=False)
return output.getvalue()
# Fájl feltöltése
uploaded_file = st.file_uploader("Tölts fel egy Excel fájlt", type=["xlsx"])
if uploaded_file:
try:
# Betöltés Excel fájl
excel_data = pd.ExcelFile(uploaded_file)
sheet_names = excel_data.sheet_names
st.write("Munkalapok a fájlban:")
st.write(sheet_names)
# Minden munkalapot megvizsgál
relevant_data = []
for sheet in sheet_names:
df = excel_data.parse(sheet)
st.write(f"Feldolgozás alatt: {sheet}")
st.write("Adatok előnézete:", df.head())
df = clean_data(df) # Adatok tisztítása és egységesítése
# Ellenőrzés, hogy tartalmaz-e releváns oszlopokat
if any(col in df.columns for col in ["Név", "név", "orvos"]) and "elérhetőség" in df.columns:
st.write(f"Releváns adat található a '{sheet}' munkalapon.")
relevant_data.append(df)
else:
st.warning(f"A '{sheet}' munkalap nem tartalmaz releváns adatokat.")
# Összesített adatok
if relevant_data:
combined_data = pd.concat(relevant_data, ignore_index=True)
st.write("Kombinált adatok:")
st.dataframe(combined_data)
# Dátumok feldolgozása az elérhetőség oszlopban
combined_data["Elérhető napok"] = combined_data["Elérhetőség"].apply(
lambda x: [parse_date(day.strip()) for day in str(x).split(",")] if pd.notna(x) else []
)
combined_data["Korlátozások"] = combined_data["Korlátozások"].apply(
lambda x: x.split(",") if isinstance(x, str) else []
)
# Felhasználói input: dátumok kiválasztása
available_days = st.multiselect(
"Add meg az elérhetőségi dátumokat:",
options=[day.strftime("%Y-%m-%d") for day_list in combined_data["Elérhető napok"] for day in day_list if day]
)
if available_days:
foglalt_napok = {}
beosztas = []
for nap in available_days:
for index, row in combined_data.iterrows():
if nap in [day.strftime("%Y-%m-%d") for day in row["Elérhető napok"] if day]:
korlatozott = any(
foglalt_napok.get(nap) == szemely
for szemely in row["Korlátozások"]
)
if not korlatozott:
foglalt_napok[nap] = row["Név"]
prompt = f"{row['Név']} ügyel {nap}-n, mert "
indoklas = generator(prompt, max_length=50, num_return_sequences=1)[0]["generated_text"]
beosztas.append({
"Nap": nap,
"Orvos": row["Név"],
"Indoklás": indoklas
})
break
# Beosztás megjelenítése
beosztas_df = pd.DataFrame(beosztas)
st.write("Generált Ügyeleti Beosztás:")
st.dataframe(beosztas_df)
# Exportálás
excel_data = convert_to_excel(beosztas_df)
st.download_button(
label="Beosztás letöltése Excelben",
data=excel_data,
file_name="ugyeleti_beosztas.xlsx",
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
else:
st.warning("Kérlek, válaszd ki az elérhetőségi dátumokat.")
else:
st.warning("Nem található releváns adat a munkalapokon.")
except Exception as e:
st.error(f"Hiba történt a fájl feldolgozása során: {e}")
else:
st.info("Tölts fel egy fájlt a kezdéshez.")
|