欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)構(gòu)建一個儀表板的示例代碼

 更新時間:2023年03月10日 15:28:22   作者:云朵君  
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)構(gòu)建一個儀表板,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以了解一下

這將為我們的團(tuán)隊(duì)節(jié)省每天重復(fù)的數(shù)據(jù)處理時間......

簡介

如果你目前在一個數(shù)據(jù)或商業(yè)智能團(tuán)隊(duì)工作,你的任務(wù)之一可能是制作一些每日、每周或每月的報告。

雖然獲得這些報告并不困難,但還是需要花費(fèi)不少時間。我們的寶貴時間應(yīng)該花在更困難的任務(wù)上,如訓(xùn)練神經(jīng)網(wǎng)絡(luò)或建立數(shù)據(jù)管道架構(gòu)。

因此,對于這些平凡的重復(fù)性報告,節(jié)省我們時間的最好方法是建立一個網(wǎng)絡(luò)應(yīng)用程序,其他團(tuán)隊(duì)可以自己訪問和下載報告。

我說的不是Tableau或PowerBI這樣的付費(fèi)工具(如果公司預(yù)算充足的話,你可以使用它們)。有一些高級的網(wǎng)絡(luò)框架,比如Flask和Django,通常用于建立一個正常運(yùn)作的網(wǎng)站。

但是,對于一個快速的網(wǎng)絡(luò)儀表盤來報告指標(biāo)和數(shù)字,你可以考慮使用Streamlit,這是一個相對較新的網(wǎng)絡(luò)框架,是為ML從業(yè)者和數(shù)據(jù)科學(xué)團(tuán)隊(duì)建立的。它使用起來非常簡單和直觀。

內(nèi)容

我將通過使用一個群組分析的例子來指導(dǎo)你如何構(gòu)建部署它。

對于每個部分,我將介紹一個代碼模板(你可以在你自己的項(xiàng)目中重新使用)和我的代碼(用于本文中使用的隊(duì)列分析例子)。

  • 創(chuàng)建一個Python文件
  • 在終端上運(yùn)行該文件,在本地機(jī)器上看到儀表板
  • 部署給其他團(tuán)隊(duì)使用

1.創(chuàng)建一個Python文件

我們必須創(chuàng)建一個Python文件,以后我們可以從終端調(diào)用該文件,在瀏覽器上顯示結(jié)果。

你可以給這個文件取任何你想要的名字。這里我把它叫做cohort-demo.py。

代碼模板

#?這些數(shù)據(jù)可以在公眾號后臺回復(fù)【云朵君】,聯(lián)系作者獲取。
#?1.導(dǎo)入必要的庫
import?pandas?as?pd
import?numpy?as?np
import?streamlit?as?st

#?2.設(shè)置頁面配置
st.set_page_config(
????page_title="This?is?my?title",??#?頁面的標(biāo)題
????page_icon="??",??????????????????#?favicon
????layout="wide",
)

#?3.定義你的項(xiàng)目中使用的所有函數(shù)
# 4.對于每一個函數(shù),在其前面添加"@st.experimental_memo"。這就是
#?來記憶每個函數(shù)的執(zhí)行。這將使應(yīng)用程序運(yùn)行得更快。
#?特別是當(dāng)用戶與儀表盤上的一些元素互動時

@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
??
#?我沒有在這里定義所有的函數(shù),因?yàn)檫@將延長文章的篇幅。
#?我將在文章的最后提供完整的代碼。

現(xiàn)在我們建立第一個屏幕,如下所示。這將首先讓用戶上傳文件,然后運(yùn)行以產(chǎn)生輸出。

代碼模板:你可以用任何名字替換 "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")?#?來上傳文件

一旦用戶上傳了一個文件,下一個屏幕將看起來像這樣。

為了建立這個,我們需要。

  • 選擇群組的類型:這是一個單一的選擇。它可以是獨(dú)特的客戶保留率,或百分比或AOV(平均訂單價值)方面的。
  • 選擇隊(duì)列:這是多選擇。人們可以看一個特定的隊(duì)列或更多。

代碼模板

If?uploaded_file?is?not?None:#?這很重要,因?yàn)闆]有這個。
?????????????????????????????#?當(dāng)沒有上傳的文件時,會出現(xiàn)
?????????????????????????????#?一個錯誤,因?yàn)閐f沒有被定義....
??df?=?pd.read_csv(upload_file)?#?讀取該文件
??df_processed?=?process_df(df)?#?清潔數(shù)據(jù)
??
??#?儀表盤標(biāo)題
??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動態(tài)標(biāo)題
????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個指標(biāo)

代碼模板

