python教程:用简单的Python编写Web应用程序
python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分享一下。

安装
安装步骤跟运行指令一样简单:
pip install streamlit
查看是否安装成功时只需运行:
streamlit hello
屏幕上应该显示的是:

可以在浏览器中访问本地URL:localhost:8501,来查看执行中的Streamlit应用程序。开发人员那里也有许多很棒的样本可供尝试。

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,就可以看到执行中的程序,滑动鼠标就可以得到结果。
简单的滑块插件应用程序

操作非常简单。在构建上图应用程序时,用到了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程序

贴士:可以只改变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)
简单的复选框插件应用程序

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
简单的下拉框/复选框插件程序

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)
简单的下拉框插件应用程序

一步步创建应用程序
重要插件了解的也差不多了,现在马上要用多个插件创建应用程序。
从简单的步骤入门,尝试使用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)
简单的应用程序会是这样的:

同时使用多个插件
这一点也不难,但目前看起来似乎太基础了。是否可以考虑加入一些图表呢?
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)
添加图表

改进
在本文一开始有提到插件每次发生变动时,整个应用程序就会由上至下地运行。其实并不可行,因为创建的应用程序会保留下深度学习模型或复杂的机器学习模型。接下来在讲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)
python教程:用简单的Python编写Web应用程序的更多相关文章
- Spring WebFlux 教程:如何构建反应式 Web 应用程序
Spring WebFlux 教程:如何构建反应式 Web 应用程序 反应式系统提供了我们在高数据流世界中所需的无与伦比的响应能力和可扩展性.然而,反应式系统需要经过专门培训的工具和开发人员来实现这些 ...
- 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景
滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...
- [No000011F]Python教程2/9-安装Python 及其解释器介绍
因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...
- Python教程(一)Python简介
Python就为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作“内置电池(batteries included)”.用Python开发,许多功能不必从零 ...
- Python教程(1.1)——配置Python环境
在正式开始学习Python之前我们需要先配置好Python环境. Python Python可以从Python官方网站上,选择适合你的操作系统的版本下载.下载完之后,运行下载的可执行文件进行安装. 这 ...
- SPSS python教程:[1]安装Python Essentials
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 写给.NET开发者的Python教程(一):C# vs Python: 语言特性、Conda和Jupyter Notebook环境
承接上篇,本文会从语言特性.开发环境和必备工具来带领大家进入Python的世界. 语言特性 首先一起看下C#和Python在语言特性层面的对比,他们作为截然不同的两类面向对象高级语言,在语言层面上有何 ...
- [No0000120]Python教程3/9-第一个Python程序
现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需 ...
随机推荐
- linux学习11 Linux基础命令及命令历史
一.Linux系统上的文件类型 1.- :常规文件:在其它程序中用f表示.比如我们用ls -l命令查看的第一个内容 [root@localhost ~]# ls -l total -rw------- ...
- UFUN函数 UF_CURVE函数(UF_CURVE_create_line、UF_CURVE_create_arc、UF_CURVE_ask_arc_data、UF_CURVE_ask_line_data)
UF_initialize(); //CSYS_ask_wcs tag_t wcs_id=NULL_TAG; //CSYS_ask_csys_info ]={0.0}; //CURVE_create_ ...
- 原手下一名98年的java离职了
原手下一名98年的java离职了,回家考试要2年. 系统做的还算凑合,毕竟年龄在这. 需要改善的地方我会放到自己的项目管理工具中去改善. 离职前他一直跟我说微服务的启动是用docker,也感谢他,我们 ...
- 套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构/新通用套接字地址结构
IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t ...
- [题解向] Luogu2146[NOI2015]软件包管理器
#\(\mathcal{\color{red}{Description}}\) \(Link\) 一道\(zz\)的树剖题\(qwq\). #\(\mathcal{\color{red}{Soluti ...
- 为什么学习JavaScript设计模式,因为它是核心
那么什么是设计模式呢?当我们在玩游戏的时候,我们会去追求如何最快地通过,去追求获得已什么高效率的操作获得最好的奖品:下班回家,我们打开手机app查询最便捷的路线去坐车:叫外卖时候,也会找附近最近又实惠 ...
- 一大波 Facebook Libra 技术文章来袭
由于 Libra 具有真正的稳定的可编程货币的特性, Libra 或许可以带来又一波平台红利. 上周我们(深入浅出区块链技术社区)发起了 Libra 技术文档的翻译计划,到这周文档已经翻译了一半.欢迎 ...
- spring的重试策略、发生异常会自动重新调用
测试类以及测试代码.复制即可 package com.cms.util; import javax.swing.plaf.synth.SynthSpinnerUI; import org.spring ...
- SQL on Hadoop技术综述
一.系统架构 runtime framework v.s. mpp 在SQL on Hadoop系统中,有两种架构: 1.一种是基于某个运行时框架来构建查询引擎,典型案例是Hive: 2.另一种是仿照 ...
- 微信小程序怎么获取page/index/main后面的参数
请求例子:page/index/main?id=123,如何获取123? mpvue框架在onLoad(options)函数里面获取options.id即可. 用的框架不同,onLoad的函数不同.原 ...