Contents

Streamlit 入門:實用指南

Streamlit 是一個開源 Python 庫,用於為數據科學和機器學習項目創建 Web 應用程序。它旨在供不具備廣泛前端開發技能的數據科學家和機器學習工程師使用。它具有簡單的語法,允許您使用幾行代碼創建交互式 Web 應用程序。

Streamlit 通過提供一個直觀的平台來簡化複雜技術方面的呈現,從而促進創建交互式應用程序的過程。因此,用戶可以集中精力實時檢查和展示他們的數據、原型或模型。因此,此功能使他們能夠快速有效地傳播見解。

安裝 Streamlit 庫

創建一個新的虛擬環境。這將確保安裝 Streamlit 後不會出現軟件包版本衝突。然後使用 pip 通過運行以下命令來安裝 Streamlit:

 pip install streamlit

然後,驗證安裝是否正確安裝。

 streamlit --version

成功安裝 Streamlit 後,將顯示已安裝的 Streamlit 的當前版本。

構建一個簡單的數據清理和分析應用程序

為了熟練地利用 Streamlit 的功能並了解其功能範圍,您將開發一個用戶友好的 Web 應用程序,使用戶能夠上傳數據集以進行清理、後續數據分析以及最終實現所述信息的可視化。

完整的源代碼可以通過 GitHub 存儲庫訪問,該存儲庫可供公眾訪問和協作。

安裝並導入必要的庫

首先,通過以下命令在安裝 Streamlit 的虛擬環境中安裝 Pandas、Matplotlib 和 Seaborn:

 pip install pandas matplotlib seaborn

首先,我們將首先建立一個新的 Python 腳本,並將之前安裝的所有模塊合併到其中。

 import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 

發表評論

上傳數據集並顯示其內容

給定的任務需要實現一個函數來處理上傳的數據集的讀取並進行相應的處理。此函數應驗證提供的文件是否確實是有效的 CSV(逗號分隔值)文件。如果文件不符合此格式,該函數應在應用程序的側欄中顯示相應的錯誤消息。相反,如果文件成功讀取為 CSV,該函數應創建一個 DataFrame 以供進一步分析。

 def load_data(uploaded_file):
   try:
       df = pd.read_csv(uploaded_file)
       return df
   except Exception as e:
       st.sidebar.error('Error occurred while loading the file.'
                        ' Please make sure it is a valid CSV file.')
       return None

下面是如何使用 Streamlit 的 checkboxdataframesubheader 函數定義一個名為 display\_raw\_data 的新函數的示例:pythondef display_raw_data():# 檢查“Show Raw Data”複選框是否被選中。.button(“顯示原始數據”, type=“markdown”):# 將原始數據顯示為表格df=pd.DataFrame(raw_data)title=“原始數據”st.table(df, subcaption=title)

 def explore_raw_data(df):
   st.subheader('Raw Data')
   if st.checkbox('Show Raw Data'):
       st.dataframe(df)

生成 DataFrame 並以其原始形式呈現原始數據後,必須對數據執行徹底的清理過程,以消除數據收集過程中可能出現的任何不一致或錯誤。這涉及識別和糾正任何缺失值、重複項或不正確的條目。完成此步驟後,下一階段是使用回歸分析或假設檢驗等統計技術對數據進行分析,以揭示數據內的模式和關係。最後,分析數據後,您可以創建各種類型的圖表和圖形來直觀地表示您的分析結果,以便其他人更好地理解和解釋。

執行數據清理

該過程首先創建一個函數,負責對所提供的 DataFrame 進行數據清理操作。這包括解決框架內缺失值的任何實例,以及識別和消除任何重複的行條目。隨後,一旦這些任務成功執行,經過徹底審查和完善的 DataFrame 將通過使用“st.dataframe”方法向最終用戶展示。只有在用戶通過切換“顯示已清理數據”布爾切換開關進行確認後,才會顯示這個經過精心清理的數據集。

 def data_cleaning(df):
   st.header('Data Cleaning')

   # Remove Missing Values
   st.subheader('Handling Missing Values')
   df.dropna(inplace=True)
   st.write("Missing values removed from the dataset.")

   # Remove Duplicate Rows
   st.subheader('Removing Duplicate Rows')
   initial_rows = len(df)
   df.drop_duplicates(inplace=True)
   final_rows = len(df)
   st.write(f"Removed {initial_rows-final_rows} duplicate rows.")

   if st.checkbox('Show Cleaned Data'):
       st.dataframe(df)

該功能還顯示已消除的重複行的總數。

執行數據分析

當然,這裡有一個Pandas 中的示例代碼片段,演示瞭如何使用seaborn 庫定義用於顯示描述性統計數據和相關性熱圖的數據分析函數:pythonimport pandas as pdimport seaborn as snsfrom scipy import statsdefanalyze_data(df): # Displaysummarystatisticsprint( “匯總統計:\n”, df.describe())# 顯示列之間的相關性corr=df.corr()print("\nCorrelations:\n”)sns.heatmap(corr, annot=True)return Noneanalyze_data(df)在此示例中,我們首先導入必要的庫,包括 Pandas、Seaborn 和 SciPy

 def data_analysis(df):
   st.header('Data Analysis')

   # Descriptive Statistics
   st.subheader('Descriptive Statistics')
   st.write(df.describe())

   # Correlation Matrix
   st.subheader('Correlation Matrix')
   corr_matrix = df.corr()
   fig, ax = plt.subplots(figsize=(10, 8))
   sns.heatmap(corr_matrix, annot=True, cmap='coolwarm',
               center=0, ax=ax)
   st.pyplot(fig) 

