Introducere

Formarea unui învățare automată pentru predicție este un obiectiv comun. Dar dacă doriți să mergeți mai departe și să creați o aplicație web care acceptă intrările utilizatorilor și prezice o clasă de ieșire pe baza acestora? Dacă sunteți gata să creați o aplicație web simplă, Streamlit este o opțiune bună.

Ce este Streamlit?

Streamlit este un cadru open-source bazat pe Python pentru crearea de vizualizare și creare de aplicații web de învățare automată și știință a datelor care pot fi partajate. Aplicațiile web pot fi implementate instantaneu și, deoarece nu este necesară nicio experiență front-end pentru utilizarea Streamlit, este potrivită pentru oamenii de știință de date începători.

Antrenarea modelului

Când utilizați un model de învățare automată în fundalul aplicației dvs. web, este important să îl încărcați în IDE (acoperit în secțiunile de mai jos) pentru utilizare. Consultați secțiunile finale ale notebook-ului Colab legate „aici”, care demonstrează procesul de salvare și încărcare a modelului dumneavoastră.

Aș recomanda ca orice formare și testare cu modelul de învățare automată să se poată face în Google Colab, deoarece oferă un GPU pentru a accelera procesul de instruire.

În plus, prefer să construiesc aplicația web cu toate comenzile Streamlit într-un mediu IDE și virtual. Cu toate acestea, puteți utiliza direct Streamlit și puteți lansa aplicații în blocnotesul Google Colab. Iată un „articol” care explică acest proces.

Implementarea Streamlit

Vom ajunge acum la partea de implementare, care este simplă, dar poate avea unele nuanțe.

Această secțiune este împărțită în șase părți:

  • Crearea unui mediu virtual în Anaconda
  • Instalarea pachetelor
  • Rularea aplicației web local
  • Utilizarea funcțiilor Streamlit
  • Implementarea fișierelor în GitHub
  • Implementarea aplicației web pe Streamlit Community Cloud

Crearea unui mediu virtual în Anaconda

Crearea unui mediu virtual în Anaconda ne oferă control deplin asupra mediului, iar toate dependențele și pachetele se aplică doar acelui mediu specific. Ajută la separarea diferitelor proiecte unele de altele.

În acest tutorial, vom folosi Anaconda Navigator, o interfață grafică de utilizator care permite lansarea aplicațiilor și gestionarea cu ușurință a aplicațiilor conda. Dacă nu ați instalat deja Anaconda Navigator, puteți învăța să faceți acest lucru „aici”.

Pentru a crea un mediu virtual, puteți rula următoarele în terminalul Anaconda Prompt:conda create -n test_env python=3.10 anaconda

Linia de mai sus creează un mediu virtual cu numele test_env și versiunea python 3.10.

Acum, pentru a activa mediul, rulați: conda activate test_env

Instalarea dependențelor necesare

Să deschidem Anaconda Navigator; puteți face acest lucru tastând anaconda-navigatorîn Anaconda Prompt, apoi apăsând enter pentru a deschide aplicația.

Înainte de a instala orice pachet, mergeți la fila Medii din Navigator:

Pentru a deschide terminalul mediului, faceți clic pe butonul de redare de lângă numele mediului, apoi apăsați „Deschideți terminalul”.

Să trecem peste dependențele necesare pentru un exemplu de aplicație web. Să presupunem că folosesc clasificatorul XGBoost în modelul meu. Vă rugăm să rețineți că acest lucru poate varia pentru proiectele dvs., deoarece este posibil să utilizați un număr diferit de pachete.

  • numpy: pip install numpy==1.25.1
  • pandas:pip install pandas==2.0.3
  • streamlit: pip install streamlit==1.24.1
  • scipy: pip install scipy==1.11.1
  • scikit-learn:pip install scikit-learn==1.3.0
  • xgboost: pip install xgboost==1.7.6
  • matplotlib:pip install matplotlib==3.7.2

