作者:京东零售 要害
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封装成本地程序,脱离代码环境,能够在恣意电脑,恣意环境,恣意人士进行运用。
期望这个比如能够帮助到咱们,感谢咱们的耐性读取