如果有人告訴您可以使用150-200行代碼創建交互式Web應用程序,該怎么辦? 有趣的權利。 Streamlit為您提供了使用簡單的Python腳本和一些streamlit調用來創建漂亮的Web應用程序的相同機會。
Streamlit是一個開放源代碼框架,用于以最快的方式創建數據科學和機器學習應用程序以進行數據探索。 我最喜歡streamlit的地方是它為您提供了實時編碼體驗。 您可以啟動流式應用程序,并且每次保存時,您都會看到代碼同時反映在瀏覽器中。 整齊吧!
在這篇文章中,我們將為印度的Covid-19 Impact Analysis構建一個Streamlit Web應用程序。 我已經創建了完整的網站,您可以在這里瀏覽它-www.corona-updates.in。 我們不會深入研究Pandas,但是本教程將更側重于Streamlit。 我們將研究一些Pandas庫函數,但將深入探討Streamlit。 因此,讓我們開始吧!
要求:
· Streamlit
· Pandas
· plotly.express
使用pip安裝streamlit:
pip install streamlit
安裝完成后,您可以通過運行示例應用程序對其進行測試。
streamlit hello
您可以使用以下命令運行名為App.py的流式Web應用程序:
streamlit run app.py
精通Streamlit之后,現在就創建我們的網絡應用。 創建一個python文件app.py,然后導入您需要創建的庫和python腳本以及streamlit。
1.導入數據庫
我們正在使用以下驚人的API導入數據庫,以了解Covid-19印度的影響:https://api.covid19india.org。
在這里,在load_data()方法中,我們正在使用pandas庫讀取.csv文件,并且通過緩存數據來提高代碼效率。 但是隨著Covid-19的數據不斷變化,我們每5分鐘或最多20個條目清除一次緩存。 如果您有一個不經常更改數據的用例,則只需使用@ st.cache(persist = True)
2.創建標題,文本內容和側邊菜單
Streamlit支持markdown,因此在我們的網絡應用中使用不同的字體大小非常容易。 它還通過傳遞參數來支持html:unsafe_allow_html =對st.markdown()調用正確,因此,我們可以按需要的方式設置文本樣式。
由于我們使用HTML將自定義顏色設為藍色,因此說明顯示為藍色。 我們也可以使用標頭和子標頭,就像我們將st.title()用于不同的標題一樣。 或者我們可以為此使用markdown。
//will also give the same result as st.title()
st.markdown("# Covid-19 Impact in India")
st.sidebar.title('Select the parameters to analyze Covid-19 situation')
3.插入復選框,單選按鈕和滑塊
st.sidebar.checkbox("Show Analysis by State", True, key=1)
select = st.sidebar.selectbox('Select a State',data['State'])
#get the state selected in the selectbox
state_data = data[data['State'] == select]
select_status = st.sidebar.radio("Covid-19 patient's status", ('Confirmed',
'Active', 'Recovered', 'Deceased'))
· 復選框-復選框中的第一個參數定義復選框的標題,第二個參數定義True或False,即默認情況下是否選中它,第三個參數定義復選框的唯一鍵。
· 選擇框—此選擇框包含所有印第安州。 第一個參數是選擇框的標題,第二個參數定義要在選擇框中填充的值的列表。 在這里,第二個參數是我們之前加載的.csv文件中的列名"州"。 您可以自己打開和瀏覽表格。 在下一行中,我們僅從選擇框中獲取state_data中針對所選狀態的數據條目。 我們也可以在此處傳遞關鍵參數。
· 單選按鈕—僅供您參考,我們目前尚未真正在Web應用程序中使用它。 與往常一樣,第一個參數是廣播組的標題,第二個參數接受選項的元組。 我們也可以在此處傳遞關鍵參數。
Plotting a graph
def get_total_dataframe(dataset):
total_dataframe = pd.DataFrame({
'Status':['Confirmed', 'Active', 'Recovered', 'Deaths'],
'Number of cases':(dataset.iloc[0]['Confirmed'],
dataset.iloc[0]['Active'], dataset.iloc[0]['Recovered'],
dataset.iloc[0]['Deaths'])})
return total_dataframe
state_total = get_total_dataframe(state_data)
if st.sidebar.checkbox("Show Analysis by State", True, key=2):
st.markdown("## **State level analysis**")
st.markdown("### Overall Confirmed, Active, Recovered and " +
"Deceased cases in %s yet" % (select))
if not st.checkbox('Hide Graph', False, key=1):
state_total_graph = px.bar(
state_total,
x='Status',
y='Number of cases',
labels={'Number of cases':'Number of cases in %s' % (select)},
color='Status')
st.plotly_chart(state_total_graph)
方法get_total_dataframe()用于獲取數據框,以繪制選定狀態的圖。 dataset.iloc [0] [Confirmed]將返回" Confirmed"列的第一項,并且由于我們僅傳遞所選狀態的數據,因此在" Confirmed"," Recovered"," Active"和" Deceased"列中將只有一個條目。 (檢出.csv文件)
未選中"按狀態顯示分析"復選框,我們不會在主屏幕上看到"狀態級別分析"部分。 同樣,如果選中了"隱藏圖形"復選框,我們將不會看到圖形。
要繪制圖形,我們將使用plotly.express庫的bar方法。 第一個參數是我們要繪制的數據框,第二個參數是x軸的列,第三個參數是y軸的列,如果要更改列名,則labels參數是可選的 對于圖形和顏色參數,此處是根據數據框中的"狀態"列對圖形進行顏色編碼。
最后,為了顯示該圖在我們的Web應用程序中,我們使用st.plotly_chart()方法。 我們也可以使用st.write()來顯示圖形。
5.顯示數據框或表
· st.dataframe():第一張圖片是st.dataframe()的結果,用于第二張圖片中的同一數據集。 您還可以使用內部調用st.datframe()的st.write()。
· st.table():我們使用st.table()獲得了第二張圖片中的表格。 這顯示了數據框中的所有數據,而沒有任何滾動。
def get_table():
datatable = data[['State', 'Confirmed', 'Active', 'Recovered', 'Deaths']].sort_values(by=['Confirmed'], ascending=False)
datatable = datatable[datatable['State'] != 'State Unassigned']
return datatable
datatable = get_table()
st.markdown("### Covid-19 cases in India")
st.markdown("The following table gives you a real-time analysis of the confirmed, active, recovered and deceased cases of Covid-19 pertaining to each state in India.")
st.dataframe(datatable) # will display the dataframe
st.table(datatable)# will display the table
在get_table()中,我們通過從選擇框獲得的狀態的最高"已確認"情況獲得排序后的數據框。 我們還會從數據集中刪除狀態為"未分配狀態"的行。
而已! 是的,就是這么簡單。 :)
您已經準備創建自己的Web應用程序并嘗試使用Streamlit。 這篇文章是關于如何使用簡單的Python腳本創建Streamlit應用程序的,我希望您喜歡它。 我創建了另一本有關如何使用AWS EC2部署此Web應用程序的詳細教程。 請檢查一下,讓我知道您的意見。
我已經為印度的Covid-19 Impact創建了完整的Streamlit Web應用程序,并使用AWS EC2進行了部署。 您可以在這里查看它-www.corona-updates.in。 請在評論部分提供您的寶貴反饋。 謝謝 :)
(本文翻譯自Nishtha Goswami的文章《Using Streamlit to create interactive WebApps from simple Python scripts》,參考:
https://medium.com/swlh/using-streamlit-to-create-interactive-webapps-from-simple-python-scripts-f78b08e486e7)