【团队效率提升】Python-PyWebIO介绍
作者:京东零售 关键
Q&A快速了解PyWebIO
Q:首先,什么是PyWebIO?
A:PyWebIO提供了一系列命令式的交互函数,能够让咱们用只用Python就可以编写 Web 应用, 不需要编写前端页面和后端接口, 让简易的UI开发效率大大提高(本人非研发,用词可能不妥,大家轻点喷)
Q:其次,我们能用来干嘛?? 这对一个团队的效率提升有什么作用??
A:Pywebio的作用在于让咱们可以快速的开发一个带有UI界面的,支持用户输入的,以既定的逻辑输出结果的应用。 那么,我们是不是可以将团队内一些机械性的数据处理,数据异动分析等的工作以既定逻辑的方式通过Pywebio输出一个可复用的应用给大家使用呢? 当然,日常的数据运营过程中,咱们肯定不是面对着一成不变的case。 那么,我们是不是可以用不同参数输入的方式来达到一定的泛用性拓展呢? 只要,case和case之间的底层逻辑是一致的,我们就可以用同一套逻辑,不同的入参来达到不同结果输出的获取。
Exampl 倘若,我们每天都有一项工作,每天对着一份又一份业务反馈的订单,然后部门需要对着这些订单本身进行一个初步的风险分层,我们是不是可以把风险分层的底层规则写在后端,然后通过PywebIO来支持不同情况下的不同规则阈值输入, 快速获取咱们所需要的风险分层结果。 (当然,如果数据允许,直接写SQL也可以,可是,SQL需要一定的门槛,而PywebIO则可以通过UI的方式分享给那些没有技术背景的运营人员进行0代码使用。)
以下正式开始用一个例子来逐步介绍PywebIO拓展包
简介
虚拟背景: 每天需要一份又一份地对业务反馈的样本来进行风险分层,为了提高处理效率。
计划方案: 通过现有风险标签的波尔标签,非波尔标签体系来搭建一个支持 灵活配置阈值来快速获取分层结果的UI应用。
方案简介:基本逻辑如下,(以下均为举例所示,并不代表该方案就可以进行风险分层哈,大家请注意)
开始实现:这里的例子采取的是非数据库模式,支持的是上传本地csv,然后进行阈值配置。
Step one:本地文件上传
首先,肯定是得先文件上传的代码。
##例子如下:
import pandas as pd
from pywebio.input import *
from pywebio import start_server
from pywebio.output import *
import nest_asyncio
import numpy as np
import os
import time
nest_asyncio.apply()
import pandas as pd
from pywebio.input import *
from pywebio import start_server
from pywebio.output import *
import nest_asyncio
import numpy as np
import os
import time
nest_asyncio.apply()
def read_csv():
put_markdown('# 只支持pin')
put_markdown('功能如下:')
put_markdown("""
- 选择与程序再**同一文件夹**的文件
- 输入你希望卡的风险值阈值 **不输入则默认-10**
- 自动加载解析输出极黑标签占比以及明细数据
- 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
""")
file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
## 本地文件
raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
put_html(raw_data.to_html())
if __name__ == '__main__':
start_server(read_csv, port=8081, debug=True, cdn=False, auto_open_webbrowser=True)
允许代码后,因为” auto_open_webbrowser=True“,所以自动弹出一个WebUI,如下左图,选择上传的文件,即可看到下右图的文件数据
Step two:风险值卡控
第一步也只是上传文件,展示文件,还没达到咱们的目的。 所以,第二步则是需要对上传的csv本身进行数据处理,逻辑判断。 这里其实很好理解,在step one 中已经获取了上传的文件且转成dataframe了对吧,那么实际,咱们只需要沿用咱们熟悉的pandans对dataframe进行处理即可。
import pandas as pd
from pywebio.input import *
from pywebio import start_server
from pywebio.output import *
import nest_asyncio
import numpy as np
import os
import time
nest_asyncio.apply()
def 配置规则_风险值阈值(df, user_risk, pp_risk=None):
df_updated = df[(df['风险值A'] >=user_risk)|((df['风险值B'] >=pp_risk))]
return df_updated
def read_csv():
put_markdown('# 只支持pin')
put_markdown('功能如下:')
put_markdown("""
- 选择与程序再**同一文件夹**的文件
- 输入你希望卡的风险值阈值 **不输入则默认-10**
- 自动加载解析输出极黑标签占比以及明细数据
- 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
""")
file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
## 本地文件
data = []
raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
put_html(raw_data.to_html())
## -------------------------- 下面是 step two 新增的代码 --------------------------
risk_value = input_group(
"risk_value",
[
input("风险值A(默认-10)?", name="user_risk", type=NUMBER),
input("风险值B(默认-10)?", name="pp_risk", type=NUMBER)
],
)
raw_data_upated = 配置规则_风险值阈值(raw_data,risk_value['user_risk'], risk_value['pp_risk'])
table1 = raw_data_upated.groupby('指标').账号.count().reset_index()
table1['占比'] = table1.账号 / len(raw_data_upated.账号.unique()) * 100
table1.sort_values('占比', ascending=False, inplace=True)
put_html(table1.to_html())
## -------------------------- 上面是 step two 新增的代码 --------------------------
if __name__ == '__main__':
start_server(read_csv, port=8081, debug=True, cdn=False, auto_open_webbrowser=True)
Step Three: 标签卡控
从第二步,我们已经完成了风险值阈值的卡控,然后第三步就是标签的选取了。从对标签的理解和应用经验以及第二步得到的标签在样本中的占比,咱们就可以快速的知道,这个样本里面的标签分布分别是什么。进一步可以通过标签的选取达到最终符合我们风险分层结果中有风险的那一部分的输出了
import pandas as pd
from pywebio.input import *
from pywebio import start_server
from pywebio.output import *
import nest_asyncio
import numpy as np
import os
import time
nest_asyncio.apply()
def 配置规则_风险值阈值(df, user_risk, pp_risk=None):
df_updated = df[(df['风险值A'] >=user_risk)|((df['风险值B'] >=pp_risk))]
return df_updated
def read_csv():
put_markdown('# 只支持pin')
put_markdown('功能如下:')
put_markdown("""
- 选择与程序再**同一文件夹**的文件
- 输入你希望卡的风险值阈值 **不输入则默认-10**
- 自动加载解析输出极黑标签占比以及明细数据
- 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
""")
file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
## 本地文件
data = []
raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
put_html(raw_data.to_html())
risk_value = input_group(
"risk_value",
[
input("风险值A(默认-10)?", name="user_risk", type=NUMBER),
input("风险值B(默认-10)?", name="pp_risk", type=NUMBER)
],
)
raw_data_upated = 配置规则_风险值阈值(raw_data,risk_value['user_risk'], risk_value['pp_risk'])
table1 = raw_data_upated.groupby('指标').账号.count().reset_index()
table1['占比'] = table1.账号 / len(raw_data_upated.账号.unique()) * 100
table1.sort_values('占比', ascending=False, inplace=True)
put_html(table1.to_html())
## -------------------------- 下面是 step three 新增的代码 --------------------------
set_list = raw_data_upated.指标.unique()
list_save = checkbox(label='勾选保留的标签,不勾选=全选', options=set_list, inline=True)
if list_save == []:
list_save = set_list
else:
list_save = list_save
raw_data_upated = raw_data_upated[raw_data_upated.指标.isin(list_save)]
put_html(raw_data_upated.to_html())
def Save0():
put_markdown("You click Save button, Done").show()
raw_data_upated.to_excel(os.getcwd() + "\" + '输出的风险明细.xlsx', index=False)
put_markdown("find your file on 程序同级文件夹下的 文件 : 输出的风险明细.xlsx").show()
put_buttons(['下载文件"对内不对外输出明细.xlsx"'], onclick=[Save0]).show()
## -------------------------- 上面是 step three 新增的代码 --------------------------
if __name__ == '__main__':
start_server(read_csv, port=8081, debug=True, cdn=False, auto_open_webbrowser=True)
总结
这里只是举了个简单的例子,一个支持阈值+标签卡控,快速获取符合要求的目标群体的例子。 实际上,这个框架的拓展还有很多。例如:
1.直连数据库,可以帮住那些不会sql的同事可以自定义快速获取业务数据。
2.Pyinstaller封装成本地程序,脱离代码环境,可以在任意电脑,任意环境,任意人士进行使用。
希望这个例子可以帮助到大家,感谢大家的耐心读取
【团队效率提升】Python-PyWebIO介绍的更多相关文章
- DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升
CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...
- day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm
复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...
- 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)
Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...
- 基于微服务的DevOps落地指南 交付效率提升40%
基于微服务的DevOps落地指南 交付效率提升40% 2015-2016年,珍爱线下门店已新增覆盖城市9个,与此同时,CRM系统大小故障却发生了数十起... ... 珍爱网是以“网络征选+人工红娘”模 ...
- 学会这些 pycharm 编程小技巧,编程效率提升 10 倍
PyCharm 是一款非常强大的编写 python 代码的工具.掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧. 一.分屏展示 当你想同时看到多个文件的时候: 1.右击标签页: ...
- 干货:用好这13款VSCode插件,工作效率提升10倍
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...
- web开发中的 emmet 效率提升工具
web开发中的 emmet 效率提升工具 可以用来快速生成html 代码. 并且给各种IDE.编辑器提供了插件支持,sublime ,webstorm等. 如在webstorm中安装好emmet之后, ...
- 【转】Python Twisted介绍
Python Twisted介绍 作者:Jessica McKellar 原文链接 Twisted是用Python实现的基于事件驱动的网络引擎框架.Twisted诞生于2000年初,在当时的网络游戏开 ...
- Python入门介绍
Python入门介绍(人生苦短,我用 Python) Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
随机推荐
- 实践丨手把手教你用STM32设计WiFi语音播报日程表
摘要:随着电子产品的发展,数字日程表这项应用在人们工作和生活中起到越来越重要的作用.本文带领大家基于STM32自己动手制作一个WiFi语音播报日程表. 本文分享自华为云社区<基于STM32设计的 ...
- 云小课 | 一分钟了解AppCube中的应用
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:应用魔方(AppC ...
- IOS上架流程详解,包含审核避坑指南!
准备 开发者账号 完工的项目 上架步骤 一.创建App ID 二.创建证书请求文件 (CSR文件) 三.创建发布证书 (CER) 四.创建Provisioning Profiles配置文件 (PP ...
- 火山引擎DataLeap一站式数据治理解决方案及平台架构
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在字节跳动内部,DataLeap数据平台数据治理团队致力于建立一站式.全链路的数据治理解决方案平台. 数据治理的概 ...
- 【C++第三方库】Windows下编译和使用 WebSocket++/WebSocketpp
应用场景: 使用C++开发一个支持websocket协议的服务进程,可与HTML5(浏览器js文件)通信.来实现替换基于firebreath框架的跨浏览器插件开发. 当前,讲述websocketpp开 ...
- Codeforces 670C (离散化入门题)
原题链接:https://codeforces.com/problemset/problem/670/C 题目大意: 有 n 个人,每人会且仅会一种语言. (n ≤ 2e5) 语言有各自的编号(≤ 1 ...
- 从青铜到王者,揭秘 Serverless 自动化函数最佳配置
[福利活动]1分钟Serverless部署PHP商城实验班上线啦! 带你体验如何使用 Serverless 应用引擎 SAE 快速部署一个PHP商城,并体验 SAE 带来的弹性伸缩.应用监控等强大能力 ...
- 二、Mycat安装
系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 万 ...
- python之十进制、二进制、八进制、十六进制转换
数字处理的时候偶尔会遇到一些进制的转换,以下提供一些进制转换的方法 一.十进制转化成二进制 使用bin()函数 1 x=10 2 print(bin(x)) 二.十进制转化为八进制 使用oct()函数 ...
- python常见面试题讲解(三)明明的随机数
题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对 ...