Nu este nevoie să instalați bibliotecile cu versiunile lor (puteți doar să tastați pip install numpy, panda etc.), dar dacă întâmpinați probleme legate de compatibilitatea dintre biblioteci, este pentru că o versiune a unei biblioteci nu este suportată de alta. bibliotecă. În plus, dacă utilizați Tensorflow pentru proiectul dvs., nu trebuie să instalați Keras separat, deoarece Keras face parte din platforma Tensorflow 2.0.

De asemenea, vom avea nevoie de un editor pentru a ne crea aplicațiile și de un browser pentru a rula aplicația web. Anaconda vine cu mai multe IDE-uri instalate (Jupyter Notebook, Spyder, VS Code), iar în acest articol, vom folosi Spyder. Un IDE ajută la depanarea codului și ajută la simplificarea sarcinilor care necesită timp, cum ar fi completarea codului.

Pentru a instala Spyder, mergeți la pagina de pornire a Anaconda Navigator:

  1. Faceți clic pe butonul „Instalare” pentru a iniția procesul de instalare.
  2. Așteptați cu răbdare câteva minute până la finalizarea instalării.
  3. Odată ce instalarea este finalizată, faceți clic pe butonul „Launch” pentru a deschide Spyder IDE
  4. În meniul Fișier din Spyder, puteți salva fișierul Python în descărcări.

Rularea aplicației web local

Înainte de a începe cu oricare dintre funcțiile Streamlit, să vedem cum putem rula aplicația web local (acest lucru va ajuta pentru următoarea secțiune). Este întotdeauna o practică bună să testați modelul la nivel local pentru a rezolva orice problemă înainte de a-l implementa în Streamlit Community Cloud.

Mai întâi, pentru a vedea un exemplu de model Streamlit local, tastați „streamlit hello” și apăsați Enter. Ar trebui să vedeți o pagină „Bun venit” cu diferite secțiuni de informații pe părțile laterale.

În plus, pentru a rula propriul fișier Python, deschideți terminalul mediului ca înainte și rulați:

streamlit run (calea absolută către fișierul dvs. Python)

De exemplu, dacă calea absolută către fișierul dvs. Python este „C:\Users\Downloads\app.py”veți rula

streamlit run C:\Utilizatori\Descărcări\app.py”

Încă nu apare nimic, deoarece încă nu există cod în fișierul Python.

Noțiuni introductive despre funcțiile Streamlit

Această secțiune va analiza pe scurt câteva dintre funcțiile Streamlit utilizate; nu ezitați să aflați mai multe dintre funcțiile avansate Streamlit.

  1. Elemente de text

Streamlit oferă o varietate de caracteristici în ceea ce privește textul - anteturi, subtitluri, text simplu etc. Să vedem cum putem încorpora unele dintre acestea într-un fragment de cod de bază:

import streamlit as st

# This creates a header 
st.header("Interactive Diabetes Web Application")

# Some plain text
st.write("Enter some values")

Când rulați local, aceasta va afișa:

O notă rapidă despre fluxul de dezvoltare: de fiecare dată când modificați codul scriptului dvs. Python și îl executați în IDE-ul dvs., nu există nicio redeschidere din nou terminalul și lipiți calea absolută pentru a vedea modificările reflectate. În schimb, puteți găsi o opțiune în colțul din dreapta sus al aplicației dvs. web locale Streamlit pentru a rula din nou fișierul Python. Va fi afișat astfel:

2. Introducerea utilizatorului

Pentru a permite unui utilizator să introducă valori în aplicația web, Streamlit oferă text de intrare, glisoare de introducere, casete de selectare, casete de selectare, încărcări de fișiere și multe altele.

Să aruncăm o privire la câteva dintre caracteristici:

import streamlit as st

# slider input value from 0 to 100
Age = st.slider("Age", 0, 100)

st.write("Selected age is " + str(Age))

# select box input
Question = st.selectbox("Select Answer", ("Yes", "No"), key = "answer")
if (Question == "Yes"):
    st.write("You selected " + Question)

elif (Question == "No"):
    st.write("You selected " + Question)

