python教程:用簡單的Python編寫Web應用程序

python如今已經成爲不少程序員關注的編程語言之一,不少程序員也都開始弄python編程,而且不少時候都會用本身的操做來選擇,而如今不論是程序員仍是少兒編程,都會有python這門課,今天就和你們分享一下。python

1.jpeg

  安裝程序員

  安裝步驟跟運行指令同樣簡單:web

  pip install streamlitexpress

  查看是否安裝成功時只需運行:編程

  streamlit hello瀏覽器

  屏幕上應該顯示的是:緩存

2.jpg

  能夠在瀏覽器中訪問本地URL:localhost:8501,來查看執行中的Streamlit應用程序。開發人員那裏也有許多很棒的樣本可供嘗試。markdown

3.jpg

  Streamlit「你好,世界」app

  Streamlit旨在經過簡單的Python代碼實現簡單的程序開發。webapp

  那就設計一款簡單的應用程序,看看它是否真的像它說的那樣。

  從Streamlit的名爲「hello,world」的程序入手,這個程序並不複雜。只須要複製粘貼下面這個代碼到「helloworld.py」的文件夾中便可。

  import streamlit as st

  x=st.slider('x')

  st.write(x,'squared is',x*x)

  而後到最後運行階段時:

  streamlit run helloworld.py

  看吧,瀏覽器鏈接到localhost:8501,就能夠看到執行中的程序,滑動鼠標就能夠獲得結果。

  簡單的滑塊插件應用程序

4.jpg

 

  操做很是簡單。在構建上圖應用程序時,用到了Streamlit的兩個特性:

  st.slider插件——滑動改變Web應用程序的輸出內容。

  以及通用的st.write指令。筆者對於它能從圖標、數據框和簡單的文本中編寫任何東西感到驚訝。後面會有詳細介紹。

  敲黑板:你們要記住每次改變插件值時,整個應用程序都會由上至下運行。

  Streamlit插件

  插件提供了控制應用程序的方法,閱讀了解插件的最佳選擇就是API參考文檔,不過筆者這裏也會講解一些插件,它們都是用戶在操做後期會用的最主要的插件。

  1.滑塊

  streamlit.slider(label,min_value=None,max_value=None,value=None,step=None,format=None)

  在上文已經目擊了st.slider的執行過程,它能夠結合min_value、max_value使用,用於進一步獲得必定範圍內的輸入內容。

  2.文本輸入

  獲取用戶輸入最簡單的方式是輸入URL或一些用於分析情緒的文本內容,須要的只是一個用來命名文本框的標籤。

  import streamlit as st

  url=st.text_input('Enter URL')

  st.write('The Entered URL is',url)

  看到的程序將是這樣:

  簡單的text_input widget程序

5.jpg

  貼士:能夠只改變helloworld.py文件而後刷新頁面。筆者的作法是打開該文件而後在文本編輯器中改動,再一點一點查看變更的地方。

  3.複選框

  複選框的一個功能就是隱藏或顯示/隱藏程序中的特定區域,另外一個用途是設置函數的布爾參數值。st.checkbox()須要一個參數,即插件標籤。在該應用程序中,複選框會用來切換條件語句。

  import streamlit as st

  import pandas as pd

  import numpy as np

  df=pd.read_csv("football_data.csv")

  if st.checkbox('Show dataframe'):

  st.write(df)

  簡單的複選框插件應用程序

6.jpg

  4.下拉框插件

  經過st.selectbox能夠在一系列選項或列表中進行選擇。常見的用法是將其做爲下拉項而後從名單中挑選值。

  import streamlit as st

  import pandas as pd

  import numpy as np

  df=pd.read_csv("football_data.csv")option=st.selectbox(

  'Which Club do you like best?',

  df['Club'].unique())

  'You selected:',option

  簡單的下拉框/複選框插件程序

7.jpg

  5.多選插件

  也能夠用下拉框內的多個值。這裏講的是使用st.multiselect在變量選選中獲取多個值做爲列表。

  import streamlit as st

  import pandas as pd

  import numpy as np

  df=pd.read_csv("football_data.csv")

  options=st.multiselect(

  'What are your favorite clubs?',df['Club'].unique())

  st.write('You selected:',options)

  簡單的下拉框插件應用程序

8.jpg

  一步步建立應用程序

  重要插件瞭解的也差很少了,如今立刻要用多個插件建立應用程序。

  從簡單的步驟入門,嘗試使用Streamlit對足球數據進行可視化。有了上面那些插件,這個步驟執行起來會容易不少。

  import streamlit as st

  import pandas as pd

  import numpy as np

  df=pd.read_csv("football_data.csv")

  clubs=st.multiselect('Show Player for clubs?',df['Club'].unique())

  nationalities=st.multiselect('Show Player from Nationalities?',df['Nationality'].unique())

  #Filter dataframe

  new_df=df[(df['Club'].isin(clubs))&(df['Nationality'].isin(nationalities))]

  #write dataframe to screen

  st.write(new_df)

  簡單的應用程序會是這樣的:

