作者:京东零售 关键

Q&A快速了解PyWebIO

Q:首先,什么是PyWebIO?

APyWebIO提供了一系列命令式的交互函数,能够让咱们用只用Python就可以编写 Web 应用, 不需要编写前端页面和后端接口, 让简易的UI开发效率大大提高(本人非研发,用词可能不妥,大家轻点喷)

Q:其次,我们能用来干嘛?? 这对一个团队的效率提升有什么作用??

APywebio的作用在于让咱们可以快速的开发一个带有UI界面的,支持用户输入的,以既定的逻辑输出结果的应用。 那么,我们是不是可以将团队内一些机械性的数据处理,数据异动分析等的工作以既定逻辑的方式通过Pywebio输出一个可复用的应用给大家使用呢? 当然,日常的数据运营过程中,咱们肯定不是面对着一成不变的case。 那么,我们是不是可以用不同参数输入的方式来达到一定的泛用性拓展呢? 只要,case和case之间的底层逻辑是一致的,我们就可以用同一套逻辑,不同的入参来达到不同结果输出的获取。

Exampl 倘若,我们每天都有一项工作,每天对着一份又一份业务反馈的订单,然后部门需要对着这些订单本身进行一个初步的风险分层,我们是不是可以把风险分层的底层规则写在后端,然后通过PywebIO来支持不同情况下的不同规则阈值输入, 快速获取咱们所需要的风险分层结果。 (当然,如果数据允许,直接写SQL也可以,可是,SQL需要一定的门槛,而PywebIO则可以通过UI的方式分享给那些没有技术背景的运营人员进行0代码使用。)

以下正式开始用一个例子来逐步介绍PywebIO拓展包

简介

虚拟背景: 每天需要一份又一份地对业务反馈的样本来进行风险分层,为了提高处理效率。

计划方案: 通过现有风险标签的波尔标签,非波尔标签体系来搭建一个支持 灵活配置阈值来快速获取分层结果的UI应用。

方案简介:基本逻辑如下,(以下均为举例所示,并不代表该方案就可以进行风险分层哈,大家请注意)

开始实现:这里的例子采取的是非数据库模式,支持的是上传本地csv,然后进行阈值配置。

Step one:本地文件上传

首先,肯定是得先文件上传的代码。

  1. ##例子如下:
  2. import pandas as pd
  3. from pywebio.input import *
  4. from pywebio import start_server
  5. from pywebio.output import *
  6. import nest_asyncio
  7. import numpy as np
  8. import os
  9. import time
  10. nest_asyncio.apply()
  11. import pandas as pd
  12. from pywebio.input import *
  13. from pywebio import start_server
  14. from pywebio.output import *
  15. import nest_asyncio
  16. import numpy as np
  17. import os
  18. import time
  19. nest_asyncio.apply()
  20. def read_csv():
  21. put_markdown('# 只支持pin')
  22. put_markdown('功能如下:')
  23. put_markdown("""
  24. - 选择与程序再**同一文件夹**的文件
  25. - 输入你希望卡的风险值阈值 **不输入则默认-10**
  26. - 自动加载解析输出极黑标签占比以及明细数据
  27. - 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
  28. """)
  29. file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
  30. ## 本地文件
  31. raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
  32. put_html(raw_data.to_html())
  33. if __name__ == '__main__':
  34. 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进行处理即可。

  1. import pandas as pd
  2. from pywebio.input import *
  3. from pywebio import start_server
  4. from pywebio.output import *
  5. import nest_asyncio
  6. import numpy as np
  7. import os
  8. import time
  9. nest_asyncio.apply()
  10. def 配置规则_风险值阈值(df, user_risk, pp_risk=None):
  11. df_updated = df[(df['风险值A'] >=user_risk)|((df['风险值B'] >=pp_risk))]
  12. return df_updated
  13. def read_csv():
  14. put_markdown('# 只支持pin')
  15. put_markdown('功能如下:')
  16. put_markdown("""
  17. - 选择与程序再**同一文件夹**的文件
  18. - 输入你希望卡的风险值阈值 **不输入则默认-10**
  19. - 自动加载解析输出极黑标签占比以及明细数据
  20. - 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
  21. """)
  22. file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
  23. ## 本地文件
  24. data = []
  25. raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
  26. put_html(raw_data.to_html())
  27. ## -------------------------- 下面是 step two 新增的代码 --------------------------
  28. risk_value = input_group(
  29. "risk_value",
  30. [
  31. input("风险值A(默认-10)?", name="user_risk", type=NUMBER),
  32. input("风险值B(默认-10)?", name="pp_risk", type=NUMBER)
  33. ],
  34. )
  35. raw_data_upated = 配置规则_风险值阈值(raw_data,risk_value['user_risk'], risk_value['pp_risk'])
  36. table1 = raw_data_upated.groupby('指标').账号.count().reset_index()
  37. table1['占比'] = table1.账号 / len(raw_data_upated.账号.unique()) * 100
  38. table1.sort_values('占比', ascending=False, inplace=True)
  39. put_html(table1.to_html())
  40. ## -------------------------- 上面是 step two 新增的代码 --------------------------
  41. if __name__ == '__main__':
  42. start_server(read_csv, port=8081, debug=True, cdn=False, auto_open_webbrowser=True)

