如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

2024-04-28 12:38

本文主要是介绍如何用简单的Python为数据科学家编写Web应用程序?(附代码链接),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家

翻译:陈之炎  校对:闫晓雨

本文约4300字,建议阅读10分钟。

本文阐述如何使用StreamLit创建支持数据科学项目的应用程序。

无需了解任何Web框架,数据科学项目也可被轻而易举地转换成出色的应用程序。

如果我们没有将一个机器学习项目充分地展示出来,那么这个项目就不算真正地被完成。

在过去,一份精心制作的可视化图表或几页PPT便足以展示一个数据科学项目,然而随着RShiny和Dash这类的仪表板工具的出现,优秀的数据科学家也需要具备相当丰富的Web框架知识。

但是学习Web框架的难度很大,笔者在HTML、CSS和Javascript中摸爬滚打,却依然对一些看似简单的操作感到困惑。

更别提如何用多种方式去实现同一件事了,这会让数据科学同胞感到更加困惑,毕竟对他们来说,Web开发只是一项次要的技能。

那么,我们注定要学Web框架吗?或者要在半夜给做开发的好友打电话道出对Web框架的蠢蠢疑惑?

StreamLit的横空出世使得利用Python来创建Web应用程序成为现实。

Python之禅:简胜于繁。Streamlight便是诠释它最好的注脚,使创建web应用程序从未如此简单。

本文讲解如何使用Streamlight创建支持数据科学项目的应用程序。

安装

安装即运行以下简单的命令:

pip install streamlit

运行以下命令查看安装是否成功:

streamlit hello

屏幕会显示:

可在浏览器中访问本地网址:localhost:8501,查看正在运行的Streamlight应用程序。开发人员也提供了一些示范。花点时间来感受一下这个工具的力量。

Streamlit Hello World

Streamlight旨在利用简单的Python来简化应用程序的开发。

让我们写一个简单的应用程序,看看它是否能够实现这一目标。

此处,从一个称为Hello World of streamlit的简单应用程序开始,只需将下面的代码粘贴到名为helloworld.py的文件中即可。

import streamlit as stx = 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和step一起使用,用于在一定范围内获取输入。

2. 文本输入

获取用户输入的最简单方法是URL输入或用于情感分析的文本输入,只需要一个标签来命名文本框。

import streamlit as sturl = st.text_input('Enter URL')st.write('The Entered URL is', url)

应用程序是这样呈现如下的:

一个简单的text_put小部件应用程序

提示:只需更改文件helloworld.py并刷新浏览器即可。笔者的做法是打开该文件后在文本编辑器中更改,并查看浏览器中的每步变化。

3. 复选框

复选框的一个使用案例是在应用程序中隐藏或显示/隐藏特定部分,另一个可能用途是在为函数st.checkbox()的参数中设置一个布尔值。st.checkbox()需要一个单独指令,即小部件的标签。在此应用程序中,该复选框用于切换条件语句。

import streamlit as stimport pandas as pdimport numpy as npdf = pd.read_csv("football_data.csv")if st.checkbox('Show dataframe'):    st.write(df)

一个简单的复选框小部件应用程序

4. 选择框

可使用st.selectbox从列表中进行选择,常见使用是将其用作一个从列表中选择值的简单下拉列表。

import streamlit as stimport pandas as pdimport numpy as npdf = 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 stimport pandas as pdimport numpy as npdf = 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 stimport pandas as pdimport numpy as npdf = 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 dataframenew_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]# write dataframe to screenst.write(new_df)

简单应用程序如下:

综合使用多个小部件

这看起来并不难,但似乎太简单了,能否添加一些图表呢?

Streamlit目前支持许多用于绘图的库,包括Plotly, Bokeh, Matplotlib, Altair 和 Vega charts。PlolyExpress也行得通,尽管他们没有在文档中具体说明。Streamlit还有一些内置的图表类型,如st.line_chart 和st.area_chart等都能在Streamlit中运行。