kpi1,?kpi2,?kpi3?=?st.columns(3)?#?創(chuàng)建三個占位符
if?uploaded_file?is?not?None:
????
????aov?=?np.mean(df['total_sales'])
????aov_goal?=?95.00
????kpi1.metric(
????????#?給這個指標(biāo)貼上標(biāo)簽
????????label="AOV",?
????????#?計(jì)算度量值
????????value=f"$?{round(aov,2)}",
????????#?計(jì)算與目標(biāo)相比的變化(向上/向下箭頭)
????????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)}%"
????)

2.在終端上運(yùn)行該文件,在本地機(jī)器上顯示

streamlit?run?cohort-demo.py

在右上角,你會看到一個選項(xiàng),即每當(dāng)你編輯cohort-demo.py時總是運(yùn)行。

3.在Heroku上部署儀表板

首先在你的GitHub賬戶上創(chuàng)建GitHub倉庫

創(chuàng)建requirements.txt、setup.shProcfile

requirements.txt(這是為了添加你在cohort-demo.py中使用的所有必要庫。)

#只是簡單地列出所有的庫。你也可以包括版本
pandas
numpy
streamlit
matplotlib
seaborn
datetime
plotly

setup.sh

#只要復(fù)制和粘貼這個
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(你應(yīng)該在Heroku上創(chuàng)建一個賬戶)。

在右上角,點(diǎn)擊 "Create new app"

在部署方式下,選擇GitHub

然后將GitHub賬戶連接到Heroku。然后輸入倉庫的名稱(在本例中,它是cohort_analysis_demo)。

一旦連接,在手動部署下,點(diǎn)擊部署分支

到這里我們只需要等待它的部署。然后就完成了!URL鏈接將被創(chuàng)建。

剛剛將儀表盤部署到生產(chǎn)中,團(tuán)隊(duì)成員現(xiàn)在可以自己訪問和分析數(shù)據(jù)。

他們可以簡單地上傳任何符合你定義的格式的數(shù)據(jù)集。即本例中的客戶交易數(shù)據(jù)。

最終結(jié)果

總結(jié)

希望能夠幫助到大家,僅作為一個demo參考。其實(shí)Streamlit可以做很多很酷的事情,如果你像我一樣,在不了解Nodejs、Flask和Django等網(wǎng)絡(luò)開發(fā)框架的情況下,可以使用它來快速創(chuàng)建一個儀表盤。

雖然如此,我仍然相信了解JS/HTML/CSS和軟件工程概念會更有優(yōu)勢。所以我確實(shí)建議你花空閑時間學(xué)習(xí)這些技術(shù)。

到此這篇關(guān)于Python實(shí)現(xiàn)構(gòu)建一個儀表板的示例代碼的文章就介紹到這了,更多相關(guān)Python構(gòu)建儀表板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談在JupyterNotebook下導(dǎo)入自己的模塊的問題

    淺談在JupyterNotebook下導(dǎo)入自己的模塊的問題

    這篇文章主要介紹了淺談在JupyterNotebook下導(dǎo)入自己的模塊的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python datetime包函數(shù)簡單介紹

    Python datetime包函數(shù)簡單介紹

    這篇文章主要介紹了Python datetime包函數(shù)簡單介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 手把手帶你了解python多進(jìn)程,多線程

    手把手帶你了解python多進(jìn)程,多線程

    這篇文章主要介紹了python多線程與多進(jìn)程及其區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-08-08
  • python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    這篇文章主要介紹了python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法

    tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法

    本篇文章主要介紹了tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python sqlparse 解析庫的基礎(chǔ)使用過程解析

    Python sqlparse 解析庫的基礎(chǔ)使用過程解析

    sqlparse 是一個 Python 庫,是一個用于 Python 的非驗(yàn)證 SQL 解析器, 用于解析 SQL 語句并提供一個簡單的 API 來訪問解析后的 SQL 結(jié)構(gòu),這篇文章主要介紹了Python sqlparse 解析庫的基礎(chǔ)使用,需要的朋友可以參考下
    2024-08-08
  • 如何用Pythony驗(yàn)證萬物歸一(考拉咨猜想)

    如何用Pythony驗(yàn)證萬物歸一(考拉咨猜想)

    考拉咨猜想簡單的來說,就是你隨便給我一個整數(shù),我最后都是會通過固定的規(guī)則演變成"1",萬物歸一.今天我們就用那Python驗(yàn)證一下這個猜想
    2021-06-06
  • keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    這篇文章主要介紹了keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • scrapy頭部修改的方法詳解

    scrapy頭部修改的方法詳解

    這篇文章主要給大家介紹了關(guān)于scrapy頭部修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python 輸入字符串生成所有有效的IP地址(LeetCode 93號題)

    python 輸入字符串生成所有有效的IP地址(LeetCode 93號題)

    這篇文章主要介紹了python 生成所有有效的IP地址的方法,幫助大家解答題目,學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10

最新評論