【團隊效率提升】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封裝成本地程式,脫離程式碼環境,可以在任意電腦,任意環境,任意人士進行使用。 希望這個例子可以幫助到大家,感謝大家的耐心讀取
- ChatGPT/InstructGPT詳解
- 使用“寶塔一鍵遷移”工具,將單機版typecho部落格系統遷移到京東雲cvm雲主機
- 跳躍表資料結構與演算法分析
- 淺談服務介面的高可用設計
- 基於Seata探尋分散式事務的實現方案
- 混沌演練實踐(一)
- H5直播技術起航
- TiDB 底層儲存結構 LSM 樹原理介紹
- 一次JVM GC長暫停的排查過程
- 精準測試之覆蓋
- ElasticSearch必知必會-基礎篇
- 京音平臺-一起玩轉SCRM之電銷系統
- ThreadLocal原始碼解析及實戰應用
- 我在京東做研發 | 京東雲演算法科學家解析爆火的ChatGPT
- 【團隊效率提升】Python-PyWebIO介紹
- 一文教會你mock(Mockito和PowerMock雙劍合璧)
- 百萬併發場景中倒排索引與點陣圖計算的實踐
- 隱私計算技術開源的整體現狀
- Jupyter Notebook入門指南
- 2022 倒帶 - NutUI