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


python現在已經成為很多程序員關注的編程語言之一,很多程序員也都開始弄python編程,並且很多時候都會用自己的操作來選擇,而現在不管是程序員還是少兒編程,都會有python這門課,今天就和大家分享一下。

1.jpeg

  安裝

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

  pip install streamlit

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

  streamlit hello

  屏幕上應該顯示的是:

2.jpg

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

3.jpg

  Streamlit“你好,世界”

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

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

  從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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM