abdouramandalil's picture
Create app.py
0625161
import streamlit as st
import pandas as pd
import numpy as np
import pickle
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
import base64
import seaborn as sns
st.write("""
# Penguin Prediction App
This app predicts the **Palmer Penguin** species!
Data obtained from the [palmerpenguins library](https://github.com/allisonhorst/palmerpenguins) in R by Allison Horst.
""")
st.sidebar.title('File Upload Features')
# Collects user input features into dataframe
uploaded_file = st.sidebar.file_uploader("Upload your input CSV file", type=["csv"])
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
st.dataframe(df)
le = LabelEncoder()
df.sex = le.fit_transform(df.sex)
load_clf = pickle.load(open('penguins_clf.pkl', 'rb'))
prediction = load_clf.predict(df)
prediction_proba = load_clf.predict_proba(df)
st.subheader('Prediction')
penguins_species = np.array(['Adelie','Chinstrap','Gentoo'])
pp = pd.DataFrame(penguins_species[prediction],columns=["prediction"])
st.write(pp)
st.subheader('Prediction Probability')
st.dataframe(prediction_proba)
ndf = pd.concat([df,pp],axis=1)
st.write(ndf)
plot = sns.barplot(x ="bill_length_mm",y="bill_depth_mm",data = df )
st.pyplot(plot)
def filedownload(df):
csv = df.to_csv(index=False)
b64 = base64.b64encode(csv.encode()).decode() # strings <-> bytes conversions
href = f'<a href="data:file/csv;base64,{b64}" download="penguins_predictions.csv">Download CSV File</a>'
return href
st.markdown(filedownload(ndf), unsafe_allow_html=True)
else:
st.sidebar.title("Manual Feature input")
def user_input_features():
sex = st.sidebar.selectbox('Sex',('male','female'))
bill_length_mm = st.sidebar.slider('Bill length (mm)', 32.1,59.6,43.9)
bill_depth_mm = st.sidebar.slider('Bill depth (mm)', 13.1,21.5,17.2)
flipper_length_mm = st.sidebar.slider('Flipper length (mm)', 172.0,231.0,201.0)
body_mass_g = st.sidebar.slider('Body mass (g)', 2700.0,6300.0,4207.0)
data = {
'bill_length_mm': bill_length_mm,
'bill_depth_mm': bill_depth_mm,
'flipper_length_mm': flipper_length_mm,
'body_mass_g': body_mass_g,
'sex': sex}
features = pd.DataFrame(data, index=[0])
return features
input_df = user_input_features()
st.subheader('User Input features')
st.write('Awaiting CSV file to be uploaded. Currently using example input parameters (shown below).')
st.write(input_df)
le = LabelEncoder()
input_df.sex = le.fit_transform(input_df.sex)
load_clf = pickle.load(open('penguins_clf.pkl', 'rb'))
prediction = load_clf.predict(input_df)
prediction_proba = load_clf.predict_proba(input_df)
st.subheader('Prediction')
penguins_species = np.array(['Adelie','Chinstrap','Gentoo'])
st.write(penguins_species[prediction])
st.subheader('Prediction Probability')
st.write(prediction_proba)