# checkbox input
value = ''
checkbox_one = st.checkbox("Did Excercise")
checkbox_two = st.checkbox("Did not Exercise")

if (checkbox_one):
   value = "Did Excercise"
      
elif (checkbox_two):
   value = "Did not Excercise"
      
st.write(f"You {value}")

Aplicația web va afișa acum:

3. Pagini multiple

Crearea mai multor pagini pentru informații suplimentare este o altă modalitate de a îmbunătăți aspectul aplicației dvs. web.

Pentru a face acest lucru:

import streamlit as st

# split the code into different functions for each page

def main():

    # option to choose between 
    select_page = st.sidebar.selectbox("Prediction or About", ("Predict", "About"), key = "Select")
    
    # if user selects Predict page
    if (select_page == "Predict"):
        prediction_page()
    
    # if user selects About page
    elif (select_page == "About"):
        about()


# First page - prediction page
def prediction_page():
    st.header("Interactive Diabetes Web Application")

    Age = st.slider("Age", 0, 100)

    st.write("Selected age is " + str(Age))

    Question = st.selectbox("Select Answer", ("Yes", "No"), key = "answer")
    if (Question == "Yes"):
        st.write("You selected " + Question)

    elif (Question == "No"):
        st.write("You selected " + Question)

    value = ''
    checkbox_one = st.checkbox("Did Excercise")
    checkbox_two = st.checkbox("Did not Exercise")

    if (checkbox_one):
      value = "Did Excercise"
      
    else:
      value = "Did not Excercise"
      
    st.write(f"You {value}")
    
    
# Second page - about page
def about():
    st.header("About this model")


main()

Acum, aplicația web are două pagini — Predicție și Despre. Iată acum aplicația web:

4. Elementele diagramei

În știința datelor, este esențial să aveți grafice pentru a prezenta relațiile dintre valorile de intrare sau chiar complexitatea setului de date cu care lucrați.

Există multe tipuri de „grafice” în biblioteca Streamlit, dar haideți să vedem cum să creați o diagramă cu linii simple.

import streamlit as st
import pandas as pd
import numpy as np

# In the About Section
def about():
    st.header("About this model")
    
    df = pd.DataFrame(
        np.random.randn(16, 3),
        columns = ['Type 1', 'Type 2', 'Gestational']
        
        )
    
    st.line_chart(df)

Creăm un grafic de linii cu trei intrări și lățimea de 16 unități. Observați că graficul cu linii este randomizat.

Acum, să trecem la procesul de integrare a modelului de învățare automată instruit în aplicația web Streamlit.

Dacă ați examinat fișierul Colab (legat în secțiunea Training the Model), am salvat modelul antrenat pentru a-l putea folosi pentru aplicația noastră web. Acum, pentru a încărca modelul de învățare automată în IDE:

# Get the current directory of the file (xgb_model)
current_directory = os.path.dirname(os.path.realpath(__file__))
# Construct the relative path to the model file within the app's directory
model_filename = "xgb_model.pkl"
model_path = os.path.join(current_directory, model_filename)



# Load the model
with open(model_path, 'rb') as f:
    trained_model = pickle.load(f)

# Continue with the rest of the code for the web app

# def main():

# def prediction_page():

# def about():

# Now, we can trained_model.predict() to predict the output class based on inputs to the model.

Dar ce zici dacă vrei să salvezi un model Keras CNN, cu toate straturile, greutățile, optimizatorii etc.? Un format comun de salvare este standardul HDF5 (Format de date ierarhice), furnizat de Keras. Citiți mai multe despre el „aici”:

# Save the entire model in HDF5 file
model.save('my_model.h5')

# And then later when opening it in the IDE

current_directory = os.path.dirname(os.path.realpath(__file__))
file_path = os.path.join(current_directory, "fashion_mnist_cnn.h5")


print("File path:", file_path)
print("File exists?", os.path.exists(file_path))

try:
    model = load_model(file_path)  # loading the model
    print("Model loaded successfully.")
except Exception as e:
    print("Error loading model:", e)

