# First, install required packages #!pip install gradio pandas numpy scikit-learn import gradio as gr import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler import json from datetime import datetime, timedelta class SimplePrecisionMedicineSystem: def __init__(self): self.scaler = StandardScaler() def calculate_risk_score(self, genetic_score, lifestyle_score, age, symptom_severity): """Calculate overall risk score""" try: # Normalize age to 0-1 range (assuming max age of 100) age_normalized = age / 100.0 # Weight factors (can be adjusted) weights = { 'genetic': 0.4, 'lifestyle': 0.3, 'age': 0.2, 'symptoms': 0.1 } # Calculate weighted risk score risk_score = ( genetic_score * weights['genetic'] + (1 - lifestyle_score) * weights['lifestyle'] + # Invert lifestyle score age_normalized * weights['age'] + (symptom_severity / 10) * weights['symptoms'] # Normalize to 0-1 ) return round(risk_score, 2) except Exception as e: print(f"Error in risk calculation: {str(e)}") return 0.5 # Return middle value if error occurs def get_treatment_recommendation(self, risk_score, current_medication, symptom_severity): """Generate treatment recommendations based on risk score and symptoms""" try: base_recommendations = [] # Risk-based recommendations if risk_score < 0.3: base_recommendations.append("Low risk profile - Continue monitoring") elif risk_score < 0.6: base_recommendations.append("Moderate risk - Regular check-ups recommended") else: base_recommendations.append("High risk - Intensive monitoring required") # Symptom-based recommendations if symptom_severity <= 3: base_recommendations.append("Mild symptoms - Maintain current treatment") elif symptom_severity <= 7: base_recommendations.append("Moderate symptoms - Consider treatment adjustment") else: base_recommendations.append("Severe symptoms - Immediate medical review required") # Medication-based recommendations if current_medication.lower().strip() in ['none', 'no', '']: if risk_score > 0.5: base_recommendations.append("Consider initiating preventive treatment") else: base_recommendations.append("Review current medications at next appointment") return base_recommendations except Exception as e: print(f"Error in treatment recommendation: {str(e)}") return ["Unable to generate recommendations due to error"] def generate_report(self, patient_data): """Generate patient report""" try: # Calculate risk score risk_score = self.calculate_risk_score( patient_data['genetic_score'], patient_data['lifestyle_score'], patient_data['age'], patient_data['symptom_severity'] ) # Get treatment recommendations recommendations = self.get_treatment_recommendation( risk_score, patient_data['current_medication'], patient_data['symptom_severity'] ) # Create report report = { "Patient Information": { "Age": patient_data['age'], "Gender": patient_data['gender'], "Current Medications": patient_data['current_medication'] }, "Risk Assessment": { "Overall Risk Score": risk_score, "Risk Category": "High" if risk_score > 0.6 else "Moderate" if risk_score > 0.3 else "Low", "Genetic Risk": patient_data['genetic_score'], "Lifestyle Score": patient_data['lifestyle_score'] }, "Current Status": { "Symptom Severity": f"{patient_data['symptom_severity']}/10", }, "Recommendations": recommendations, "Next Steps": { "Follow-up": "Within 1 week" if risk_score > 0.6 else "Within 1 month" if risk_score > 0.3 else "Within 3 months", "Monitoring": "Daily" if patient_data['symptom_severity'] > 7 else "Weekly" if patient_data['symptom_severity'] > 4 else "Monthly" }, "Report Generated": datetime.now().strftime("%Y-%m-%d %H:%M:%S") } return json.dumps(report, indent=2) except Exception as e: print(f"Error in report generation: {str(e)}") return json.dumps({"error": "Failed to generate report", "message": str(e)}) def create_gradio_interface(): """Create Gradio interface""" system = SimplePrecisionMedicineSystem() def process_patient(age, gender, genetic_score, lifestyle_score, current_medication, symptom_severity): try: # Create patient data dictionary patient_data = { 'age': age, 'gender': gender, 'genetic_score': genetic_score, 'lifestyle_score': lifestyle_score, 'current_medication': current_medication, 'symptom_severity': symptom_severity } # Generate report return system.generate_report(patient_data) except Exception as e: return json.dumps({ "error": "An error occurred while processing the patient data", "details": str(e) }, indent=2) # Create interface iface = gr.Interface( fn=process_patient, inputs=[ gr.Number(label="Age", minimum=0, maximum=120), gr.Dropdown(choices=["Male", "Female", "Other"], label="Gender"), gr.Slider(minimum=0, maximum=1, step=0.1, label="Genetic Risk Score (0-1)"), gr.Slider(minimum=0, maximum=1, step=0.1, label="Lifestyle Score (0-1)"), gr.Textbox(label="Current Medications (comma-separated or 'None')"), gr.Slider(minimum=0, maximum=10, step=1, label="Symptom Severity (0-10)") ], outputs=gr.JSON(label="Medical Report"), title="Precision Medicine System", description="Enter patient information to generate personalized medical recommendations", examples=[ [45, "Female", 0.6, 0.7, "Metformin 500mg, Lisinopril 10mg", 4], [72, "Male", 0.8, 0.4, "Warfarin 5mg, Atorvastatin 40mg", 7], [28, "Other", 0.2, 0.9, "None", 2] ] ) return iface # Launch the interface if __name__ == "__main__": interface = create_gradio_interface() interface.launch()