Step Three: 标签卡控

从第二步,我们已经完成了风险值阈值的卡控,然后第三步就是标签的选取了。从对标签的理解和应用经验以及第二步得到的标签在样本中的占比,咱们就可以快速的知道,这个样本里面的标签分布分别是什么。进一步可以通过标签的选取达到最终符合我们风险分层结果中有风险的那一部分的输出了

  1. import pandas as pd
  2. from pywebio.input import *
  3. from pywebio import start_server
  4. from pywebio.output import *
  5. import nest_asyncio
  6. import numpy as np
  7. import os
  8. import time
  9. nest_asyncio.apply()
  10. def 配置规则_风险值阈值(df, user_risk, pp_risk=None):
  11. df_updated = df[(df['风险值A'] >=user_risk)|((df['风险值B'] >=pp_risk))]
  12. return df_updated
  13. def read_csv():
  14. put_markdown('# 只支持pin')
  15. put_markdown('功能如下:')
  16. put_markdown("""
  17. - 选择与程序再**同一文件夹**的文件
  18. - 输入你希望卡的风险值阈值 **不输入则默认-10**
  19. - 自动加载解析输出极黑标签占比以及明细数据
  20. - 请勾选你所需要的标签**(不勾选=全选)**,然后点击提交即可
  21. """)
  22. file = file_upload('只支持上传该程序所在文件夹的csv文件哦', '.csv')
  23. ## 本地文件
  24. data = []
  25. raw_data = pd.read_csv(os.getcwd() + "\" + file['filename'], encoding='gbk')
  26. put_html(raw_data.to_html())
  27. risk_value = input_group(
  28. "risk_value",
  29. [
  30. input("风险值A(默认-10)?", name="user_risk", type=NUMBER),
  31. input("风险值B(默认-10)?", name="pp_risk", type=NUMBER)
  32. ],
  33. )
  34. raw_data_upated = 配置规则_风险值阈值(raw_data,risk_value['user_risk'], risk_value['pp_risk'])
  35. table1 = raw_data_upated.groupby('指标').账号.count().reset_index()
  36. table1['占比'] = table1.账号 / len(raw_data_upated.账号.unique()) * 100
  37. table1.sort_values('占比', ascending=False, inplace=True)
  38. put_html(table1.to_html())
  39. ## -------------------------- 下面是 step three 新增的代码 --------------------------
  40. set_list = raw_data_upated.指标.unique()
  41. list_save = checkbox(label='勾选保留的标签,不勾选=全选', options=set_list, inline=True)
  42. if list_save == []:
  43. list_save = set_list
  44. else:
  45. list_save = list_save
  46. raw_data_upated = raw_data_upated[raw_data_upated.指标.isin(list_save)]
  47. put_html(raw_data_upated.to_html())
  48. def Save0():
  49. put_markdown("You click Save button, Done").show()
  50. raw_data_upated.to_excel(os.getcwd() + "\" + '输出的风险明细.xlsx', index=False)
  51. put_markdown("find your file on 程序同级文件夹下的 文件 : 输出的风险明细.xlsx").show()
  52. put_buttons(['下载文件"对内不对外输出明细.xlsx"'], onclick=[Save0]).show()
  53. ## -------------------------- 上面是 step three 新增的代码 --------------------------
  54. if __name__ == '__main__':
  55. start_server(read_csv, port=8081, debug=True, cdn=False, auto_open_webbrowser=True)

总结

这里只是举了个简单的例子,一个支持阈值+标签卡控,快速获取符合要求的目标群体的例子。 实际上,这个框架的拓展还有很多。例如:

1.直连数据库,可以帮住那些不会sql的同事可以自定义快速获取业务数据。

2.Pyinstaller封装成本地程序,脱离代码环境,可以在任意电脑,任意环境,任意人士进行使用。

希望这个例子可以帮助到大家,感谢大家的耐心读取

【团队效率提升】Python-PyWebIO介绍的更多相关文章

  1. DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升

    CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...

  2. day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm

    复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...

  3. 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)

    Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...

  4. 基于微服务的DevOps落地指南 交付效率提升40%

    基于微服务的DevOps落地指南 交付效率提升40% 2015-2016年,珍爱线下门店已新增覆盖城市9个,与此同时,CRM系统大小故障却发生了数十起... ... 珍爱网是以“网络征选+人工红娘”模 ...

  5. 学会这些 pycharm 编程小技巧,编程效率提升 10 倍

    PyCharm 是一款非常强大的编写 python 代码的工具.掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧. 一.分屏展示 当你想同时看到多个文件的时候: 1.右击标签页: ...

  6. 干货:用好这13款VSCode插件,工作效率提升10倍

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...

  7. web开发中的 emmet 效率提升工具

    web开发中的 emmet 效率提升工具 可以用来快速生成html 代码. 并且给各种IDE.编辑器提供了插件支持,sublime ,webstorm等. 如在webstorm中安装好emmet之后, ...

  8. 【转】Python Twisted介绍

    Python Twisted介绍 作者:Jessica McKellar 原文链接 Twisted是用Python实现的基于事件驱动的网络引擎框架.Twisted诞生于2000年初,在当时的网络游戏开 ...

  9. Python入门介绍

    Python入门介绍(人生苦短,我用 Python) Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 ...

  10. python模块介绍-locustio:性能测试工具locustio

    转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...

随机推荐

  1. aPaaS将如何改变软件行业?

    摘要:当SaaS在云计算中的占比越来越高的时候,几乎所有软件厂商言必谈SaaS,各大云厂商.咨询机构也都将目光瞄准了SaaS.如此火爆的现象背后,真实情况如何呢? 本文分享自华为云社区<[开天a ...

  2. APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法。

    ​ 公钥和 MD5 值可以通过苹果开发工具.Keytool.appuploder 等多种工具获取,最简单的就是以 appuploader为例. 1.下载 appuploader工具 ,点击此处 下载 ...

  3. Seal 软件供应链防火墙 v0.2 发布,提供依赖项全局洞察

    Seal 软件供应链防火墙 v0.2 已于近日发布.这款产品旨在为企业提供代码安全.构建安全.依赖项安全及运行环境安全等4大防护,通过全链路扫描.问题关联及风险组织的方式保护企业软件供应链安全,降低企 ...

  4. JS 判断域名并跳转到指定页面

    判断访问指定域名,进行页面跳转 <!DOCTYPE html> <html> <head> <title>正在玩命加载中--</title> ...

  5. 《Function Programming in C++》

    说明 <Functional Programming in C++>书中代码练习测试以及一些笔记,部分代码需要用到C++20可以使用在线编译器编译代码 地址:https://coliru. ...

  6. AStyle - Clion中配置代码格式化工具

    安装 (OSX平台) brew install astyle brew list astyle CLion 配置 1.下载插件File Watchers 2.配置插件File Watchers:按照图 ...

  7. Spring 学习笔记(3)控制反转 IoC

    本篇文章主要对 Spring 框架中的核心功能之一控制反转 (IOC,Inversion of Control)进行介绍,采用理论 + 实战的方式给大家阐述其中的原理以及明确需要注意的地方. 控制反转 ...

  8. 【每日一题】33. 简单瞎搞题 (滚动数组 + bitset 优化DP)

    补题链接:Here 这个问题的难点在于如何统计出所有和可能出现的情况,并且不能重复. 很容易想到用桶去存储每一个数,即某个和能够组合出来则为1,否则为0 不妨令 \(dp[i][j]\) 表示为第 \ ...

  9. C#排序算法6:快速排序

    快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

  10. CDC设计实例-02

    CDC设计实例 加速器 假设要处理一项业务比如图像处理,有两种方向,第一种选择一些通用的处理器CPU\GPU\DSP等通用的处理器,第二种是将算法映射成IP,直接使用IP进行处理图像处理等专门的业务就 ...