Implementarea fișierelor în GitHub

Streamlit Community Cloud lansează aplicații direct din depozitul dvs. GitHub, așa că este foarte important să încărcați corect fișierele.

În primul rând, să ne uităm la toate fișierele pe care trebuie să le includă în depozitul nostru GitHub.

1. app.py (sau fișierul .py cu implementările dvs. Streamlit, dacă este numit diferit)

2.model.pkl(modelul de învățare automată instruit)

3. requirements.txt (necesar pentru ca Streamlit Community Cloud să descarce pachetele necesare)

Este recomandabil ca fișierele să fie stocate într-un folder din descărcări.

Înainte de a implementa toate fișierele în GitHub, rulați modelul local pentru a verifica dacă aspectul este așa cum este prevăzut.

Acum, să creăm un fișier requirements.txt. Cu toate acestea, există o mică nuanță:

  • Utilizarea comenzii rapide pip freeze › requirements.txt este o modalitate validă de descărcare a tuturor dependențelor, dar aș sfătui să tastați manual dependențele necesare într-un fișier .txt (oricum nu este atât de mult).

Utilizarea „pip freeze” a prezentat anumite probleme, deoarece este posibil să nu genereze un fișier .txt care să conțină toate dependențele necesare. Acest lucru poate duce la erori la implementarea acestuia în Streamlit Community Cloud.

Un exemplu de requirements.txt pentru un model de învățare automată ar fi:

  • numpy==1,25,1
  • streamlit==1,24,1
  • scipy==1.11.1
  • scikit-learn==1.3.0
  • numpy==1,25,1
  • panda==2.0.3
  • xgboost==1.7.6
  • matplotlib== 3.7.2

La sfârșit, așa poate arăta folderul înainte de a-l verifica în GitHub:

Și un exemplu de depozit GitHub:

Implementarea aplicației web pe Streamlit Community Cloud

Implementarea aplicațiilor web pe Streamlit este mai ușoară în comparație cu alte instrumente de implementare a aplicațiilor; Streamlit citește fișierele din depozitul dvs., descarcă toate pachetele necesare din fișierul requirements.txt și creează aplicația din fișierul python.

În plus, Streamlit Community Cloud acceptă dezvoltarea continuă, permițând actualizări automate ale aplicației dvs. web ori de câte ori introduceți orice modificări în GitHub.

Să vedem pașii pentru a vă implementa aplicația pe Streamlit Community Cloud.

  1. Creați un cont pe Streamlit și faceți clic pe butonul „Aplicație nouă”:

2. După ce ați selectat butonul Nouă aplicație, aveți acum opțiunea de a vă implementa aplicația. Puteți fie să utilizați selectorul interactiv, fie să inserați adresa URL directă a fișierului dvs. Python în GitHub. Iată un exemplu:

Dacă aplicația web întâlnește erori în timpul procesului de construire, Streamlit oferă o documentație cuprinzătoare pentru a evidenția problema în implementare. De obicei, acest lucru are de-a face cu erorile din fișierul requirements.txt.

Concluzie:

În acest articol, am învățat cum să creăm un mediu virtual în Anaconda, să instalăm dependențele necesare, să scriem comenzi de bază Streamlit și să-l implementăm în GitHub și Streamlit.

De asemenea, acum aveți o înțelegere mai profundă a tipului de comenzi care ar putea fi necesare pentru o aplicație Data Science.

Cea mai bună modalitate de a vă familiariza cu Streamlit implică obținerea de seturi de date de pe platforme precum Kaggle, construirea de modele de învățare automată și crearea de vizualizări atrăgătoare folosind comenzile Streamlit.

Referinte:

Rashid, Ahlam (2020), „Setul de date despre diabet”, Mendeley Data, V1, doi: 10.17632/wj9rwkp9c2.1

Siddhardhan (2021), Implementați modele de învățare automată folosind Streamlit în Python [Video]. Youtube. „https://www.youtube.com/watch?v=WLwjvWq0GWA&t=1084s”