此处将使用plotly_express创建简单应用程序,代码如下。仅调用Streamlit四次,余下的便都是一些简单的python代码操作。

import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = 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 expressfig = px.scatter(new_df, x ='Overall',y='Age',color='Name')# Plot!st.plotly_chart(fig)Adding charts

添加图表

提高

本文最初提到,每次对任何小部件进行修改以后,整个应用程序将会重新运行。当创建深度学习模型或复杂机器学习模型的应用程序时,这是不可行的,为此,Streamed引入“缓存(Caching)”来解决这一问题。

1. 缓存

在一个简单的应用程序中。每当一个值发生变化时,便会一遍遍地浏览 pandas数据框。虽然它适用于小数据,但对于大数据或当必须对数据进行大量处理时将失效。下面采用streamlit中的st.cache函数来使用缓存。

import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = st.cache(pd.read_csv)("football_data.csv"

对于仅需要仅运行一次的更复杂和耗时的函数,采用:

@st.cachedef complex_func(a,b):    DO SOMETHING COMPLEX# Won't run again and again.complex_func(a,b)

当用Streamlight的缓存装饰器标记一个函数时,每逢该函数被调用时,它都会检查被调用的函数的输入参数。

如果Streamed第一次处理这些参数,它将运行函数并将结果存储在本地缓存中。

当下一次函数被调用时,如果这些参数尚未改变,StreamLit知道它可以跳过执行该函数,而只使用缓存的结果。

2. 工具条

为了有一个更清晰的外观,可能希望小部件移动到一个侧栏中,类似于Rshiny的仪表板。这也很简单,只需在小部件的代码中添加 st.sidebar 即可。

import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = 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_sizefig = px.scatter(new_df, x ='Overall',y='Age',color='Name')# Plot!st.plotly_chart(fig)Move widgets to the sidebar

将小部件移动到侧栏

3.Markdown?(一种纯文本格式的标记语言)

我喜欢在Markdown里写作,它不像HTML那么冗长,更适合于数据科学工作。那么,我们能不能在 streamlit 应用程序中使用Markdown呢?

答案是可以,有多种方法可以实现。在我看来,最好的方法就是使用Magic命令,Magic命令允许您像注释一样轻松地编写标记,也可以使用st.markdown命令。

import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as px'''# Club and Nationality AppThis 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_sizefig = px.scatter(new_df, x ='Overall',y='Age',color='Name')'''### Here is a simple chart between player age and overall'''st.plotly_chart(fig)

最终的应用程序演示

结论

Streamlight已经将创建应用程序的整个过程进行了普及,笔者已在文中做了详尽描述。

本文虽然只创建了一个简单的web应用程序,但潜力是无穷无尽的。例如,streamlit官网中的faceGAN,它只用了和本文一样的小部件和缓存的指导思想达到如下效果。

我喜欢开发人员使用的默认颜色和风格,它比使用我一直以来用于展示的Dash要舒服的多。此外,还可以在streamlit应用程序中添加音频和视频。

最重要的是,Streamlight是一款免费开源软件,而不是一个现成的专有网络应用程序。

以前需要修改演示稿时,笔者都需要请教做开发的好友,但现在,修改程序的难度相对来说已经微不足道了。

不知道 streamlit 是否会在生产环境中表现良好,但就概念项目和演示而言已经很便利了。我想从现在开始在工作流程中更多地使用到它,由于它用起来毫不费力,你也可以更多地使用它。

作者简介:

Rahuil Agarwal,Walmart实验室的数据科学家。

原文标题:

How to Write Web Apps Using Simple Python for Data Scientists

原文链接:

https://www.kdnuggets.com/2019/10/write-web-apps-using-simple-python-data-scientists.html

译者简介:陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。

END


转自:数据派THU 公众号

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

这篇关于如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
http://www.chinasem.cn/article/943282

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面