Spaces:
Sleeping
Sleeping
File size: 5,486 Bytes
40cbaf1 0a5028c 540546f 0a5028c 540546f 50e2ea3 540546f 415a9d1 540546f 415a9d1 540546f 415a9d1 540546f 415a9d1 540546f 415a9d1 |
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 |
import streamlit as st
import pandas as pd
import plotly.express as px
import matplotlib.pyplot as plt
from datetime import datetime
# Function to load patient data
def load_data():
return pd.read_csv('patient_data.csv')
# Function to save patient data
def save_data(df):
df.to_csv('patient_data_extended.csv', index=False)
# Load the existing data
df = load_data()
# Sidebar for navigation
st.sidebar.title("Navigation")
options = ["View Patient Data", "Add New Patient", "Add New Visit"]
choice = st.sidebar.selectbox("Choose an option", options)
if choice == "View Patient Data":
# Sidebar for Patient Selection
st.sidebar.header('Select Patient')
patient_id = st.sidebar.selectbox('Patient ID', df['patient_id'].unique())
# Filter Data for Selected Patient
patient_data = df[df['patient_id'] == patient_id]
# Display Patient Profile
st.header('Patient Profile')
st.write(f"Name: {patient_data['name'].values[0]}")
st.write(f"Age: {patient_data['age'].values[0]}")
st.write(f"Gender: {patient_data['gender'].values[0]}")
st.write(f"Medical History: {patient_data['medical_history'].values[0]}")
# Visualization of Vital Signs
st.header('Vital Signs Over Time')
# Line Chart for Heart Rate
fig = px.line(patient_data, x='date', y='heart_rate', title='Heart Rate Over Time')
st.plotly_chart(fig)
# Line Chart for Blood Pressure
fig = px.line(patient_data, x='date', y='blood_pressure', title='Blood Pressure Over Time')
st.plotly_chart(fig)
# Line Chart for Blood Glucose
fig = px.line(patient_data, x='date', y='blood_glucose', title='Blood Glucose Over Time')
st.plotly_chart(fig)
# Dropdown for selecting specific visit details
st.header('Previous Visit Details')
selected_date = st.selectbox('Select Visit Date', patient_data['date'].unique())
selected_visit = patient_data[patient_data['date'] == selected_date]
st.write(f"**Visit Date:** {selected_date}")
st.write(f"Heart Rate: {selected_visit['heart_rate'].values[0]}")
st.write(f"Blood Pressure: {selected_visit['blood_pressure'].values[0]}")
st.write(f"Blood Glucose: {selected_visit['blood_glucose'].values[0]}")
# Alerts and Notifications
st.header('Alerts')
if selected_visit['heart_rate'].values[0] > 100:
st.error('High heart rate detected!')
if selected_visit['blood_pressure'].values[0] > 140:
st.error('High blood pressure detected!')
# Download Button for Patient Data
st.download_button(
label="Download Patient Data as CSV",
data=patient_data.to_csv().encode('utf-8'),
file_name=f'patient_{patient_id}_data.csv',
mime='text/csv',
)
elif choice == "Add New Patient":
st.header("Add New Patient")
# Input fields for new patient data
new_patient_id = st.number_input("Patient ID", min_value=0, step=1)
new_name = st.text_input("Name")
new_age = st.number_input("Age", min_value=0, step=1)
new_gender = st.selectbox("Gender", ["Male", "Female"])
new_medical_history = st.text_area("Medical History")
if st.button("Add Patient"):
new_patient_data = {
'patient_id': new_patient_id,
'name': new_name,
'age': new_age,
'gender': new_gender,
'medical_history': new_medical_history,
'date': None,
'heart_rate': None,
'blood_pressure': None,
'blood_glucose': None
}
df = pd.concat([df, pd.DataFrame([new_patient_data])], ignore_index=True)
save_data(df)
st.success("New patient added successfully!")
elif choice == "Add New Visit":
st.header("Add New Visit")
# Input fields for adding a new visit
patient_id = st.number_input("Patient ID", min_value=0, step=1)
visit_date = st.date_input("Date of Visit", value=datetime.today())
medical_complaints = st.text_area("Medical Complaints")
symptoms = st.text_area("Symptoms")
physical_examination = st.text_area("Physical Examination")
diagnosis = st.text_area("Diagnosis")
heart_rate = st.number_input("Heart Rate", min_value=0)
blood_pressure = st.number_input("Blood Pressure", min_value=0)
temperature = st.number_input("Temperature", min_value=0)
glucose = st.number_input("Blood Glucose", min_value=0)
extra_notes = st.text_area("Extra Notes")
treatment = st.text_area("Treatment")
if st.button("Add Visit"):
new_visit_data = {
'patient_id': patient_id,
'name': df[df['patient_id'] == patient_id]['name'].values[0],
'age': df[df['patient_id'] == patient_id]['age'].values[0],
'gender': df[df['patient_id'] == patient_id]['gender'].values[0],
'medical_history': df[df['patient_id'] == patient_id]['medical_history'].values[0],
'date': visit_date,
'heart_rate': heart_rate,
'blood_pressure': blood_pressure,
'blood_glucose': glucose,
'temperature': temperature,
'medical_complaints': medical_complaints,
'symptoms': symptoms,
'physical_examination': physical_examination,
'diagnosis': diagnosis,
'extra_notes': extra_notes,
'treatment': treatment
}
df = pd.concat([df, pd.DataFrame([new_visit_data])], ignore_index=True)
save_data(df)
st.success("New visit added successfully!")
|