Python實(shí)現(xiàn)制作銷(xiāo)售數(shù)據(jù)可視化看板詳解
在數(shù)據(jù)時(shí)代,銷(xiāo)售數(shù)據(jù)分析的重要性已無(wú)需贅言。
只有對(duì)銷(xiāo)售數(shù)據(jù)的準(zhǔn)確分析我們才有可能找準(zhǔn)數(shù)據(jù)變動(dòng)(增長(zhǎng)或下滑)的原因。
然后解決問(wèn)題、發(fā)現(xiàn)新的增長(zhǎng)點(diǎn)才會(huì)成為可能!
今天就給大家介紹一個(gè)用Python制作銷(xiāo)售數(shù)據(jù)大屏的方法。
主要使用Python的Streamlit庫(kù)、Plotly庫(kù)、Pandas庫(kù)進(jìn)行搭建。
其中Pandas處理數(shù)據(jù),Plotly制作可視化圖表,Streamlit搭建可視化頁(yè)面。
對(duì)于以上三個(gè)庫(kù),Streamlit庫(kù)可能大家會(huì)比較陌生,我簡(jiǎn)單介紹一下。
Streamlit是一個(gè)完全免費(fèi)的開(kāi)源應(yīng)用程序框架,它能幫你不用懂得復(fù)雜的HTML,CSS等前端技術(shù)就能快速做出來(lái)一個(gè)炫酷的Web頁(yè)面。
1. 數(shù)據(jù)
使用的數(shù)據(jù)是虛構(gòu)數(shù)據(jù),某超市2021年銷(xiāo)售訂單數(shù)據(jù),共有1000條的訂單數(shù)據(jù)。
城市有三個(gè),分別為北京、上海、杭州。顧客類(lèi)型有兩種,為會(huì)員和普通。顧客性別為男性和女性。
剩下還包含訂單編號(hào)、商品類(lèi)型、單價(jià)、數(shù)量、總價(jià)、日期、時(shí)間、支付方式、成本、毛利率、總收入、評(píng)分等信息。
通用Pandas的read_excel方法讀取數(shù)據(jù)。
跳過(guò)前3行,選取B到R列,1000行數(shù)據(jù)。
def get_data_from_excel(): df = pd.read_excel( io="supermarkt_sales.xlsx", engine="openpyxl", sheet_name="Sales", skiprows=3, usecols="B:R", nrows=1000, ) # 添加小時(shí)列數(shù)據(jù) df["小時(shí)"] = pd.to_datetime(df["時(shí)間"], format="%H:%M:%S").dt.hour return df df = get_data_from_excel() print(df)
成功讀取數(shù)據(jù),結(jié)果如下。
下面便可以來(lái)編寫(xiě)頁(yè)面了。
2. 網(wǎng)頁(yè)標(biāo)題和圖標(biāo)
我們都知道當(dāng)瀏覽器打開(kāi)一個(gè)網(wǎng)頁(yè),會(huì)有標(biāo)題和圖標(biāo)。
所以我們需先設(shè)置本次網(wǎng)頁(yè)的名稱(chēng)、圖標(biāo)、布局等。
這也是使用Streamlit搭建頁(yè)面,使用的第一個(gè)Streamlit命令,并且只能設(shè)置一次。
# 設(shè)置網(wǎng)頁(yè)信息 st.set_page_config(page_title="銷(xiāo)售數(shù)據(jù)大屏", page_icon=":bar_chart:", layout="wide")
其中page_icon參數(shù)可以使用表情符號(hào)代碼來(lái)顯示圖標(biāo)。
妥妥的表情符號(hào)代碼大全!
3. 側(cè)邊欄和多選框
st.sidebar(側(cè)邊欄),每個(gè)傳遞給st.sidebar的元素都會(huì)被固定在左邊,讓用戶(hù)可以專(zhuān)注于主頁(yè)中的內(nèi)容。
multiselect(多選框)是一個(gè)交互性的部件,可以通過(guò)它進(jìn)行數(shù)據(jù)篩選。
# 側(cè)邊欄 st.sidebar.header("請(qǐng)?jiān)谶@里篩選:") city = st.sidebar.multiselect( "選擇城市:", options=df["城市"].unique(), default=df["城市"].unique() ) customer_type = st.sidebar.multiselect( "選擇顧客類(lèi)型:", options=df["顧客類(lèi)型"].unique(), default=df["顧客類(lèi)型"].unique(), ) gender = st.sidebar.multiselect( "選擇性別:", options=df["性別"].unique(), default=df["性別"].unique() ) df_selection = df.query( "城市 == @city & 顧客類(lèi)型 ==@customer_type & 性別 == @gender" )
結(jié)合Pandas的query查詢(xún),就能對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。
通過(guò)上述代碼就搭建成功了,如下圖左側(cè)。
點(diǎn)擊側(cè)邊欄的右上角關(guān)閉符號(hào),側(cè)邊欄即可隱藏。
網(wǎng)頁(yè)將會(huì)展示主頁(yè)面。
4. 主頁(yè)面信息
接下來(lái)編寫(xiě)主頁(yè)面信息,包含主頁(yè)標(biāo)題、銷(xiāo)售總額、平均評(píng)分、平均銷(xiāo)售額信息。
和網(wǎng)頁(yè)的圖標(biāo)一樣,通過(guò)表情符號(hào)代碼實(shí)現(xiàn)。
# 主頁(yè)面 st.title(":bar_chart: 銷(xiāo)售數(shù)據(jù)大屏") st.markdown("##") # 核心指標(biāo), 銷(xiāo)售總額、平均評(píng)分、星級(jí)、平均銷(xiāo)售額數(shù)據(jù) total_sales = int(df_selection["總價(jià)"].sum()) average_rating = round(df_selection["評(píng)分"].mean(), 1) star_rating = ":star:" * int(round(average_rating, 0)) average_sale_by_transaction = round(df_selection["總價(jià)"].mean(), 2) # 3列布局 left_column, middle_column, right_column = st.columns(3) # 添加相關(guān)信息 with left_column: st.subheader("銷(xiāo)售總額:") st.subheader(f"RMB {total_sales:,}") with middle_column: st.subheader("平均評(píng)分:") st.subheader(f"{average_rating} {star_rating}") with right_column: st.subheader("平均銷(xiāo)售額:") st.subheader(f"RMB {average_sale_by_transaction}") # 分隔符 st.markdown("""---""")
完成核心指標(biāo)數(shù)據(jù)的處理,并將其進(jìn)行布局顯示。
5. 主頁(yè)面圖表
包含了兩個(gè)圖表,一個(gè)是每小時(shí)銷(xiāo)售額,一個(gè)是各類(lèi)商品銷(xiāo)售總額。通過(guò)Plotly Express完成圖表的繪制。
Plotly Express是一個(gè)新的高級(jí)Python可視化庫(kù),是Plotly.py的高級(jí)封裝,它為復(fù)雜的圖表提供了一個(gè)簡(jiǎn)單的語(yǔ)法。
受Seaborn和ggplot2的啟發(fā),它專(zhuān)門(mén)設(shè)計(jì)為具有簡(jiǎn)潔,一致且易于學(xué)習(xí)的API。只需一次導(dǎo)入,就可以在一個(gè)函數(shù)調(diào)用中創(chuàng)建豐富的交互式繪圖。
# 各類(lèi)商品銷(xiāo)售情況(柱狀圖) sales_by_product_line = ( df_selection.groupby(by=["商品類(lèi)型"]).sum()[["總價(jià)"]].sort_values(by="總價(jià)") ) fig_product_sales = px.bar( sales_by_product_line, x="總價(jià)", y=sales_by_product_line.index, orientation="h", title="<b>每種商品銷(xiāo)售總額</b>", color_discrete_sequence=["#0083B8"] * len(sales_by_product_line), template="plotly_white", ) fig_product_sales.update_layout( plot_bgcolor="rgba(0,0,0,0)", xaxis=(dict(showgrid=False)) ) # 每小時(shí)銷(xiāo)售情況(柱狀圖) sales_by_hour = df_selection.groupby(by=["小時(shí)"]).sum()[["總價(jià)"]] print(sales_by_hour.index) fig_hourly_sales = px.bar( sales_by_hour, x=sales_by_hour.index, y="總價(jià)", title="<b>每小時(shí)銷(xiāo)售總額</b>", color_discrete_sequence=["#0083B8"] * len(sales_by_hour), template="plotly_white", ) fig_hourly_sales.update_layout( xaxis=dict(tickmode="linear"), plot_bgcolor="rgba(0,0,0,0)", yaxis=(dict(showgrid=False)), ) left_column, right_column = st.columns(2) left_column.plotly_chart(fig_hourly_sales, use_container_width=True) right_column.plotly_chart(fig_product_sales, use_container_width=True)
添加數(shù)據(jù),設(shè)置圖表配置,以及網(wǎng)頁(yè)布局。
得到結(jié)果如下。
6. 隱藏部件
當(dāng)我們通過(guò)Streamlit搭建一個(gè)界面,默認(rèn)就會(huì)有紅線、菜單、結(jié)尾的"Make with Streamlit"。
為了美觀,這里可以將它們都隱藏掉。
# 隱藏streamlit默認(rèn)格式信息 hide_st_style = """ <style> #MainMenu {visibility: hidden;} footer {visibility: hidden;} header {visibility: hidden;} </style> """ st.markdown(hide_st_style, unsafe_allow_html=True)
這樣一個(gè)可交互的銷(xiāo)售數(shù)據(jù)看板,就完成搭建啦!
# 安裝依賴(lài)庫(kù) pip install -i https://pypi.tuna.tsinghua.edu.cn/simple plotly==4.14.3 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas==1.1.0 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit==0.86.0 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl==3.0.6 # 運(yùn)行 streamlit run app.py
安裝相關(guān)依賴(lài),命令行終端運(yùn)行程序。?
以上就是Python實(shí)現(xiàn)制作銷(xiāo)售數(shù)據(jù)可視化看板詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 數(shù)據(jù)可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python數(shù)據(jù)可視化Seaborn繪制山脊圖
- python數(shù)據(jù)可視化Seaborn畫(huà)熱力圖
- python數(shù)據(jù)可視化JupyterLab實(shí)用擴(kuò)展程序Mito
- python數(shù)據(jù)可視化使用pyfinance分析證券收益示例詳解
- Python 數(shù)據(jù)可視化之Bokeh詳解
- python教程網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化原理解析
- python數(shù)據(jù)可視化Pyecharts庫(kù)sankey修改桑葚圖顏色
- Python數(shù)據(jù)可視化Pyecharts庫(kù)實(shí)現(xiàn)桑葚圖效果
- Python?數(shù)據(jù)可視化實(shí)現(xiàn)5種炫酷的動(dòng)態(tài)圖
相關(guān)文章
Python實(shí)現(xiàn)視頻下載與合成的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python是如何實(shí)現(xiàn)視頻的下載以及合成的,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-04-04python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例
下面小編就為大家分享一篇python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Windows下anaconda安裝第三方包的方法小結(jié)(tensorflow、gensim為例)
conda的設(shè)計(jì)理念——conda將幾乎所有的工具、第三方包都當(dāng)做package對(duì)待,甚至包括python和conda自身!因此,conda打破了包管理與環(huán)境管理的約束,能非常方便地安裝各種版本python、各種package并方便地切換2018-04-04Python標(biāo)準(zhǔn)庫(kù)之time庫(kù)的使用教程詳解
這篇文章主要介紹了Python的time庫(kù)的使用教程,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2022-04-04Python中DataFrame與內(nèi)置數(shù)據(jù)結(jié)構(gòu)相互轉(zhuǎn)換的實(shí)現(xiàn)
pandas?支持我們從?Excel、CSV、數(shù)據(jù)庫(kù)等不同數(shù)據(jù)源當(dāng)中讀取數(shù)據(jù),來(lái)構(gòu)建?DataFrame。但有時(shí)數(shù)據(jù)并不來(lái)自這些外部數(shù)據(jù)源,這就涉及到了?DataFrame?和?Python?內(nèi)置數(shù)據(jù)結(jié)構(gòu)之間的相互轉(zhuǎn)換,本文就來(lái)和大家詳細(xì)聊聊2023-02-02為2021年的第一場(chǎng)雪錦上添花:用matplotlib繪制雪花和雪景
這篇文章主要介紹了為2021年的第一場(chǎng)雪錦上添花:用matplotlib繪制雪花和雪景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python實(shí)現(xiàn)對(duì)象轉(zhuǎn)換為xml的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)象轉(zhuǎn)換為xml的方法,結(jié)合實(shí)例形式分析了Python對(duì)象屬性、節(jié)點(diǎn)的操作及與xml相互轉(zhuǎn)換的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06