यह Python Streamlit ट्यूटोरियल उन डेटा वैज्ञानिकों और मशीन लर्निंग इंजीनियरों के लिए बनाया गया है जो बिना व्यापक वेब डेवलपमेंट ज्ञान के तेज़ी से वेब ऐप्स बनाना चाहते हैं।
Streamlit एक निःशुल्क और ओपन-सोर्स फ़्रेमवर्क है जिसके जरिए आप बेहद तेजी से सुंदर मशीन लर्निंग और डेटा साइंस वेब ऐप्स बना और साझा कर सकते हैं।
यह एक Python-आधारित लाइब्रेरी है जिसे विशेष रूप से मशीन लर्निंग इंजीनियर्स के लिए डिज़ाइन किया गया है। डेटा साइंटिस्ट्स या मशीन लर्निंग इंजीनियर्स वेब डेवलपर नहीं होते और वे वेब ऐप बनाने के लिए इन फ़्रेमवर्क्स को सीखने में हफ्तों बिताने में रुचि नहीं रखते। वे इसके बजाय ऐसा टूल चाहते हैं जो सीखने और उपयोग करने में आसान हो, बशर्ते वह डेटा दिखा सके और मॉडलिंग के लिए आवश्यक पैरामीटर्स ले सके।
Streamlit आपको केवल कुछ पंक्तियों के कोड से एक शानदार दिखने वाला एप्लिकेशन बनाने देता है।
डेटा साइंटिस्ट्स को Streamlit क्यों उपयोग करना चाहिए?
Streamlit की सबसे अच्छी बात यह है कि आरंभ करने या अपना पहला वेब एप्लिकेशन बनाने के लिए आपको वेब डेवलपमेंट की बुनियादी बातें भी जानने की आवश्यकता नहीं है। इसलिए यदि आप डेटा साइंस में हैं और अपने मॉडल्स को आसानी से, जल्दी और केवल कुछ पंक्तियों के कोड से डिप्लॉय करना चाहते हैं, तो Streamlit उपयुक्त विकल्प है।
किसी एप्लिकेशन को सफल बनाने के महत्वपूर्ण पहलुओं में से एक है इसे प्रभावी और सहज उपयोगकर्ता इंटरफ़ेस के साथ डिलीवर करना। आधुनिक डेटा-प्रधान ऐप्स में चुनौती यह रहती है कि बिना जटिल चरणों के जल्दी से प्रभावी यूआई बनाया जाए। Streamlit एक आशाजनक ओपन-सोर्स Python लाइब्रेरी है, जो डेवलपर्स को बेहद कम समय में आकर्षक यूजर इंटरफेस बनाने में सक्षम बनाती है।
Streamlit खासकर उन लोगों के लिए सबसे आसान तरीका है जिन्हें फ्रंट-एंड का ज्ञान नहीं है, ताकि वे अपने कोड को वेब एप्लिकेशन में ला सकें:
फ्रंट-एंड (html, js, css) का कोई अनुभव या ज्ञान आवश्यक नहीं है।
वेब ऐप बनाने में आपको दिनों या महीनों लगाने की आवश्यकता नहीं है; आप केवल कुछ घंटों या मिनटों में ही एक शानदार मशीन लर्निंग या डेटा साइंस ऐप बना सकते हैं।
यह अधिकांश Python लाइब्रेरीज़ (जैसे pandas, matplotlib, seaborn, plotly, Keras, PyTorch, SymPy(latex)) के साथ संगत है।
कम कोड में बेहतरीन वेब ऐप्स बनाए जा सकते हैं।
डेटा कैशिंग से computation pipelines सरल और तेज़ हो जाते हैं।
Streamlit का उपयोग कैसे करें
Streamlit इंस्टॉल करें
सबसे पहले इसे इंस्टॉल करें:
Windows पर:
1. Anaconda इंस्टॉल करें और अपना environment बनाएं
2. टर्मिनल खोलें
3. टर्मिनल में यह कमांड टाइप करके Streamlit इंस्टॉल करें:
Streamlit कमांड लिखना और समझना आसान है। केवल एक साधारण कमांड से आप टेक्स्ट, मीडिया, विजेट्स, ग्राफ़ आदि दिखा सकते हैं।
Streamlit के साथ टेक्स्ट दिखाएं
यहां मैं दिखाऊंगा कि अपने Streamlit ऐप में टेक्स्ट कैसे जोड़ें और कौन-कौन से कमांड उपलब्ध हैं।
st.write(): यह फ़ंक्शन फॉर्मेटेड स्ट्रिंग से लेकर matplotlib figure में चार्ट, Altair चार्ट, plotly figure, डेटा फ़्रेम, Keras मॉडल आदि—कुछ भी वेब ऐप में जोड़ने के लिए उपयोग होता है।
import streamlit as stst.write("Hello ,let's learn how to build a streamlit app together")संचालित द्वारा
st.title(): यह फ़ंक्शन ऐप का शीर्षक जोड़ने देता है। st.header(): किसी अनुभाग का हेडर सेट करने के लिए। st.markdown(): किसी अनुभाग का मार्कडाउन सेट करने के लिए। st.subheader(): किसी अनुभाग का उप-हेडर सेट करने के लिए। st.caption(): कैप्शन लिखने के लिए। st.code(): कोड दिखाने के लिए। st.latex(): LaTeX के रूप में फॉर्मेट किए गए गणितीय व्यंजकों को दिखाने के लिए।
import streamlit as stst.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 ''')संचालित द्वारा
Streamlit के साथ इमेज, वीडियो या ऑडियो फ़ाइल दिखाएं
इमेज, वीडियो और ऑडियो फ़ाइलें दिखाने के लिए Streamlit जैसे आसान फ़ंक्शंस आपको कहीं और नहीं मिलेंगे। चलिए देखते हैं कि Streamlit से मीडिया कैसे दिखाएं!
st.image(): इमेज दिखाने के लिए। st.audio(): ऑडियो दिखाने/चलाने के लिए। st.video(): वीडियो दिखाने/चलाने के लिए।
st.image("kid.jpg", caption="A kid playing")st.audio("audio.mp3")st.video("video.mp4")संचालित द्वारा
इनपुट विजेट्स
विजेट्स सबसे महत्वपूर्ण यूजर इंटरफ़ेस कॉम्पोनेन्ट होते हैं। Streamlit में विभिन्न विजेट्स हैं जिनसे आप बटन्स, स्लाइडर्स, टेक्स्ट इनपुट्स आदि के माध्यम से सीधे अपने ऐप में इंटरएक्टिविटी जोड़ सकते हैं।
st.checkbox(): यह फ़ंक्शन एक बूलियन वैल्यू लौटाता है। जब बॉक्स चेक होता है तो True लौटाता है, अन्यथा False। st.button(): बटन विजेट दिखाने के लिए। st.radio(): रेडियो बटन विजेट के लिए। st.selectbox(): सेलेक्ट विजेट के लिए। st.multiselect(): मल्टीसेलेक्ट विजेट के लिए। st.select_slider(): सेलेक्ट स्लाइडर विजेट के लिए। st.slider(): स्लाइडर विजेट के लिए।
st.checkbox('Yes')st.button('Click Me')st.radio('Pick your gender',['Male','Female'])st.selectbox('Pick a fruit',['Apple','Banana','Orange'])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(): संख्यात्मक इनपुट विजेट के लिए। st.text_input(): टेक्स्ट इनपुट विजेट के लिए। st.date_input(): तिथि चुनने के लिए डेट इनपुट विजेट। st.time_input(): समय चुनने के लिए टाइम इनपुट विजेट। st.text_area(): बहु-पंक्ति टेक्स्ट इनपुट विजेट। st.file_uploader(): फ़ाइल अपलोडर विजेट। st.color_picker(): रंग चुनने के लिए कलर पिकर विजेट।
st.number_input('Pick a number',0,10)st.text_input('Email address')st.date_input('Traveling date')st.time_input('School time')st.text_area('Description')st.file_uploader('Upload a photo')st.color_picker('Choose your favorite color')संचालित द्वारा
अब हम देखेंगे कि अपने ऐप में प्रोग्रेस बार और error तथा success जैसे स्टेटस संदेश कैसे जोड़ें।
st.balloons(): जश्न के लिए गुब्बारे दिखाता है। st.progress(): प्रोग्रेस बार दिखाता है। st.spinner(): निष्पादन के दौरान अस्थायी प्रतीक्षा संदेश दिखाता है।
st.balloons()# Celebration balloonsst.progress(10) # Progress barwith st.spinner('Wait for it...'): time.sleep(10) # Simulating a process delayसंचालित द्वारा
st.success(): सफलता संदेश दिखाता है। st.error(): त्रुटि संदेश दिखाता है। st.warning(): चेतावनी संदेश दिखाता है। st.info(): सूचना संदेश दिखाता है। st.exception(): एक्सेप्शन संदेश दिखाता है।
st.success("You did it!")st.error("Error occurred")st.warning("This is a warning")st.info("It's easy to build a Streamlit app")st.exception(RuntimeError("RuntimeError exception"))संचालित द्वारा
साइडबार और कंटेनर
आप अपने पेज पर साइडबार या कंटेनर भी बना सकते हैं ताकि ऐप को व्यवस्थित रखा जा सके। आपके ऐप पर पेजों की संरचना और व्यवस्था उपयोगकर्ता अनुभव पर बड़ा प्रभाव डाल सकती है। सामग्री को व्यवस्थित करके, आप विज़िटर्स को आपकी साइट समझने और उस पर नेविगेट करने में मदद करते हैं, जिससे उन्हें अपनी जरूरत की चीज़ें जल्दी मिलती हैं और भविष्य में वापसी की संभावना बढ़ती है।
साइडबार
st.sidebar() में कोई एलिमेंट पास करने से वह बाईं ओर पिन हो जाएगा, जिससे उपयोगकर्ता आपके ऐप की मुख्य सामग्री पर ध्यान केंद्रित कर सकेंगे।
लेकिन st.spinner() और st.echo() st.sidebar के साथ समर्थित नहीं हैं।
जैसा कि आप देखते हैं, आप अपने ऐप इंटरफ़ेस में साइडबार बना सकते हैं और उसमें एलिमेंट्स रख सकते हैं, जिससे आपका ऐप अधिक सुव्यवस्थित और समझने में आसान बनता है।
st.sidebar.title("Sidebar Title")st.sidebar.markdown("This is the sidebar content")संचालित द्वारा
कंटेनर
st.container() का उपयोग एक अदृश्य कंटेनर बनाने के लिए किया जाता है जिसमें आप एलिमेंट्स रखकर उपयोगी व्यवस्था और अनुक्रम बना सकते हैं।
with st.container(): st.write("This is inside the container")संचालित द्वारा
Streamlit के साथ ग्राफ़ दिखाएं
Streamlit लोकप्रिय Python विज़ुअलाइज़ेशन लाइब्रेरीज़ के साथ इंटीग्रेट करता है। यहां आउट-ऑफ-द-बॉक्स उपलब्ध चार्टिंग फ़ंक्शंस दिए गए हैं:
st.pyplot(): matplotlib.pyplot फ़िगर दिखाने के लिए।
import streamlit as stimport matplotlib.pyplot as pltimport numpy as nprand = np.random.normal(1,2, size=20)fig, ax = plt.subplots()ax.hist(rand, bins=15)st.pyplot(fig)संचालित द्वारा
st.line_chart(): लाइन चार्ट दिखाने के लिए।
import streamlit as stimport pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(10,2), columns=['x','y'])st.line_chart(df)संचालित द्वारा
st.bar_chart(): बार चार्ट दिखाने के लिए।
import streamlit as stimport pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(10,2), columns=['x','y'])st.bar_chart(df)संचालित द्वारा
st.area_chart(): एरिया चार्ट दिखाने के लिए।
import streamlit as stimport pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(10,2), columns=['x','y'])st.area_chart(df)संचालित द्वारा
st.altair_chart(): Altair चार्ट दिखाने के लिए।
import streamlit as stimport pandas as pdimport numpy as npimport altair as altdf = pd.DataFrame(np.random.randn(500,3), columns=['x','y','z'])chart = alt.Chart(df).mark_circle().encode( x='x', y='y', size='z', color='z', tooltip=['x','y','z'])st.altair_chart(chart, use_container_width=True)संचालित द्वारा
st.graphviz_chart(): ग्राफ़ ऑब्जेक्ट्स दिखाने के लिए, जिन्हें अलग-अलग नोड्स और एजेज़ से बनाया जा सकता है।
st.map(): ऐप में मानचित्र दिखाने के लिए उपयोग होता है। हालांकि, इसके लिए latitude और longitude के मान चाहिए होते हैं और ये मान null/NA नहीं होने चाहिए।
import pandas as pdimport numpy as npimport streamlit as stdf = pd.DataFrame( np.random.randn(500,2)/[50,50]+[37.76,-122.4], columns=['lat','lon'])st.map(df)संचालित द्वारा
थीम्स
आप अपनी स्टाइल को दर्शाने वाली थीम भी चुन सकते हैं। नीचे दिए गए GIF में चरणों का पालन करें:
और यदि आप स्टाइलिंग और थीम्स के बारे में अधिक सीखने में रुचि रखते हैं, तो Theming देख सकते हैं।
अब, एक साथ मिलकर एक ऐप बनाने का समय है!
Streamlit के साथ एक मशीन लर्निंग एप्लिकेशन बनाएं
इस खंड में, मैं आपको एक प्रोजेक्ट के माध्यम से ले जाऊंगा जो मैंने loan prediction पर बनाया था।
लोन से होने वाला मुख्य लाभ सीधे लोन के ब्याज से आता है। लोन कंपनियां एक गहन सत्यापन और मान्यकरण प्रक्रिया के बाद लोन स्वीकृत करती हैं। फिर भी, उन्हें यह आश्वासन नहीं होता कि आवेदक बिना किसी कठिनाई के लोन चुका पाएगा। इस ट्यूटोरियल में, हम एक प्रिडिक्टिव मॉडल (Random Forest Classifier) बनाएंगे जो किसी आवेदक के लोन स्टेटस का पूर्वानुमान लगाएगा। हमारा लक्ष्य है कि इसे प्रोडक्शन में उपलब्ध कराने के लिए एक वेब ऐप तैयार करें।
हमारे ऐप के लिए आवश्यक लाइब्रेरीज़ को इम्पोर्ट करने से शुरू करते हैं:
import streamlit as stimport pandas as pdimport numpy as npimport pickle # to load a saved modelimport base64 # to handle gif encodingसंचालित द्वारा
इस ऐप में हम कई विजेट्स का उपयोग करेंगे, जैसे स्लाइडर्स: साइडबार मेनू में selectbox और radio, जिनके लिए हम कुछ Python फ़ंक्शंस तैयार करेंगे। उदाहरण एक सरल डेमो होगा जिसमें दो पेज होंगे। होमपेज पर, यह हमारे चुने गए डेटा को दिखाएगा, जबकि Exploration पेज आपको प्लॉट्स में वेरिएबल्स को विज़ुअलाइज़ करने देगा, और Prediction पेज में वेरिएबल्स होंगे और Predict नामक बटन होगा जो आपको लोन स्टेटस का अनुमान लगाने देगा। नीचे दिया गया कोड साइडबार पर एक selectbox देता है जो आपको पेज चुनने की अनुमति देता है। डेटा cached रहता है ताकि उसे बार-बार रीलोड न करना पड़े।
@st.cache_data अनुशंसित कैशिंग डेकोरेटर है (अब अप्रचलित @st.cache का स्थान लेता है) जो वेब से डेटा लोड करते समय, बड़े डेटासेट्स में हेरफेर करते समय, या महंगे computation चलाते समय आपके ऐप को performant रखता है। सीरियलाइज़ेबल डेटा जैसे DataFrames और स्ट्रिंग्स के लिए @st.cache_data का उपयोग करें, और ग्लोबल संसाधनों जैसे डेटाबेस कनेक्शंस या ML मॉडल्स के लिए @st.cache_resource का।
@st.cache_datadef get_fvalue(val): feature_dict ={"No":1,"Yes":2}return feature_dict[val]def get_value(val, my_dict):return my_dict[val]संचालित द्वारा
होम पेज पर, हम दिखाएंगे: प्रेजेंटेशन तस्वीर / डेटासेट / applicant income और loan amount का हिस्टोग्राम।
नोट: पेजेस के बीच स्विच करने के लिए हम if/elif/else का उपयोग करेंगे।
हम loan_dataset.csv को data वेरिएबल में लोड करेंगे जिससे होम पेज पर इसकी कुछ पंक्तियां दिखा सकें।
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.bar_chart(data[['ApplicantIncome','LoanAmount']].head(20))संचालित द्वारा
फिर Prediction पेज पर:
if app_mode =='Prediction': ApplicantIncome = st.sidebar.slider('ApplicantIncome',0,10000,0) LoanAmount = st.sidebar.slider('LoanAmount in K$',9.0,700.0,200.0)# Assuming additional input features here... # Prediction Logic if st.button("Predict"): loaded_model = pickle.load(open('Random_Forest.sav', 'rb')) prediction = loaded_model.predict(np.array([ApplicantIncome, LoanAmount]).reshape(1, -1)) if prediction[0] == 0: st.error('According to our calculations, you will not get the loan.') else: st.success('Congratulations! You will get the loan.')संचालित द्वारा
हमने दो फ़ंक्शंस get_value(val,my_dict) और get_fvalue(val) और feature_dict जैसे डिक्शनरीज़ लिखीं ताकि st.sidebar.radio() को non-numeric वेरिएबल्स के साथ प्रबंधित किया जा सके। यह वैकल्पिक है; आप आसानी से ऐसा भी कर सकते हैं:
आइए देखें कि हमने ऐसा क्यों किया।
नोट: मशीन लर्निंग एल्गोरिदम categorical वेरिएबल्स को संभाल नहीं सकते। डेटासेट में, मैंने कुछ फीचर इंजीनियरिंग की है। उदाहरण के लिए, Married कॉलम में दो मान हैं 'Yes' और 'No' और मैंने Label Encoding किया (बेहतर समझ के लिए देख लें) ताकि "NO" 1 के बराबर और "Yes" 2 के बराबर हो जाए। फ़ंक्शन get_fvalue(val) ग्राहक द्वारा चुने गए विकल्प पर निर्भर करते हुए आसानी से मान (1/2) लौटाएगा। यही बात get_value(val,my_dict) फ़ंक्शन पर भी लागू होती है। दोनों फ़ंक्शंस में अंतर यह है कि पहला yes/no फीचर्स पर काम करता है और दूसरा तब जब हमारे पास एक से अधिक श्रेणियां हों (उदा.: Gender)।
जैसा कि हम देखते हैं, Dependents वेरिएबल में चार श्रेणियां हैं '0','1', '2' और '3+' और हम इसे सीधे संख्यात्मक वेरिएबल में परिवर्तित नहीं कर सकते, और हमारे पास '+3' भी है जिसका अर्थ है Dependents 3,4,5 ... हो सकता है। हमने One Hot Encoding किया (बेहतर समझ के लिए देख लें)। इसलिए, हमने चार एलिमेंट्स वाला साइडबार रेडियो बनाया और प्रत्येक का एक बाइनरी वेरिएबल है; यदि ग्राहक ने '0' चुना तो class_0 1 होगा और बाकी 0 होंगे।
हमने Property_Area के लिए भी One Hot Encoding किया, इसलिए हमने 3 वेरिएबल्स बनाए (Rural,Urban,Semiurban)। जब Rural 1 होगा तो बाकी 0 होंगे।
इस प्रकार हमने देखा कि कब हम अपने फीचर्स को label या one hot encode करते हैं और Streamlit ऐप को सफलतापूर्वक चलाने के लिए इससे कैसे निपटते हैं।
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)संचालित द्वारा
अब हम अपनी वेरिएबल्स को एक डिक्शनरी में स्टोर करेंगे क्योंकि हमने डिक्शनरीज़ के साथ काम करने के लिए get_value(val,my_dict) और get_fvalue(val) लिखे हैं। उसके बाद, इनपुट—जो क्लाइंट हमारे Streamlit ऐप में चुनेगा—उसे feature_list नामक सूची में रखा जाएगा और फिर single_sample नामक numpy वेरिएबल में।
नोट: फीचर्स के इनपुट्स का क्रम डेटासेट कॉलम्स के क्रम के समान होना चाहिए (उदाहरण: Married को 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}" alt="cat gif">', 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}" alt="cat gif">', unsafe_allow_html=True,)संचालित द्वारा
अंत में, हम अपने सेव किए गए RandomForestClassifier मॉडल को loaded_model में लोड करेंगे और उसकी भविष्यवाणी, जो 0 या 1 (वर्गीकरण समस्या) होती है, को prediction में रखेंगे। .gif फाइलें file और file_ में संग्रहीत होंगी। prediction के मान के आधार पर, बैंक से ऋण पाने के लिए हमारे पास दो स्थितियाँ होंगी: "Success" या "Failed"।
यह है हमारी Prediction पेज:
FAILURE के मामले में, आउटपुट इस प्रकार दिखेगा:
SUCCESS के मामले में, आउटपुट इस प्रकार दिखेगा:
Streamlit ऐप को कैसे डिप्लॉय करें
डिप्लॉयमेंट वह प्रक्रिया है जिसके माध्यम से एप्लिकेशन डेवलपर्स से उपयोगकर्ताओं तक पहुँचाए जाते हैं।
किसी एप्लिकेशन को डिप्लॉय करना एक विशिष्ट बेस URL पर उस एप्लिकेशन की कॉपी बनाना, कॉन्फ़िगर करना और सक्षम करना है। एक बार डिप्लॉयमेंट प्रक्रिया पूरी हो जाने के बाद, एप्लिकेशन उस बेस URL पर सार्वजनिक रूप से सुलभ हो जाता है। सर्वर यह दो-चरणीय प्रक्रिया इस तरह करता है कि पहले एप्लिकेशन को स्टेज करता है, और सफल स्टेजिंग के बाद उसे सक्रिय करता है।
आइए सीखते हैं कि Streamlit ऐप कैसे डिप्लॉय करें!
अपना ऐप डिप्लॉय करने से पहले, आपको अपने GitHub पर एक नया रेपो बनाना होगा, जहाँ आप अपने ऐप का कोड और डिपेंडेंसीज़ रखेंगे।
इसके बाद, परिवर्तनों को सहेजने के लिए Commit changes पर क्लिक करें:
रेपो बनाने और फाइलें अपलोड करने के बाद, आपको requirements नाम की एक नई फाइल बनानी होगी, जिसमें आप अपने ऐप में उपयोग की गई लाइब्रेरीज़ डालेंगे।
पहले, Create new file पर क्लिक करें।
अब आप अपने ऐप को डिप्लॉय करने से एकदम क़रीब हैं, बस इस लिंक पर जाएँ।
फिर ये चरण अपनाएँ:
Deploy पर क्लिक करें और थोड़ा इंतज़ार करें!
आपके ब्राउज़र में अपने-आप एक पेज खुल जाएगा! यह पेज आपका Streamlit से बना प्रोजेक्ट ऐप है।
बधाई हो, आपने सफलतापूर्वक अपना ऐप डिप्लॉय कर लिया है! डिप्लॉय किए गए ऐप को देखने के लिए यहाँ क्लिक करें।
Streamlit, Django या Flask जैसे अन्य Python वेब फ़्रेमवर्क से कैसे अलग है?⌄
Flask या Django जैसे अन्य Python वेब फ़्रेमवर्क के विपरीत, Streamlit सरलता और गति पर केंद्रित है। आप बहुत कम कोड के साथ इंटरैक्टिव एप्लिकेशन बना सकते हैं, जो उन उपयोगकर्ताओं के लिए उपयुक्त है जो वेब डेवलपमेंट सीखने में समय नहीं लगाना चाहते, फिर भी कार्यात्मक और प्रोफेशनल दिखने वाले ऐप चाहते हैं।
क्या Streamlit इस्तेमाल करने के लिए मुझे HTML या CSS आना ज़रूरी है?⌄
नहीं, Streamlit के लिए HTML, CSS या JavaScript का ज्ञान आवश्यक नहीं है। आप केवल Python का उपयोग करके पूरी तरह कार्यात्मक ऐप बना सकते हैं।
कौन-सी Python लाइब्रेरीज़ Streamlit के साथ संगत हैं?⌄
Streamlit कई लोकप्रिय Python लाइब्रेरीज़ के साथ संगत है, जैसे Pandas, NumPy, Matplotlib, Plotly, Altair, Keras, TensorFlow, और PyTorch। इससे अपने ऐप्स में डेटा साइंस वर्कफ़्लो को एकीकृत करना आसान हो जाता है।
Streamlit 2024 में नई सुविधाएँ क्या हैं?⌄
Streamlit 2024 में कई नई सुविधाएँ जोड़ी गईं, जिनमें बेहतर थीम्स, नए विजेट्स (जैसे फॉर्म्स), और कैशिंग में सुधार शामिल हैं। इन नई सुविधाओं का लाभ उठाने के लिए डाक्यूमेंटेशन ज़रूर देखें।
Streamlit क्या है?
Streamlit एक निःशुल्क और ओपन-सोर्स फ़्रेमवर्क है जिसके जरिए आप बेहद तेजी से सुंदर मशीन लर्निंग और डेटा साइंस वेब ऐप्स बना और साझा कर सकते हैं।
यह एक Python-आधारित लाइब्रेरी है जिसे विशेष रूप से मशीन लर्निंग इंजीनियर्स के लिए डिज़ाइन किया गया है। डेटा साइंटिस्ट्स या मशीन लर्निंग इंजीनियर्स वेब डेवलपर नहीं होते और वे वेब ऐप बनाने के लिए इन फ़्रेमवर्क्स को सीखने में हफ्तों बिताने में रुचि नहीं रखते। वे इसके बजाय ऐसा टूल चाहते हैं जो सीखने और उपयोग करने में आसान हो, बशर्ते वह डेटा दिखा सके और मॉडलिंग के लिए आवश्यक पैरामीटर्स ले सके।
Streamlit आपको केवल कुछ पंक्तियों के कोड से एक शानदार दिखने वाला एप्लिकेशन बनाने देता है।
डेटा साइंटिस्ट्स को Streamlit क्यों उपयोग करना चाहिए?
Streamlit की सबसे अच्छी बात यह है कि आरंभ करने या अपना पहला वेब एप्लिकेशन बनाने के लिए आपको वेब डेवलपमेंट की बुनियादी बातें भी जानने की आवश्यकता नहीं है। इसलिए यदि आप डेटा साइंस में हैं और अपने मॉडल्स को आसानी से, जल्दी और केवल कुछ पंक्तियों के कोड से डिप्लॉय करना चाहते हैं, तो Streamlit उपयुक्त विकल्प है।
किसी एप्लिकेशन को सफल बनाने के महत्वपूर्ण पहलुओं में से एक है इसे प्रभावी और सहज उपयोगकर्ता इंटरफ़ेस के साथ डिलीवर करना। आधुनिक डेटा-प्रधान ऐप्स में चुनौती यह रहती है कि बिना जटिल चरणों के जल्दी से प्रभावी यूआई बनाया जाए। Streamlit एक आशाजनक ओपन-सोर्स Python लाइब्रेरी है, जो डेवलपर्स को बेहद कम समय में आकर्षक यूजर इंटरफेस बनाने में सक्षम बनाती है।
Streamlit खासकर उन लोगों के लिए सबसे आसान तरीका है जिन्हें फ्रंट-एंड का ज्ञान नहीं है, ताकि वे अपने कोड को वेब एप्लिकेशन में ला सकें:
Streamlit का उपयोग कैसे करें
Streamlit इंस्टॉल करें
सबसे पहले इसे इंस्टॉल करें:
Windows पर:
1. Anaconda इंस्टॉल करें और अपना environment बनाएं
2. टर्मिनल खोलें
3. टर्मिनल में यह कमांड टाइप करके Streamlit इंस्टॉल करें:
4. जांचें कि इंस्टॉलेशन सफल रहा या नहीं:
जब आप यह कमांड टर्मिनल में टाइप करेंगे, तो नीचे दिखाया गया पेज अपने आप खुल जाना चाहिए:
macOS पर:
1. pip इंस्टॉल करें:
2. pipenv इंस्टॉल करें:
3. अपना environment बनाएं। अपने प्रोजेक्ट फ़ोल्डर को खोलें:
4. pipenv environment बनाएं:
5. Streamlit इंस्टॉल करने के लिए यह कमांड टाइप करें:
जांचें कि इंस्टॉलेशन सफल रहा या नहीं:
Linux पर:
1. pip इंस्टॉल करें:
2. pipenv इंस्टॉल करें:
3. अपना environment बनाएं। अपने प्रोजेक्ट फ़ोल्डर को खोलें:
4. pipenv environment बनाएं:
5. Streamlit इंस्टॉल करने के लिए यह कमांड टाइप करें
6. जांचें कि इंस्टॉलेशन सफल रहा या नहीं:
अपना Streamlit कोड कैसे चलाएं
Streamlit कमांड लिखना और समझना आसान है। केवल एक साधारण कमांड से आप टेक्स्ट, मीडिया, विजेट्स, ग्राफ़ आदि दिखा सकते हैं।
Streamlit के साथ टेक्स्ट दिखाएं
यहां मैं दिखाऊंगा कि अपने Streamlit ऐप में टेक्स्ट कैसे जोड़ें और कौन-कौन से कमांड उपलब्ध हैं।
st.write(): यह फ़ंक्शन फॉर्मेटेड स्ट्रिंग से लेकर matplotlib figure में चार्ट, Altair चार्ट, plotly figure, डेटा फ़्रेम, Keras मॉडल आदि—कुछ भी वेब ऐप में जोड़ने के लिए उपयोग होता है।st.title(): यह फ़ंक्शन ऐप का शीर्षक जोड़ने देता है।st.header(): किसी अनुभाग का हेडर सेट करने के लिए।st.markdown(): किसी अनुभाग का मार्कडाउन सेट करने के लिए।st.subheader(): किसी अनुभाग का उप-हेडर सेट करने के लिए।st.caption(): कैप्शन लिखने के लिए।st.code(): कोड दिखाने के लिए।st.latex(): LaTeX के रूप में फॉर्मेट किए गए गणितीय व्यंजकों को दिखाने के लिए।Streamlit के साथ इमेज, वीडियो या ऑडियो फ़ाइल दिखाएं
इमेज, वीडियो और ऑडियो फ़ाइलें दिखाने के लिए Streamlit जैसे आसान फ़ंक्शंस आपको कहीं और नहीं मिलेंगे। चलिए देखते हैं कि Streamlit से मीडिया कैसे दिखाएं!
st.image(): इमेज दिखाने के लिए।st.audio(): ऑडियो दिखाने/चलाने के लिए।st.video(): वीडियो दिखाने/चलाने के लिए।इनपुट विजेट्स
विजेट्स सबसे महत्वपूर्ण यूजर इंटरफ़ेस कॉम्पोनेन्ट होते हैं। Streamlit में विभिन्न विजेट्स हैं जिनसे आप बटन्स, स्लाइडर्स, टेक्स्ट इनपुट्स आदि के माध्यम से सीधे अपने ऐप में इंटरएक्टिविटी जोड़ सकते हैं।
st.checkbox(): यह फ़ंक्शन एक बूलियन वैल्यू लौटाता है। जब बॉक्स चेक होता है तो True लौटाता है, अन्यथा False।st.button(): बटन विजेट दिखाने के लिए।st.radio(): रेडियो बटन विजेट के लिए।st.selectbox(): सेलेक्ट विजेट के लिए।st.multiselect(): मल्टीसेलेक्ट विजेट के लिए।st.select_slider(): सेलेक्ट स्लाइडर विजेट के लिए।st.slider(): स्लाइडर विजेट के लिए।st.number_input(): संख्यात्मक इनपुट विजेट के लिए।st.text_input(): टेक्स्ट इनपुट विजेट के लिए।st.date_input(): तिथि चुनने के लिए डेट इनपुट विजेट।st.time_input(): समय चुनने के लिए टाइम इनपुट विजेट।st.text_area(): बहु-पंक्ति टेक्स्ट इनपुट विजेट।st.file_uploader(): फ़ाइल अपलोडर विजेट।st.color_picker(): रंग चुनने के लिए कलर पिकर विजेट।Streamlit के साथ प्रोग्रेस और स्टेटस दिखाएं
अब हम देखेंगे कि अपने ऐप में प्रोग्रेस बार और error तथा success जैसे स्टेटस संदेश कैसे जोड़ें।
st.balloons(): जश्न के लिए गुब्बारे दिखाता है।st.progress(): प्रोग्रेस बार दिखाता है।st.spinner(): निष्पादन के दौरान अस्थायी प्रतीक्षा संदेश दिखाता है।st.success(): सफलता संदेश दिखाता है।st.error(): त्रुटि संदेश दिखाता है।st.warning(): चेतावनी संदेश दिखाता है।st.info(): सूचना संदेश दिखाता है।st.exception(): एक्सेप्शन संदेश दिखाता है।साइडबार और कंटेनर
आप अपने पेज पर साइडबार या कंटेनर भी बना सकते हैं ताकि ऐप को व्यवस्थित रखा जा सके। आपके ऐप पर पेजों की संरचना और व्यवस्था उपयोगकर्ता अनुभव पर बड़ा प्रभाव डाल सकती है। सामग्री को व्यवस्थित करके, आप विज़िटर्स को आपकी साइट समझने और उस पर नेविगेट करने में मदद करते हैं, जिससे उन्हें अपनी जरूरत की चीज़ें जल्दी मिलती हैं और भविष्य में वापसी की संभावना बढ़ती है।
साइडबार
st.sidebar()में कोई एलिमेंट पास करने से वह बाईं ओर पिन हो जाएगा, जिससे उपयोगकर्ता आपके ऐप की मुख्य सामग्री पर ध्यान केंद्रित कर सकेंगे।लेकिन
st.spinner()औरst.echo()st.sidebar के साथ समर्थित नहीं हैं।जैसा कि आप देखते हैं, आप अपने ऐप इंटरफ़ेस में साइडबार बना सकते हैं और उसमें एलिमेंट्स रख सकते हैं, जिससे आपका ऐप अधिक सुव्यवस्थित और समझने में आसान बनता है।
कंटेनर
st.container()का उपयोग एक अदृश्य कंटेनर बनाने के लिए किया जाता है जिसमें आप एलिमेंट्स रखकर उपयोगी व्यवस्था और अनुक्रम बना सकते हैं।Streamlitके साथ ग्राफ़ दिखाएंStreamlit लोकप्रिय Python विज़ुअलाइज़ेशन लाइब्रेरीज़ के साथ इंटीग्रेट करता है। यहां आउट-ऑफ-द-बॉक्स उपलब्ध चार्टिंग फ़ंक्शंस दिए गए हैं:
st.pyplot(): matplotlib.pyplot फ़िगर दिखाने के लिए।st.line_chart(): लाइन चार्ट दिखाने के लिए।st.bar_chart(): बार चार्ट दिखाने के लिए।st.area_chart(): एरिया चार्ट दिखाने के लिए।st.altair_chart(): Altair चार्ट दिखाने के लिए।st.graphviz_chart(): ग्राफ़ ऑब्जेक्ट्स दिखाने के लिए, जिन्हें अलग-अलग नोड्स और एजेज़ से बनाया जा सकता है।Streamlit के साथ मानचित्र दिखाएं
st.map(): ऐप में मानचित्र दिखाने के लिए उपयोग होता है। हालांकि, इसके लिए latitude और longitude के मान चाहिए होते हैं और ये मान null/NA नहीं होने चाहिए।थीम्स
आप अपनी स्टाइल को दर्शाने वाली थीम भी चुन सकते हैं। नीचे दिए गए GIF में चरणों का पालन करें:
और यदि आप स्टाइलिंग और थीम्स के बारे में अधिक सीखने में रुचि रखते हैं, तो Theming देख सकते हैं।
अब, एक साथ मिलकर एक ऐप बनाने का समय है!
Streamlit के साथ एक मशीन लर्निंग एप्लिकेशन बनाएं
इस खंड में, मैं आपको एक प्रोजेक्ट के माध्यम से ले जाऊंगा जो मैंने loan prediction पर बनाया था।
लोन से होने वाला मुख्य लाभ सीधे लोन के ब्याज से आता है। लोन कंपनियां एक गहन सत्यापन और मान्यकरण प्रक्रिया के बाद लोन स्वीकृत करती हैं। फिर भी, उन्हें यह आश्वासन नहीं होता कि आवेदक बिना किसी कठिनाई के लोन चुका पाएगा। इस ट्यूटोरियल में, हम एक प्रिडिक्टिव मॉडल (Random Forest Classifier) बनाएंगे जो किसी आवेदक के लोन स्टेटस का पूर्वानुमान लगाएगा। हमारा लक्ष्य है कि इसे प्रोडक्शन में उपलब्ध कराने के लिए एक वेब ऐप तैयार करें।
हमारे ऐप के लिए आवश्यक लाइब्रेरीज़ को इम्पोर्ट करने से शुरू करते हैं:
इस ऐप में हम कई विजेट्स का उपयोग करेंगे, जैसे स्लाइडर्स: साइडबार मेनू में selectbox और radio, जिनके लिए हम कुछ Python फ़ंक्शंस तैयार करेंगे। उदाहरण एक सरल डेमो होगा जिसमें दो पेज होंगे। होमपेज पर, यह हमारे चुने गए डेटा को दिखाएगा, जबकि Exploration पेज आपको प्लॉट्स में वेरिएबल्स को विज़ुअलाइज़ करने देगा, और Prediction पेज में वेरिएबल्स होंगे और Predict नामक बटन होगा जो आपको लोन स्टेटस का अनुमान लगाने देगा। नीचे दिया गया कोड साइडबार पर एक selectbox देता है जो आपको पेज चुनने की अनुमति देता है। डेटा cached रहता है ताकि उसे बार-बार रीलोड न करना पड़े।
@st.cache_dataअनुशंसित कैशिंग डेकोरेटर है (अब अप्रचलित@st.cacheका स्थान लेता है) जो वेब से डेटा लोड करते समय, बड़े डेटासेट्स में हेरफेर करते समय, या महंगे computation चलाते समय आपके ऐप को performant रखता है। सीरियलाइज़ेबल डेटा जैसे DataFrames और स्ट्रिंग्स के लिए@st.cache_dataका उपयोग करें, और ग्लोबल संसाधनों जैसे डेटाबेस कनेक्शंस या ML मॉडल्स के लिए@st.cache_resourceका।होम पेज पर, हम दिखाएंगे: प्रेजेंटेशन तस्वीर / डेटासेट / applicant income और loan amount का हिस्टोग्राम।
नोट: पेजेस के बीच स्विच करने के लिए हम if/elif/else का उपयोग करेंगे।
हम loan_dataset.csv को data वेरिएबल में लोड करेंगे जिससे होम पेज पर इसकी कुछ पंक्तियां दिखा सकें।
फिर Prediction पेज पर:
हमने दो फ़ंक्शंस
get_value(val,my_dict)औरget_fvalue(val)औरfeature_dictजैसे डिक्शनरीज़ लिखीं ताकिst.sidebar.radio()को non-numeric वेरिएबल्स के साथ प्रबंधित किया जा सके। यह वैकल्पिक है; आप आसानी से ऐसा भी कर सकते हैं:आइए देखें कि हमने ऐसा क्यों किया।
नोट: मशीन लर्निंग एल्गोरिदम categorical वेरिएबल्स को संभाल नहीं सकते। डेटासेट में, मैंने कुछ फीचर इंजीनियरिंग की है। उदाहरण के लिए, Married कॉलम में दो मान हैं 'Yes' और 'No' और मैंने Label Encoding किया (बेहतर समझ के लिए देख लें) ताकि "NO" 1 के बराबर और "Yes" 2 के बराबर हो जाए। फ़ंक्शन get_fvalue(val) ग्राहक द्वारा चुने गए विकल्प पर निर्भर करते हुए आसानी से मान (1/2) लौटाएगा। यही बात get_value(val,my_dict) फ़ंक्शन पर भी लागू होती है। दोनों फ़ंक्शंस में अंतर यह है कि पहला yes/no फीचर्स पर काम करता है और दूसरा तब जब हमारे पास एक से अधिक श्रेणियां हों (उदा.: Gender)।
जैसा कि हम देखते हैं, Dependents वेरिएबल में चार श्रेणियां हैं '0','1', '2' और '3+' और हम इसे सीधे संख्यात्मक वेरिएबल में परिवर्तित नहीं कर सकते, और हमारे पास '+3' भी है जिसका अर्थ है Dependents 3,4,5 ... हो सकता है। हमने One Hot Encoding किया (बेहतर समझ के लिए देख लें)। इसलिए, हमने चार एलिमेंट्स वाला साइडबार रेडियो बनाया और प्रत्येक का एक बाइनरी वेरिएबल है; यदि ग्राहक ने '0' चुना तो class_0 1 होगा और बाकी 0 होंगे।
हमने Property_Area के लिए भी One Hot Encoding किया, इसलिए हमने 3 वेरिएबल्स बनाए (Rural,Urban,Semiurban)। जब Rural 1 होगा तो बाकी 0 होंगे।
इस प्रकार हमने देखा कि कब हम अपने फीचर्स को label या one hot encode करते हैं और Streamlit ऐप को सफलतापूर्वक चलाने के लिए इससे कैसे निपटते हैं।
अब हम अपनी वेरिएबल्स को एक डिक्शनरी में स्टोर करेंगे क्योंकि हमने डिक्शनरीज़ के साथ काम करने के लिए
get_value(val,my_dict)औरget_fvalue(val)लिखे हैं। उसके बाद, इनपुट—जो क्लाइंट हमारे Streamlit ऐप में चुनेगा—उसेfeature_listनामक सूची में रखा जाएगा और फिरsingle_sampleनामक numpy वेरिएबल में।नोट: फीचर्स के इनपुट्स का क्रम डेटासेट कॉलम्स के क्रम के समान होना चाहिए (उदाहरण:
MarriedकोGenderका इनपुट नहीं मिलना चाहिए)।अंत में, हम अपने सेव किए गए RandomForestClassifier मॉडल को
loaded_modelमें लोड करेंगे और उसकी भविष्यवाणी, जो 0 या 1 (वर्गीकरण समस्या) होती है, कोpredictionमें रखेंगे। .gif फाइलेंfileऔरfile_में संग्रहीत होंगी।predictionके मान के आधार पर, बैंक से ऋण पाने के लिए हमारे पास दो स्थितियाँ होंगी: "Success" या "Failed"।यह है हमारी Prediction पेज:
FAILURE के मामले में, आउटपुट इस प्रकार दिखेगा:
SUCCESS के मामले में, आउटपुट इस प्रकार दिखेगा:
Streamlit ऐप को कैसे डिप्लॉय करें
डिप्लॉयमेंट वह प्रक्रिया है जिसके माध्यम से एप्लिकेशन डेवलपर्स से उपयोगकर्ताओं तक पहुँचाए जाते हैं।
किसी एप्लिकेशन को डिप्लॉय करना एक विशिष्ट बेस URL पर उस एप्लिकेशन की कॉपी बनाना, कॉन्फ़िगर करना और सक्षम करना है। एक बार डिप्लॉयमेंट प्रक्रिया पूरी हो जाने के बाद, एप्लिकेशन उस बेस URL पर सार्वजनिक रूप से सुलभ हो जाता है। सर्वर यह दो-चरणीय प्रक्रिया इस तरह करता है कि पहले एप्लिकेशन को स्टेज करता है, और सफल स्टेजिंग के बाद उसे सक्रिय करता है।
आइए सीखते हैं कि Streamlit ऐप कैसे डिप्लॉय करें!
अपना ऐप डिप्लॉय करने से पहले, आपको अपने GitHub पर एक नया रेपो बनाना होगा, जहाँ आप अपने ऐप का कोड और डिपेंडेंसीज़ रखेंगे।
इसके बाद, परिवर्तनों को सहेजने के लिए Commit changes पर क्लिक करें:
रेपो बनाने और फाइलें अपलोड करने के बाद, आपको requirements नाम की एक नई फाइल बनानी होगी, जिसमें आप अपने ऐप में उपयोग की गई लाइब्रेरीज़ डालेंगे।
पहले, Create new file पर क्लिक करें।
अब आप अपने ऐप को डिप्लॉय करने से एकदम क़रीब हैं, बस इस लिंक पर जाएँ।
फिर ये चरण अपनाएँ:
Deploy पर क्लिक करें और थोड़ा इंतज़ार करें!
आपके ब्राउज़र में अपने-आप एक पेज खुल जाएगा! यह पेज आपका Streamlit से बना प्रोजेक्ट ऐप है।
बधाई हो, आपने सफलतापूर्वक अपना ऐप डिप्लॉय कर लिया है! डिप्लॉय किए गए ऐप को देखने के लिए यहाँ क्लिक करें।
अधिक डाक्यूमेंटेशन के लिए, इस लिंक पर जाएँ: docs.streamlit.io