您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么使用Python構建一個儀表板”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Python構建一個儀表板”吧!
如果你目前在一個數據或商業智能團隊工作,你的任務之一可能是制作一些每日、每周或每月的報告。
雖然獲得這些報告并不困難,但還是需要花費不少時間。我們的寶貴時間應該花在更困難的任務上,如訓練神經網絡或建立數據管道架構。
因此,對于這些平凡的重復性報告,節省我們時間的最好方法是建立一個網絡應用程序,其他團隊可以自己訪問和下載報告。
我說的不是Tableau或PowerBI這樣的付費工具(如果公司預算充足的話,你可以使用它們)。有一些高級的網絡框架,比如Flask和Django,通常用于建立一個正常運作的網站。
但是,對于一個快速的網絡儀表盤來報告指標和數字,你可以考慮使用Streamlit,這是一個相對較新的網絡框架,是為ML從業者和數據科學團隊建立的。它使用起來非常簡單和直觀。
我將通過使用一個群組分析的例子來指導你如何構建和部署它。
對于每個部分,我將介紹一個代碼模板(你可以在你自己的項目中重新使用)和我的代碼(用于本文中使用的隊列分析例子)。
創建一個Python文件
在終端上運行該文件,在本地機器上看到儀表板
部署給其他團隊使用
我們必須創建一個Python文件,以后我們可以從終端調用該文件,在瀏覽器上顯示結果。
你可以給這個文件取任何你想要的名字。這里我把它叫做cohort-demo.py
。
代碼模板
# 這些數據可以在公眾號后臺回復【云朵君】,聯系作者獲取。 # 1.導入必要的庫 import pandas as pd import numpy as np import streamlit as st # 2.設置頁面配置 st.set_page_config( page_title="This is my title", # 頁面的標題 page_icon="????", # favicon layout="wide", ) # 3.定義你的項目中使用的所有函數 # 4.對于每一個函數,在其前面添加"@st.experimental_memo"。這就是 # 來記憶每個函數的執行。這將使應用程序運行得更快。 # 特別是當用戶與儀表盤上的一些元素互動時 @st.experimental_memo def function(x): return y
組群分析
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import matplotlib as mpl from datetime import date, datetime import streamlit as st st.set_page_config( page_title="Cohorts Dashboard", page_icon="????", layout="wide", ) @st.experimental_memo def purchase_rate(customer_id): purchase_rate = [1] counter = 1 for i in range(1,len(customer_id)): if customer_id[i] != customer_id[i-1]: purchase_rate.append(1) counter = 1 else: counter += 1 purchase_rate.append(counter) return purchase_rate @st.experimental_memo def join_date(date, purchase_rate): join_date = list(range(len(date))) for i in range(len(purchase_rate)): if purchase_rate[i] == 1: join_date[i] = date[i] else: join_date[i] = join_date[i-1] return join_date # 我沒有在這里定義所有的函數,因為這將延長文章的篇幅。 # 我將在文章的最后提供完整的代碼。
現在我們建立第一個屏幕,如下所示。這將首先讓用戶上傳文件,然后運行以產生輸出。
代碼模板:你可以用任何名字替換 "my_company
"。
st.title("Cohort Interactive Dashboard Demo") st.markdown(""" This webapp performs cohort analysis of my_company data! * **Python libraries used:** base64, pandas, streamlit, numpy, matplotlib, seaborn * **Data source:** [Shopify](https://company_name.myshopify.com/admin) * You need to select the data file first to proceed. """) uploaded_file = st.file_uploader("Choose a file") # 來上傳文件
一旦用戶上傳了一個文件,下一個屏幕將看起來像這樣。
為了建立這個,我們需要。
選擇群組的類型:這是一個單一的選擇。它可以是獨特的客戶保留率,或百分比或AOV(平均訂單價值)方面的。
選擇隊列:這是多選擇。人們可以看一個特定的隊列或更多。
代碼模板
If uploaded_file is not None:# 這很重要,因為沒有這個。 # 當沒有上傳的文件時,會出現 # 一個錯誤,因為df沒有被定義.... df = pd.read_csv(upload_file) # 讀取該文件 df_processed = process_df(df) # 清潔數據 # 儀表盤標題 st.header("Live Dashboard") # 過濾器 first_filter = st.selectbox('Select first filter',['Option 1', 'Option 2', 'Option 3]) second_filter = st.multiselect('Select second filter', ['Option 1','Option 2','Option 3','Option 4']) output = display_function(data_input,first_filter,second_filter) st.dataframe(output) st.download_button(label='Download csv', data=output.to_csv(), mime='text/csv') # 來下載該文件
組群分析
if uploaded_file is not None: df = pd.read_csv(uploaded_file) df_processed = process_df(df) df_cohorts = cohort_numbers(df_processed) cohorts = cohort_percent(df_cohorts) # 通過使用f-strings動態標題 st.header(f"Live {cohorts.index[0]} to {cohorts.index[-1]} Cohort Dashboard") # 過濾器 first_filter= st.selectbox('Select type of cohort',['By unique customers', 'By percentage', 'By AOV']) second_filter = st.multiselect('Select cohort', list(cohorts.index)) output = select_which_table_to_draw(df_processed,first_filter,second_filter) st.dataframe(output) st.download_button(label='Download csv', data=output.to_csv(), mime='text/csv')
最后建立3個指標
代碼模板
kpi1, kpi2, kpi3 = st.columns(3) # 創建三個占位符 if uploaded_file is not None: aov = np.mean(df['total_sales']) aov_goal = 95.00 kpi1.metric( # 給這個指標貼上標簽 label="AOV", # 計算度量值 value=f"$ {round(aov,2)}", # 計算與目標相比的變化(向上/向下箭頭) delta=f"-${round(aov_goal-aov,2)}" if aov_goal>aov else f"${round(aov-aov_goal,2)}", ) nc = np.mean(df.loc[df['customer_type']=='First-time'].groupby(['day']).count()['customer_id']) nc_goal = 30 kpi2.metric( label="New customers/day", value=int(nc), delta=f"-{round((nc_goal-nc)/nc_goal*100,2)}%" if nc_goal>nc else f"{round((nc - nc_goal)/nc_goal*100,0)}%", ) rc = np.mean(df.loc[df['customer_type']=='Returning'].groupby(['day']).count()['customer_id']) rc_goal = 250 kpi3.metric( label="Returning customers/day", value= int(rc), delta=f"-{round((rc_goal - rc)/rc_goal*100,2)}%" if rc_goal>rc else f"{round((rc-rc_goal)/rc_goal*100,2)}%" )
streamlit run cohort-demo.py
在右上角,你會看到一個選項,即每當你編輯cohort-demo.py時總是運行。
首先在你的GitHub賬戶上創建GitHub倉庫
創建requirements.txt、setup.sh和Procfile
requirements.txt(這是為了添加你在cohort-demo.py中使用的所有必要庫。)
#只是簡單地列出所有的庫。你也可以包括版本
pandas
numpy
streamlit
matplotlib
seaborn
datetime
plotly
setup.sh
#只要復制和粘貼這個 mkdir -p ~/.streamlit/ echo "\ [server]\n\ headless = true\n\ port = $PORT\n enableCORS = false\n \n\ " > ~/.streamlit/config.toml
Procfile
web: sh setup.sh && streamlit run cohort-demo.py
將cohort-demo.py
上傳至資源庫
打開Heroku(你應該在Heroku上創建一個賬戶)。
在右上角,點擊 "Create new app
"
在部署方式下,選擇GitHub
然后將GitHub賬戶連接到Heroku。然后輸入倉庫的名稱(在本例中,它是cohort_analysis_demo)。
一旦連接,在手動部署下,點擊部署分支
到這里我們只需要等待它的部署。然后就完成了!URL鏈接將被創建。
剛剛將儀表盤部署到生產中,團隊成員現在可以自己訪問和分析數據。
他們可以簡單地上傳任何符合你定義的格式的數據集。即本例中的客戶交易數據。
最終結果
到此,相信大家對“怎么使用Python構建一個儀表板”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。