9.jpg

  同時使用多個插件

  這一點也不難,但目前看起來彷佛太基礎了。是否能夠考慮加入一些圖表呢?

  Streamlit當前支持許多用於繪圖的庫,其中就有Plotly,Bokeh,Matplotlib,Altair和Vega圖表。Plotly Express也能夠,只不過沒有詳細說明。也存在一些內嵌式圖表,至關於Streamlit「自帶」的,好比st.line_chart和st.area_chart.

  此時會用到plotly_express,下面是設計程序會用到的代碼。該過程只會調用Streamlit四次。剩下的都是一些簡單的Python代碼操做。

  import streamlit as st

  import pandas as pd

  import numpy as np

  import plotly_express as px

  df=pd.read_csv("football_data.csv")

  clubs=st.multiselect('Show Player for clubs?',df['Club'].unique())

  nationalities=st.multiselect('Show Player from Nationalities?',df['Nationality'].unique())new_df=df[(df['Club'].isin(clubs))&(df['Nationality'].isin(nationalities))]

  st.write(new_df)

  #create figure using plotly express

  fig=px.scatter(new_df,x='Overall',y='Age',color='Name')

  #Plot!

  st.plotly_chart(fig)

  添加圖表

10.jpg

  改進

  在本文一開始有提到插件每次發生變更時,整個應用程序就會由上至下地運行。其實並不可行,由於建立的應用程序會保留下深度學習模型或複雜的機器學習模型。接下來在講Streamlit的緩存時會向讀者闡釋這一點。

  1.緩存

  在這個簡單的程序裏,但凡值有所變更時,數據科學家們就會反覆瀏覽數據框。它比較適用於用戶手中的小規模數據,至於大規模或須要進行不少步處理的數據,它是不予理睬的。接下來在Streamlit中經過st.cache裝飾器函數體驗緩存的功能吧。

  import streamlit as st

  import pandas as pd

  import numpy as np

  import plotly_express as px

  df=st.cache(pd.read_csv)("football_data.csv")

  或者是複雜一些、時間耗費久一些的函數,只須要運行一次,此時能夠用:

   st.cache

  def complex_func(a,b):

  DO SOMETHING COMPLEX

  #Won't run again and again.

  complex_func(a,b)

  用Streamlit的緩存裝飾器標記函數時,不管這個函數是否執行,都會檢查輸入的參數值(由該函數處理的)。

  若是Streamlit以前沒有處理過這些數據,它會調用函數並將運算結果存到本地緩存中。

  下次再調用函數時,假若仍是這些參數,Streamlit就會徹底跳過這一塊的函數執行,直接用緩存器裏的結果數據。

  2.側邊欄

  爲了根據我的的傾向需求使界面更加簡潔,用戶可能會想着把插件移動到側邊欄內,好比像Rshiny儀表盤。這很是簡單,只需在插件代碼中添加st.sidebar便可。

  import streamlit as st

  import pandas as pd

  import numpy as np

  import plotly_express as px

  df=st.cache(pd.read_csv)("football_data.csv")

  clubs=st.sidebar.multiselect('Show Player for clubs?',df['Club'].unique())

  nationalities=st.sidebar.multiselect('Show Player from Nationalities?',df['Nationality'].unique())

  new_df=df[(df['Club'].isin(clubs))&(df['Nationality'].isin(nationalities))]

  st.write(new_df)

  #Create distplot with custom bin_size

  fig=px.scatter(new_df,x='Overall',y='Age',color='Name')

  #Plot!

  st.plotly_chart(fig)

  將插件移動到側邊欄內

  3.Markdown標記語言能夠嗎?

  筆者特別喜歡在Markdown裏編輯文字,由於發現相比HTML,它少了那些繁瑣的操做,並且更能勝任數據科學的任務。因此讀者也能在Streamlit程序中應用Markdown嗎?

  答案是能夠。並且是有跡可循的。在筆者看來,最合適的就是調用Magic指令。經過該指令,用戶作標記語言就會像寫評論同樣簡單。用戶也可使用指令st.markdown。

  import streamlit as st

  import pandas as pd

  import numpy as np

  import plotly_express as px'''

  #Club and Nationality App

  This very simple webapp allows you to select and visualize players from certain clubs and certain nationalities.

  '''

  df=st.cache(pd.read_csv)("football_data.csv")

  clubs=st.sidebar.multiselect('Show Player for clubs?',df['Club'].unique())

  nationalities=st.sidebar.multiselect('Show Player from Nationalities?',df['Nationality'].unique())new_df=df[(df['Club'].isin(clubs))&(df['Nationality'].isin(nationalities))]

  st.write(new_df)

  #Create distplot with custom bin_size

  fig=px.scatter(new_df,x='Overall',y='Age',color='Name')

  '''

  ###Here is a simple chart between player age and overall

  '''

  st.plotly_chart(fig)

相關文章
相關標籤/搜索