bonnarts/application
0
1# -*- coding: utf-8 -*-2"""3Created on Fri Jan 13 15:43:23 20234 5@author: Bonn_arts6"""7import streamlit as st8import requests9import numpy as np10import pickle11import streamlit as st12import matplotlib.pyplot as plt13import pandas as pd14 15 16st.title('Malaria prediction web app')17 18def malaria_prediction(input_list):19 20 21 22 input_data_as_numpy_array = np.asarray(input_list)23 24 input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)25 26 27 prediction = loaded_model.predict(input_data_reshaped)28 print(prediction)29 30 if (prediction[0]==1):31 return'outbreak; control measures: vector control, case management and vaccines'32 else:33 return 'medium threat; control measures: antimalaria, IRS, ITN'34# Get API key35API_KEY = 'fbfcc4956a215ab7ad52a0368b7221bb'36BASE_URL = 'https://api.openweathermap.org/data/2.5/weather?'37 38 39# Get county names40county = ["Mombasa", "Kwale", "Kilifi", "Lamu", "Garissa", "Wajir", "Mandera", "Marsabit",41 "Isiolo", "Meru", "Embu", "Kitui", "Machakos", "Makueni", "Nyandarua", "Nyeri", "Kirinyaga",42 "Murang'a", "Kiambu", "West Pokot", "Samburu", "Uasin Gishu", "Elgeyo Marakwet",43 "Nandi", "Baringo", "Laikipia", "Nakuru", "Narok", "Kajiado", "Kericho", "Bomet", "Kakamega", "Vihiga",44 "Bungoma", "Busia", "Siaya", "Kisumu", "Homa Bay", "Migori", "Kisii", "Nyamira","Nairobi"]45 46 47 48# Create a function to make API calls49def get_weather_data(api_key, location):50 url = BASE_URL+ 'appid=' + API_KEY + '&q='+ county51 response = requests.get(url)52 return response.json()53county = st.selectbox("Select a county", county)54 55 56 57 58loaded_model = pickle.load(open('trained_model.sav', 'rb'))59 60 61def main():62 st.sidebar.title("Additional Inputs")63 # Extract weather information64 data = get_weather_data(API_KEY, county)65 rainfall = data["rain"]["3h"] if "rain" in data else 066 min_temp= data["main"]["temp_min"]67 max_temp= data["main"]["temp_max"]68 humidity1 = data["main"]["humidity"]69 humidity2 = data["main"]["humidity"]70 71 72 73 # Display weather information74 st.write(f"Min-temperature: {min_temp}")75 st.write(f"Max-temperature: {max_temp}")76 st.write(f"Relative humidity 0800hrs: {humidity1}")77 st.write(f"Relative humidity 1400hrs: {humidity2}")78 st.write(f"Rainfall: {rainfall}")79 mosqp = st.sidebar.number_input('Mosquito population',min_value=0, max_value=100000)80 case = st.sidebar.number_input('Number of cases',min_value=0, max_value=100000)81 if st.sidebar.button('Submit'):82 if not mosqp:83 st.error("mosquito population required.")84 st.error("malaria cases required.")85 else:86 st.warning('succesful')87 88 columns = ['rainfall','min_temp', 'max_temp', 'humidity1', 'humidity2', 'mosqp','case']89 df = pd.DataFrame(columns=columns)90 df.loc[0] = [data["rain"]["3h"] if "rain" in data else 0,data['main']['temp_min'], data['main']['temp_max'], data['main']['humidity'], data['main']['humidity'],mosqp,case]91 92 93 input_list =df94 95 diagnosis = ""96 97 if st.button("Predict"):98 if all(input_list):99 # Pass the input values to your model and get the output100 diagnosis = malaria_prediction(input_list)101 st.success(diagnosis)102 st.bar_chart([rainfall,min_temp,max_temp,humidity1,humidity2,mosqp,case])103 else:104 st.warning("Please fill in all the inputs")105 st.map(zoom=6)106 st.set_option('deprecation.showPyplotGlobalUse', False)107 108 109 110if __name__=='__main__':111 main()