作者:京东批发 要害
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 封装老本地程序,脱离代码环境,能够在任意电脑,任意环境。
心愿这个例子能够帮忙到大家,感激大家的急躁读取