可以修改上述函數以促進額外的數據分析,從而能夠從給定的數據集中提取進一步的見解。

執行數據可視化

數據可視化是應用程序中的一項重要功能,它為用戶提供了一種通過易於訪問且用戶友好的可視化表示來理解和解釋數據的方法。因此,自定義繪圖外觀的能力至關重要,允許用戶根據自己的特定偏好或要求定制可視化效果。

為了執行此任務,有必要開發一個功能,使用戶能夠選擇特定的列,指定所需的箱劃分數量,並確定直方圖的特定顏色。隨後,該函數應生成直方圖和箱線圖,並利用 Python 中的 st.pyplot 模塊顯示這些可視化效果。

 def data_visualization(df):
   st.header('Data Visualization')

   # Histogram
   st.subheader('Histogram')
   selected_column = st.selectbox("Select a column to visualize:",
                                  df.columns)
   num_bins = st.slider("Select number of bins:",
                        min_value=5, max_value=50, value=20)
   plot_color = st.color_picker("Select histogram color", "#1f77b4")
   plt.figure(figsize=(8, 6))
   plt.hist(df[selected_column], bins=num_bins, edgecolor='black',
            color=plot_color, alpha=0.7)
   plt.xlabel(selected_column)
   plt.ylabel('Frequency')
   st.pyplot(plt)

   # Box Plot
   st.subheader('Box Plot')
   selected_column = st.selectbox("Select a column for box plot:",
                                  df.columns)
   plot_color = st.color_picker("Select box plot color", "#1f77b4")
   plt.figure(figsize=(8, 6))
   sns.boxplot(x=df[selected_column], color=plot_color)
   plt.xlabel(selected_column)
   plt.ylabel('Value')
   st.pyplot(plt) 

到目前為止,您已經具備了該應用程序的基本功能。

收集用戶反饋

在某些情況下,可以想像某個功能可能會表現出不可預見的行為。在這種情況下,必須讓用戶能夠表達他們對此的看法。實現這一目標的常見方法是利用電子郵件作為通信媒介。儘管 Streamlit 提供了一種通過其直觀的界面收集用戶反饋的方法,但它本質上並不支持直接電子郵件傳輸功能。儘管如此,人們可以合併其他庫或第三方服務,以方便從應用程序本身內部發送電子郵件。

為了征求用戶的意見和反饋,有必要創建一個功能界面,使用戶能夠以網絡表單的形式填寫調查或問卷。這可以通過在代碼庫中定義一個函數來實現,該函數向用戶呈現一個交互式表單,其中包含供用戶輸入響應的各種輸入字段。該表格可能包括封閉式問題(例如多項選擇)和開放式問題(例如文本輸入框),具體取決於用戶反饋所需的詳細程度和特異性。此外,該函數應提供適當的驗證和錯誤處理機制,以確保數據完整性和可用性。

 def feedback_form():
   st.header('Feedback')
   with st.form('Feedback Form'):
       email = st.text_input("Your Email")
       feedback = st.text_area("Feedback")
       submitted = st.form_submit_button("Submit Feedback")
       if submitted:
           # Here, you can send the feedback to the developer's
           # email using external services/APIs
           st.success("Thank you for your feedback!") 

請填寫以下表格,其中包含您的聯繫信息和反饋,這些信息將通過電子郵件發送給我們,以便我們酌情進行審核和採取行動。

控製程序流程並運行應用程序

最後,必須實現一個集成上述各種功能並控制軟件進程的主要功能。此外,此功能應要求用戶在處理任何提交的數據集之前遵守指定的數據隱私規定。

 def main():
   st.title('Data Cleaning, Analysis, and Visualization App')

   st.sidebar.header('Upload Dataset')
   uploaded_file = st.sidebar.file_uploader('Upload a CSV file', type=['csv'])

   agree_terms = st.sidebar.checkbox("I agree to the terms")

   if uploaded_file is not None and agree_terms:
       df = load_data(uploaded_file)

       if df is not None:
           explore_raw_data(df)
           data_cleaning(df)
           data_analysis(df)
           data_visualization(df)

           feedback_form()

運行 Python 腳本時,可以選擇將其作為獨立程序執行,或者通過使用 ` if __name__==’__main__‘結構將其內容作為模塊導入。這使得代碼的執行方式更加靈活,並且能夠在更大的項目中實現模塊化。

 if __name__ == '__main__':
   main() 

請前往終端並找到存儲項目的目錄。導航到該位置後,執行以下命令來啟動應用程序:

 streamlit run main.py

在主文件(表示為“main.py”)中執行指定操作後,Streamlit 將自動生成兩個不同的 URL-一個用於本地訪問,另一個用於遠程連接。這些 URL 可供您使用,並可用於促進與您的應用程序的交互。

/bc/images/getting-started-with-streamlit-a-practical-guide-output-image.jpg

後續產品輸出表示如下:

您的瀏覽器不支持視頻標籤。

為數據科學構建基於互聯網的動態應用程序的過程已經變得越來越容易,只需極少的網絡開發熟練程度即可為項目創建直觀的界面。

你還應該學習 Web 開發嗎?

一個人應該在多大程度上追求網絡開發技能來創建具有復雜功能的強大網絡應用程序將取決於他們的個人目標。如果需要一套全面的功能,包括精心設計的用戶界面設計和高級功能,那麼掌握 Web 開發技術可能會很有優勢。然而,值得注意的是,與其他方法相比,使用 Streamlit 時,操作應用程序視覺呈現和功能的微小細節的靈活性較低。