日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

Python數(shù)據(jù)分析師工作拓展助手,在不用掌握復(fù)雜的HTML、JavaScript、CSS等前端技術(shù)的情況下,也能快速做出來一個炫酷的Web APP,把數(shù)據(jù)分析結(jié)果可視化呈現(xiàn)出來!本文推薦Python界新秀,高速發(fā)展的開源Web框架Streamlit,與Python界較優(yōu)秀交互式可視化工具Plotly,組合搭建的"Web數(shù)據(jù)可視化低代碼純python技術(shù)解決方案"。

1. 方案概述

Web數(shù)據(jù)可視化低代碼純python技術(shù)解決方案,是采用Streamlit Web框架,其可視化工具默認(rèn)使用Bokeh,可以同時兼容使用Plotly、Matplotlib等,前端底層為React.js框架,Web服務(wù)端底層為Tornado

  • 計算架構(gòu)層采用Pandas、SKlearn、Tensorflow、Python等。其中,數(shù)據(jù)可視化主要是通過Pandas與Plotly、Streamlit無縫結(jié)合;
  • 可視化層以plotly為主,輔以默認(rèn)的bokeh和matplotlib,以及Streamlit table與markdown等。

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

注:圖中灰色背景的終端層,Python數(shù)據(jù)分析師可以不必關(guān)心,已經(jīng)由Web框架Streamlit封裝成低代碼python開發(fā)接口實現(xiàn)。

1. Web 布局與導(dǎo)航

1.1. 簡易快速布局

Streamlit框架提供幾種界面布局模板,在這里使用常用的左右單頁面結(jié)構(gòu),如下圖所示左側(cè)為Sidebar,對應(yīng)的API表示為:

st.sidebar.[element_name]

其中,element_name是指交互組件名稱,包括:

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

如上圖所示,接下來將以此頁面布局開始開發(fā)。

1.2. 開始"菜單/導(dǎo)航"

使用單頁面結(jié)構(gòu)中的Sidebar為導(dǎo)航控制欄,

import streamlit as stimport pandas as pdimport numpy as npimport plotly.express as pximport plotly.graph_objects as godef Layouts_plotly(): st.sidebar.write('導(dǎo)航欄') add_selectbox = st.sidebar.radio( "plotly基本圖", ("Bubble", "Scatter", "Line","aggregate_bar","bar_charts","pie","pulled_out") ) if add_selectbox=="Bubble": Bubble() elif add_selectbox=="Scatter": Scatter() elif add_selectbox == "Line": Line() elif add_selectbox == "aggregate_bar": aggregate_bar() elif add_selectbox == "bar_charts": bar_charts() elif add_selectbox == "pie": pie() elif add_selectbox == "pulled_out": pulled_out() # 補充表單 st.sidebar.button('基本數(shù)據(jù)表',on_click=Double_coordinates)def main(): Layouts_plotly() if __name__ == "__main__": main()

運行程序:streamlit run Demo_plotly_Basic_Charts.py

輸入效果如下圖所示:

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

注:框架默認(rèn)執(zhí)行第一選項: Bubble(),將在后面補充代碼

2. Plotly基本圖

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

def Bubble(): df = px.data.gapminder() fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=60) # Plot the data st.plotly_chart(fig) def Scatter(): fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) # Plot the data st.plotly_chart(fig) def Line(): df = px.data.stocks() fig = px.line(df, x='date', y="GOOG") st.plotly_chart(fig) def aggregate_bar(): df = px.data.tips() fig = px.histogram(df, x="sex", y="total_bill", color='smoker', barmode='group', histfunc='avg', height=400) st.plotly_chart(fig) def bar_charts(): data_canada = px.data.gapminder().query("country == 'Canada'") fig = px.bar(data_canada, x='year', y='pop') st.plotly_chart(fig) def pie(): df = px.data.tips() fig = px.pie(df, values='tip', names='day', color='day', color_discrete_map={ 'Thur':'lightcyan', 'Fri':'cyan', 'Sat':'royalblue', 'Sun':'darkblue'}) st.plotly_chart(fig) def pulled_out(): labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'] values = [4500, 2500, 1053, 500] # pull is given as a fraction of the pie radius fig = go.Figure(data=[go.Pie(labels=labels, values=values, pull=[0, 0.2, 0, 0])]) st.plotly_chart(fig)

3. 實現(xiàn)雙坐標(biāo)圖表實踐

數(shù)據(jù)表通過Pandas直接讀?。╟sv)數(shù)據(jù)為DataFrame,使用Streamlit的st.table直接顯示數(shù)據(jù)表,使用plotly.graph_objects繪圖。

@st.cachedef load_data(): df = pd.read_csv('STAT202112.csv', encoding='gbk') df['年月'] = df['年月'].astype("str") return dfdef Double_coordinates(): df = load_data() st.markdown('#### 數(shù)據(jù)表展示') st.table(df) st.markdown('#### 雙坐標(biāo)圖') x = df["年月"] y1_1 = df['流失客戶'] y1_2=df['新客戶'] y2 = df["余額"] trace0_1 = go.Bar(x=x,y=y1_1, marker=dict(color="red"), opacity=0.5, name="流失客戶") trace0_2 = go.Bar(x=x,y=y1_2, marker=dict(color="blue"), opacity=0.5, name="新客戶") trace1 = go.Scatter(x=x,y=y2, mode="lines", name="余額", # 【步驟一】:使用這個參數(shù)yaxis="y2",就是繪制雙y軸圖 yaxis="y2") data = [trace0_1,trace0_2,trace1] layout = go.Layout(title="客戶發(fā)展趨勢", xaxis=dict(title="年月"), yaxis=dict(title="客戶數(shù)量"), # 【步驟二】:給第二個y軸,添加標(biāo)題,指定第二個y軸,在右側(cè)。 yaxis2=dict(title="金額",overlaying="y",side="right"), legend=dict(x=0.78,y=0.98,font=dict(size=12,color="black"))) fig = go.Figure(data=data,layout=layout) st.plotly_chart(fig)

注:@st.cache 用于把數(shù)據(jù)加載到緩存,避免下次重復(fù)查詢加載。

Python數(shù)據(jù)分析師使用低代碼Streamlit實現(xiàn)Web數(shù)據(jù)可視化方法(python 數(shù)據(jù)可視化 web)

4. 總結(jié)

通過低代碼Streamlit Plotly的試用,感覺代碼挺優(yōu)雅,不用懂得任何前端技術(shù),可以開發(fā)一個看起來還很美觀的Web App。

Python數(shù)據(jù)分析師可以用更多時間專注數(shù)據(jù)表現(xiàn)上,通過圖表為用戶講述數(shù)據(jù)的故事。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
新宾| 大新县| 邮箱| 龙川县| 石棉县| 图们市| 定西市| 庆元县| 瓮安县| 涞水县| 河西区| 大宁县| 怀来县| 固始县| 寻乌县| 灵寿县| 洛宁县| 潼南县| 瑞丽市| 商南县| 白城市| 海门市| 石狮市| 东港市| 健康| 新营市| 洛南县| 湄潭县| 兴宁市| 阳江市| 平陆县| 玉门市| 哈巴河县| 祁连县| 平果县| 深水埗区| 麦盖提县| 临桂县| 长乐市| 历史| 濉溪县|