Hướng dẫn này về thư viện Streamlit nhằm trợ giúp các nhà khoa học dữ liệu hoặc kỹ sư máy học có thể phát triển ứng dụng mà không nhất thiết phải là nhà phát triển web và họ không muốn dành hàng tuần để học cách sử dụng các thư viện khác để xây dựng ứng dụng web.
Streamlit là gì?
Streamlit là một framework mã nguồn mở và miễn phí để nhanh chóng xây dựng và chia sẻ các ứng dụng web khoa học dữ liệu và học máy trên nền tảng web. Đây là một thư viện dựa trên Python được thiết kế dành riêng cho các kỹ sư học máy. Các nhà khoa học dữ liệu hoặc kỹ sư máy học không phải là nhà phát triển web và họ không quan tâm đến việc dành hàng tuần để học cách sử dụng các framework này để xây dựng ứng dụng web. Thay vào đó, họ muốn một công cụ dễ học và dễ sử dụng hơn, miễn là nó có thể hiển thị dữ liệu và thu thập các tham số cần thiết cho mô hình hóa. Streamlit cho phép bạn tạo một ứng dụng có giao diện đẹp mắt chỉ với một vài dòng mã.
Tại sao các nhà khoa học dữ liệu nên sử dụng Streamlit?
Điều tuyệt vời nhất về Streamlit là bạn thậm chí không cần biết kiến thức cơ bản về phát triển web để bắt đầu hoặc tạo ứng dụng web đầu tiên của mình. Vì vậy, nếu bạn là người đam mê khoa học dữ liệu và muốn triển khai các mô hình của mình một cách dễ dàng, nhanh chóng và chỉ với một vài dòng mã thì Streamlit là lựa chọn phù hợp.
Một trong những khía cạnh quan trọng để tạo nên thành công cho một ứng dụng là cung cấp nó với giao diện người dùng trực quan và hiệu quả. Nhiều ứng dụng nặng về dữ liệu hiện đại phải đối mặt với thách thức xây dựng giao diện người dùng hiệu quả một cách nhanh chóng mà không cần thực hiện các bước phức tạp. Streamlit là một thư viện Python mã nguồn mở đầy hứa hẹn, cho phép các nhà phát triển xây dựng giao diện người dùng hấp dẫn ngay lập tức.
Streamlit là cách dễ dàng nhất, đặc biệt đối với những người không có kiến thức về front-end để đưa mã của họ vào ứng dụng web:
- Không yêu cầu kinh nghiệm hoặc kiến thức về front-end (html, js, css).
- Bạn không cần phải mất nhiều ngày hoặc nhiều tháng để tạo một ứng dụng web, bạn có thể tạo một ứng dụng khoa học dữ liệu hoặc học máy thực sự đẹp mắt chỉ trong vài giờ hoặc thậm chí vài phút.
- Nó tương thích với phần lớn các thư viện Python (ví dụ: pandas, matplotlib, seaborn,ploly, Keras, PyTorch, SymPy(latex)).
- Cần ít mã hơn để tạo các ứng dụng web tuyệt vời.
- Bộ nhớ đệm dữ liệu đơn giản hóa và tăng tốc quy trình tính toán.
Cách sử dụng Streamlit
Cài đặt Streamlit
Trên Windows:
- Cài đặt Anaconda và tạo môi trường của bạn
- Mở thiết bị đầu cuối
Nhập lệnh này trong terminal để cài đặt Streamlit:
pip install streamlit
Kiểm tra xem cài đặt có hoạt động không:
streamlit hello
Khi bạn gõ lệnh này trong terminal, trang bên dưới sẽ tự động mở:
Trên macOS:
- Cài đặt pip:
sudo easy_install pip
- Cài đặt pipenv:
pip3 install pipenv
- Tạo môi trường của bạn. Mở thư mục dự án của bạn:
cd project_folder_name
Tạo môi trường pipenv: pipenv shell
- Gõ lệnh này để cài đặt Streamlit:
pip install streamlit
Kiểm tra xem cài đặt có hoạt động không: streamlit hello
Trên Linux:
- Cài đặt pip:
sudo apt-get install python3-pip
- Cài đặt pipenv:
pip3 install pipenv
- Tạo môi trường của bạn. Mở thư mục dự án của bạn:
cd project_folder_name
Tạo môi trường pipenv: pipenv shell
- Gõ lệnh này để cài đặt Streamlit
: pip install streamlit
- Kiểm tra xem cài đặt có hoạt động không:
streamlit hello
Cách chạy mã Streamlit của bạn
streamlit run file_name.py
Các lệnh Streamlit rất dễ viết và dễ hiểu. Chỉ với một lệnh đơn giản, bạn có thể hiển thị văn bản, phương tiện, vật dụng, đồ thị, v.v.
Hiển thị văn bản với Streamlit
Ở phần đầu, chúng ta sẽ xem cách thêm văn bản vào ứng dụng Streamlit của bạn và các lệnh khác nhau để thêm văn bản là gì.
st.write()
: Hàm này được sử dụng để thêm bất kỳ thứ gì vào ứng dụng web, từ chuỗi được định dạng đến biểu đồ trong hình matplotlib, biểu đồ Altair, hình vẽ, khung dữ liệu, mô hình Keras và các biểu đồ khác.
import streamlit as st
st.write("Hello, let's learn how to build a Streamlit app together")
st.title()
: Chức năng này cho phép bạn thêm tiêu đề của ứng dụng. st.header()
: Chức năng này được sử dụng để đặt tiêu đề của một phần. st.markdown()
: Chức năng này được sử dụng để thiết lập đánh dấu một phần. st.subheader()
: Chức năng này được sử dụng để đặt tiêu đề phụ của một phần. st.caption()
: Chức năng này được sử dụng để viết chú thích. st.code()
: Chức năng này được sử dụng để đặt mã. st.latex()
: Hàm này dùng để hiển thị các biểu thức toán học được định dạng là LaTeX.
st.title("This is the app title")
st.header("This is the header")
st.markdown("This is the markdown")
st.subheader("This is the subheader")
st.caption("This is the caption")
st.code("x = 2021")
st.latex(r'''a + a r^1 + a r^2 + a r^3''')
Hiển thị file hình ảnh, video hoặc âm thanh bằng Streamlit
Bạn không thể tìm thấy các chức năng dễ dàng như chức năng Streamlit để hiển thị hình ảnh, video và tệp âm thanh. Hãy cùng xem cách hiển thị media với Streamlit nhé!
st.image()
: Chức năng này được sử dụng để hiển thị hình ảnh. st.audio()
: Chức năng này được sử dụng để hiển thị âm thanh. st.video()
: Chức năng này được sử dụng để hiển thị video.
st.image("kid.jpg")
st.audio("Audio.mp3")
st.video("video.mp4")
Form nhập liệu
Widget là thành phần giao diện người dùng quan trọng nhất. Streamlit có nhiều tiện ích khác nhau cho phép bạn đưa khả năng tương tác trực tiếp vào ứng dụng của mình bằng các nút, thanh trượt, kiểu nhập văn bản, v.v.
st.checkbox()
: Hàm này trả về giá trị Boolean. Khi hộp này được chọn, nó sẽ trả về giá trị Đúng, nếu không thì sẽ trả về giá trị Sai.st.button()
: Chức năng này được sử dụng để hiển thị một widget nút.st.radio()
: Chức năng này được sử dụng để hiển thị tiện ích nút radio.st.selectbox()
: Chức năng này được sử dụng để hiển thị một widget được chọn.st.multiselect()
: Chức năng này được sử dụng để hiển thị một widget nhiều lựa chọn.st.select_slider()
: Chức năng này được sử dụng để hiển thị một widget thanh trượt được chọn.st.slider()
: Chức năng này được sử dụng để hiển thị một widget trượt.
st.checkbox('yes')
st.button('Click')
st.radio('Pick your gender', ['Male', 'Female'])
st.selectbox('Pick your gender', ['Male', 'Female'])
st.multiselect('choose a planet', ['Jupiter', 'Mars', 'Neptune'])
st.select_slider('Pick a mark', ['Bad', 'Good', 'Excellent'])
st.slider('Pick a number', 0, 50)
st.number_input()
: Chức năng này được sử dụng để hiển thị một widget đầu vào số.st.text_input()
: Chức năng này được sử dụng để hiển thị tiện ích nhập văn bản.st.date_input()
: Chức năng này được sử dụng để hiển thị tiện ích nhập ngày để chọn ngày.st.time_input()
: Chức năng này được sử dụng để hiển thị tiện ích nhập thời gian để chọn thời gian.st.text_area()
: Chức năng này được sử dụng để hiển thị tiện ích nhập văn bản có nhiều văn bản dòng.st.file_uploader()
: Chức năng này được sử dụng để hiển thị tiện ích tải lên tệp.st.color_picker()
: Chức năng này được sử dụng để hiển thị tiện ích chọn màu để chọn màu.
st.number_input('Pick a number', 0, 10)
st.text_input('Email address')
st.date_input('Travelling date')
st.time_input('School time')
st.text_area('Description')
st.file_uploader('Upload a photo')
st.color_picker('Choose your favorite color')
Hiển thị tiến trình và trạng thái với Streamlit
Bây giờ chúng ta sẽ xem cách chúng ta có thể thêm thanh tiến trình và các thông báo trạng thái như lỗi và thành công vào ứng dụng của mình.
st.balloons()
: Chức năng này được sử dụng để hiển thị bóng bay cho lễ kỷ niệm.st.progress()
: Chức năng này được sử dụng để hiển thị thanh tiến trình.st.spinner()
: Chức năng này được sử dụng để hiển thị thông báo chờ tạm thời trong quá trình thực thi.
st.balloons()
st.progress(10)
with st.spinner('Wait for it...'):
time.sleep(10)
st.success()
: Chức năng này được sử dụng để hiển thị thông báo thành công.st.error()
: Chức năng này được sử dụng để hiển thị thông báo lỗi.st.warnig()
: Chức năng này được sử dụng để hiển thị thông báo cảnh báo.st.info()
: Chức năng này được sử dụng để hiển thị một thông báo thông tin.st.exception()
: Chức năng này được sử dụng để hiển thị thông báo ngoại lệ.
st.success("You did it !")
st.error("Error")
st.warning("Warning")
st.info("It's easy to build a streamlit app")
st.exception(RuntimeError("RuntimeError exception"))
Thanh bên và vùng chứa
Bạn cũng có thể tạo thanh bên hoặc vùng chứa trên trang để sắp xếp ứng dụng của mình. Hệ thống phân cấp và sắp xếp các trang trên ứng dụng của bạn có thể có tác động lớn đến trải nghiệm người dùng của bạn. Bằng cách sắp xếp nội dung, bạn cho phép khách truy cập hiểu và điều hướng trang web của bạn, điều này giúp họ tìm thấy những gì họ đang tìm kiếm và tăng khả năng họ sẽ quay lại trong tương lai.
Thanh bên
Việc chuyển một phần tử tới st.sidebar()
sẽ khiến phần tử này được ghim sang bên trái, cho phép người dùng tập trung vào nội dung trong ứng dụng của bạn.
Nhưng st.spinner()
và st.echo()
không được hỗ trợ với st.sidebar.
Như bạn thấy, bạn có thể tạo một thanh bên trong giao diện ứng dụng của mình và đặt các thành phần bên trong nó để giúp ứng dụng của bạn có tổ chức hơn và dễ hiểu hơn.
Vùng chứa
st.container()
được sử dụng để tạo một vùng chứa vô hình nơi bạn có thể đặt các phần tử để tạo sự sắp xếp và phân cấp hữu ích.
Hiển thị đồ thị vớiStreamlit
Tại sao chúng ta cần minh hoạ dữ liệu?
Trực quan hóa dữ liệu giúp kể chuyện bằng cách sắp xếp dữ liệu thành định dạng dễ hiểu hơn, làm nổi bật các xu hướng và các ngoại lệ. Một hình ảnh trực quan tốt sẽ kể một câu chuyện, loại bỏ những chi tiết nhiễu khỏi dữ liệu và làm nổi bật những thông tin hữu ích. Tuy nhiên, nó không chỉ đơn giản là chỉnh sửa một biểu đồ để làm cho nó trông đẹp hơn hay bổ sung thêm phần “thông tin” của một đồ họa thông tin. Trực quan hóa dữ liệu hiệu quả là một hành động cân bằng tinh tế giữa hình thức và chức năng. Biểu đồ đơn giản nhất có thể quá nhàm chán để thu hút sự chú ý hoặc truyền tải một thông điệp mạnh mẽ và hình ảnh trực quan đẹp mắt nhất có thể hoàn toàn thất bại trong việc truyền tải đúng thông điệp. Dữ liệu và hình ảnh cần phải phối hợp với nhau và cần có một nghệ thuật để kết hợp những phân tích tuyệt vời với cách kể chuyện hay.
Bạn có nghĩ rằng việc cung cấp cho bạn dữ liệu của một triệu điểm trong một tệp bảng/cơ sở dữ liệu và yêu cầu bạn đưa ra các suy luận của mình chỉ bằng cách xem dữ liệu trên bảng đó là khả thi không? Trừ khi bạn là siêu nhân, điều đó là không thể. Đây là lúc chúng tôi sử dụng trực quan hóa dữ liệu—nó cho chúng tôi ý tưởng rõ ràng về ý nghĩa của thông tin bằng cách cung cấp cho nó bối cảnh trực quan thông qua bản đồ hoặc đồ thị. Đó là sức mạnh của trực quan hóa Streamlit.
st.pyplot()
: Hàm này được sử dụng để hiển thị hình matplotlib.pyplot.
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
rand = np.random.normal(1, 2, size=20)
fig, ax = plt.subplots()
ax.hist(rand, bins=15)
st.pyplot(fig)
st.line_chart()
: Chức năng này được sử dụng để hiển thị biểu đồ dạng đường.
import streamlit as st
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 2), columns=['x', 'y'])
st.line_chart(df)
st.bar_chart()
: Chức năng này được sử dụng để hiển thị biểu đồ thanh.
import streamlit as st
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 2), columns=['x', 'y'])
st.bar_chart(df)
st.area_chart()
: Chức năng này được sử dụng để hiển thị biểu đồ vùng.
import streamlit as st
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 2), columns=['x', 'y'])
st.area_chart(df)
st.altair_chart()
: Chức năng này được sử dụng để hiển thị biểu đồ Altair.
import streamlit as st
import numpy as np
import pandas as pd
import altair as alt
df = pd.DataFrame(np.random.randn(500, 3), columns=['x', 'y', 'z'])
c = alt.Chart(df).mark_circle().encode(
x='x',
y='y',
size='z',
color='z',
tooltip=['x', 'y', 'z']
)
st.altair_chart(c, use_container_width=True)
st.graphviz_chart()
: Hàm này được sử dụng để hiển thị các đối tượng đồ thị, có thể được hoàn thành bằng cách sử dụng các nút và cạnh khác nhau.
import streamlit as st
import graphviz as graphviz
st.graphviz_chart('''
digraph {
Big_shark -> Tuna
Tuna -> Mackerel
Mackerel -> Small_fishes
Small_fishes -> Shrimp
}
''')
Hiển thị bản đồ với Streamlit
st.map()
: Chức năng này được sử dụng để hiển thị bản đồ trong ứng dụng. Tuy nhiên, nó yêu cầu các giá trị vĩ độ và kinh độ và các giá trị này không được rỗng/NA.
import pandas as pd
import numpy as np
import streamlit as st
df = pd.DataFrame(np.random.randn(500, 2) / [50, 50] + [37.76, -122.4], columns=['lat', 'lon'])
st.map(df)
Chủ đề
Bạn cũng có thể chọn một chủ đề phản ánh phong cách của bạn. Thực hiện theo các bước trong ảnh GIF bên dưới:
Và nếu bạn muốn tìm hiểu thêm về kiểu dáng và chủ đề, bạn có thể xem Theming .
Bây giờ đã đến lúc cùng nhau xây dựng một ứng dụng!
Xây dựng một ứng dụng học máy
Trong phần này, tôi sẽ hướng dẫn bạn thực hiện một dự án mà tôi đã thực hiện về dự đoán khoản vay.
Lợi nhuận chính của khoản vay đến trực tiếp từ lãi vay. Các công ty cho vay cấp một khoản vay sau một quá trình xác minh và xác nhận chuyên sâu. Tuy nhiên, họ vẫn không có sự đảm bảo liệu người nộp đơn có thể hoàn trả khoản vay mà không gặp khó khăn hay không. Trong hướng dẫn này, chúng tôi sẽ xây dựng mô hình dự đoán (Phân loại rừng ngẫu nhiên) để dự đoán trạng thái khoản vay của người nộp đơn. Nhiệm vụ của chúng tôi là chuẩn bị một ứng dụng web để đưa nó vào sản xuất.
Bắt đầu với việc nhập các thư viện cần thiết cho ứng dụng của chúng tôi:
import streamlit as st
import pandas as pd
import numpy as np
import pickle # To load a saved model
import base64 # To open .gif files in streamlit app
Trong ứng dụng này, chúng tôi sẽ sử dụng nhiều tiện ích làm thanh trượt: hộp chọn và radio trong menu thanh bên để chúng tôi chuẩn bị một số hàm Python. Ví dụ này sẽ là một bản demo đơn giản có hai trang. Trên trang chủ, nó sẽ hiển thị dữ liệu mà chúng tôi đã chọn, trong khi trang Khám phá sẽ cho phép bạn trực quan hóa các biến trong các ô và trang Dự đoán sẽ chứa các biến có nút có tên Dự đoán cho phép bạn ước tính trạng thái khoản vay. Mã bên dưới cung cấp cho bạn một hộp chọn trên thanh bên cho phép bạn chọn một trang. Dữ liệu được lưu trữ để không cần phải tải lại liên tục.
@st.cache
là cơ chế lưu vào bộ nhớ đệm cho phép ứng dụng của bạn duy trì hoạt động ngay cả khi tải dữ liệu từ web, thao tác với các tập dữ liệu lớn hoặc thực hiện các phép tính tốn kém.
@st.cache(suppress_st_warning=True)
def get_fvalue(val):
feature_dict = {"No": 1, "Yes": 2}
for key, value in feature_dict.items():
if val == key:
return value
def get_value(val, my_dict):
for key, value in my_dict.items():
if val == key:
return value
app_mode = st.sidebar.selectbox('Select Page', ['Home', 'Prediction']) # two pages
Trong Trang chủ, chúng ta sẽ hiển thị: hình ảnh trình bày / tập dữ liệu / biểu đồ về thu nhập của người nộp đơn và số tiền cho vay.
Lưu ý: Chúng ta sẽ sử dụng if/elif/else để chuyển giữa các trang.
Chúng tôi sẽ tải loan_dataset.csv trong dữ liệu có thể thay đổi để cho phép chúng tôi hiển thị một vài dòng trong đó trên Trang chủ.
if app_mode == 'Home':
st.title('LOAN PREDICTION :')
st.image('loan_image.jpg')
st.markdown('Dataset :')
data = pd.read_csv('loan_dataset.csv')
st.write(data.head())
st.markdown('Applicant Income VS Loan Amount ')
st.bar_chart(data[['ApplicantIncome', 'LoanAmount']].head(20))
Sau đó, trong trang Dự đoán:
elif app_mode == 'Prediction':
st.image('slider-short-3.jpg')
st.subheader('Sir/Mme, YOU need to fill all necessary informations in order to get a reply to your loan request !')
st.sidebar.header("Informations about the client :")
gender_dict = {"Male": 1, "Female": 2}
feature_dict = {"No": 1, "Yes": 2}
edu = {'Graduate': 1, 'Not Graduate': 2}
prop = {'Rural': 1, 'Urban': 2, 'Semiurban': 3}
ApplicantIncome = st.sidebar.slider('ApplicantIncome', 0, 10000, 0)
CoapplicantIncome = st.sidebar.slider('CoapplicantIncome', 0, 10000, 0)
LoanAmount = st.sidebar.slider('LoanAmount in K$', 9.0, 700.0, 200.0)
Loan_Amount_Term = st.sidebar.selectbox('Loan_Amount_Term', (12.0, 36.0, 60.0, 84.0, 120.0, 180.0, 240.0, 300.0, 360.0))
Credit_History = st.sidebar.radio('Credit_History', (0.0, 1.0))
Gender = st.sidebar.radio('Gender', tuple(gender_dict.keys()))
Married = st.sidebar.radio('Married', tuple(feature_dict.keys()))
Self_Employed = st.sidebar.radio('Self Employed', tuple(feature_dict.keys()))
Dependents = st.sidebar.radio('Dependents', options=['0', '1', '2', '3+'])
Education = st.sidebar.radio('Education', tuple(edu.keys()))
Property_Area = st.sidebar.radio('Property_Area', tuple(prop.keys()))
class_0, class_3, class_1, class_2 = 0, 0, 0, 0
if Dependents == '0':
class_0 = 1
elif Dependents == '1':
class_1 = 1
elif Dependents == '2':
class_2 = 1
else:
class_3 = 1
Rural, Urban, Semiurban = 0, 0, 0
if Property_Area == 'Urban':
Urban = 1
elif Property_Area == 'Semiurban':
Semiurban = 1
else:
Rural = 1
Chúng tôi đã viết hai hàm get_value(val,my_dict)
và get_fvalue(val)
từ điển để feature_dict
thao tác st.sidebar.radio()
với các biến không phải là số. Đó là tùy chọn, bạn có thể dễ dàng làm điều gì đó như thế này:
Hãy xem tại sao chúng tôi làm điều đó.
Lưu ý: Thuật toán học máy không thể xử lý các biến phân loại. Trong tập dữ liệu, tôi đã thực hiện một số kỹ thuật tính năng. Ví dụ: cột Đã kết hôn có hai biến ‘Có’ và ‘Không’ và tôi đã Mã hóa Nhãn (Hãy xem để hiểu rõ hơn) nên “KHÔNG” sẽ bằng 1 và “Có” thành 2. Hàm get_fvalue( val) sẽ dễ dàng trả về giá trị (1/2) tùy theo khách hàng đã chọn. Tương tự cho hàm get_value(val,my_dict) . Sự khác biệt giữa hai hàm là hàm đầu tiên hoạt động trên các tính năng có/không và hàm thứ hai dùng trong trường hợp chung khi chúng ta có nhiều biến (ví dụ: Giới tính).
Như chúng ta có thể thấy, biến Người phụ thuộc có bốn loại ‘0’,’1′ , ‘2’ và ‘3+’ và chúng ta không thể chuyển đổi những thứ như thế thành biến số và chúng ta có ‘+3’ có nghĩa là Người phụ thuộc có thể lấy 3,4,5 … Chúng tôi đã thực hiện One Hot Enconding (Hãy xem để hiểu rõ hơn) Vì vậy, chúng tôi đã tạo một radio thanh bên chứa bốn phần tử và mỗi phần tử có một biến nhị phân, nếu khách hàng chọn ‘0’ class_0 sẽ bằng 1 và các số còn lại bằng 0.
Ngoài ra, chúng tôi đã thực hiện One Hot Encoding cho Property_Area, đó là lý do tại sao chúng tôi tạo 3 biến (Nông thôn, Thành thị, Bán thành thị), Khi Nông thôn lấy 1, các biến khác sẽ bằng 0.
Vì vậy, chúng tôi đã thấy cả hai—khi chúng tôi gắn nhãn hoặc một mã hóa nóng các tính năng của mình và cách xử lý nó để tạo thành công một ứng dụng Streamlit đang hoạt động.
data1 = {
'Gender': Gender,
'Married': Married,
'Dependents': [class_0, class_1, class_2, class_3],
'Education': Education,
'ApplicantIncome': ApplicantIncome,
'CoapplicantIncome': CoapplicantIncome,
'Self Employed': Self_Employed,
'LoanAmount': LoanAmount,
'Loan_Amount_Term': Loan_Amount_Term,
'Credit_History': Credit_History,
'Property_Area': [Rural, Urban, Semiurban],
}
feature_list = [
ApplicantIncome, CoapplicantIncome, LoanAmount, Loan_Amount_Term, Credit_History,
get_value(Gender, gender_dict), get_fvalue(Married), data1['Dependents'][0], data1['Dependents'][1],
data1['Dependents'][2], data1['Dependents'][3], get_value(Education, edu),
get_fvalue(Self_Employed), data1['Property_Area'][0], data1['Property_Area'][1], data1['Property_Area'][2]
]
single_sample = np.array(feature_list).reshape(1, -1)
Bây giờ chúng ta sẽ lưu trữ các biến của mình trong một từ điển vì chúng ta đã viết get_value(val,my_dict
và get_fvalue(val)
xử lý các từ điển. Sau đó, đầu vào—những gì khách hàng sẽ chọn làm đầu vào trong ứng dụng Streamlit của chúng tôi—sẽ được sắp xếp trong một danh sách có tên feature_list
sau đó là một biến gọn gàng có tên single_sample
.
Lưu ý: Dữ liệu đầu vào của các đối tượng phải được sắp xếp theo thứ tự các cột của tập dữ liệu (ví dụ: Married
không thể lấy dữ liệu đầu vào của Gender
).
if st.button("Predict"):
file_ = open("6m-rain.gif", "rb")
contents = file_.read()
data_url = base64.b64encode(contents).decode("utf-8")
file_.close()
file = open("green-cola-no.gif", "rb")
contents = file.read()
data_url_no = base64.b64encode(contents).decode("utf-8")
file.close()
loaded_model = pickle.load(open('Random_Forest.sav', 'rb'))
prediction = loaded_model.predict(single_sample)
if prediction[0] == 0:
st.error('According to our Calculations, you will not get the loan from Bank')
st.markdown(f'<img src="data:image/gif;base64,{data_url_no}">', unsafe_allow_html=True)
elif prediction[0] == 1:
st.success('Congratulations!! you will get the loan from Bank')
st.markdown(f'<img src="data:image/gif;base64,{data_url}">', unsafe_allow_html=True)
Cuối cùng, chúng tôi sẽ tải mô hình RandomForestClassifier đã lưu của mình vào loaded_model
và dự đoán của nó, là 0 hoặc 1 (vấn đề phân loại) trong prediction
. Các tệp .gif sẽ được lưu trữ trong file
và file_
. Tùy theo giá trị của prediction
, chúng ta sẽ có hai trường hợp là “Thành công” hoặc “Không thành công” để được vay vốn ngân hàng.
Đây là trang Dự đoán của chúng tôi:
Trong trường hợp THẤT BẠI, kết quả đầu ra sẽ như thế này:
Trong trường hợp THÀNH CÔNG, đầu ra sẽ như thế này:
5. Cách triển khai ứng dụng Streamlit
Triển khai là cơ chế thông qua đó các ứng dụng được phân phối từ nhà phát triển đến người dùng.
Triển khai một ứng dụng là quá trình sao chép, định cấu hình và kích hoạt một ứng dụng cụ thể tới một URL cơ sở cụ thể. Sau khi quá trình triển khai kết thúc, ứng dụng sẽ có thể truy cập công khai trên URL cơ sở. Máy chủ thực hiện quy trình hai bước này bằng cách chạy thử ứng dụng trước tiên, sau đó kích hoạt nó sau khi chạy thử thành công.
Hãy cùng tìm hiểu cách triển khai ứng dụng Streamlit!
Trước khi cố gắng triển khai ứng dụng của mình, bạn cần tạo một kho lưu trữ mới trên GitHub, nơi bạn cần đặt mã ứng dụng và các phần phụ thuộc của mình.
Sau đó bấm vào cam kết thay đổi để lưu chúng:
Sau khi tạo kho lưu trữ và tải tệp lên, bạn cần tạo một tệp mới có tên là yêu cầu, nơi bạn phải đặt các thư viện bạn đã sử dụng trong ứng dụng của mình.
Đầu tiên, nhấp vào tạo tập tin mới.
Bây giờ bạn sắp triển khai ứng dụng của mình, tất cả những gì bạn cần là truy cập liên kết này.
Sau đó làm theo các bước sau:
Bấm vào Triển khai và đợi một lát!
Một trang sẽ tự động mở trong trình duyệt của bạn! Trang này là ứng dụng dự án của bạn được hiện thực hóa bằng Streamlit.
Xin chúc mừng, bạn đã triển khai thành công ứng dụng của mình! Nhấn vào đây để kiểm tra ứng dụng đã triển khai.