此系列文章收錄在公眾號中:數據大宇宙 > Python > iwg
轉發本文并私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)
一個專欄讓從入門到精通 pandas ,里面還有許多實戰數據處理、分析案例:
前言
Python 配合上各式各樣的數據相關庫,讓我們輕松做出各種自動化效果,但是,有時候我們也會羨慕那種界面的操作,畢竟大家都喜歡點點鼠標就能讓自動化跑起來。
本系列將重點講解如何在 Jupyter Notebook 上如何用最小的代碼,快速為你的自動化代碼加上實用的界面。
我們將從一個加載數據的場景開始我們的學習之旅!
本系列大部分情況下都是基于 ipywidgets 在 Jupyter Notebook 下工作,請確保安裝 ipywidgets 庫與相應的 jp 插件。
執行如下命令即可完成安裝:
pip install ipywidgets && jupyter nbextension enable --py widgetsnbextension
直到看到如下信息:
Enabling notebook extension jupyter-js-widgets/extension...
- Validating: ok
現在重啟你的 Jupyter Notebook 即可。
本文用到的包如下:
import pandas as pd
import numpy as np
import ipywidgets as wg
from IPython.display import display
可以不修改代碼嗎
如果你經常需要從各種文件加載你的數據,那么下面的代碼真的是司空見慣:
但是,你不可能每天都從同一個文件中加載數據,那么明天該怎么執行這段自動化腳本?
沒錯!就是修改代碼中的文件路徑。
這勉強可以接受,但是能有更好的方式嗎?
先從簡單的來,比如在一個文本框中輸入文件名字與工作表名字,點擊加載按鈕即可運行你的代碼:
填入文件名字
首先,把我們的執行邏輯定義到一個函數中:
- 函數非常簡單,只是把其中的文件路徑和工作表名字提取作為參數
- 注意2個參數都給了一個默認的空字符串值
然后,為這個函數打上裝飾器,并執行:
- 行1:@wg.xxxx 是某個 ipywidgets 的裝飾器,為什么這里是 @wg ? 這是因為一開始我們的導入語句是 import ipywidgets as wg ,這是我們定義的別名
- @wg.interact_manual() ,是手動交互的意思,這情況下,他會根據目標函數的各個參數的默認值類型,判斷分別應該使用哪種控件
- 比如,我們的函數的2個參數都是字符串類型,因此他會自動生成2個文本框
- 在所有交互控件的下方,會生成一個按鈕
此時,我們往2個文本框輸入相應的信息,點擊最后的按鈕即可加載數據:
如果可以直接讓我選擇當前目錄下的所有文件名,那就太好了!
選擇一個文件
剛剛說過,ipywidgets 的裝飾器能自動根據參數默認值的類型生成適合的交互控件,這次,我們讀取當前目錄下的所有 Excel 文件路徑的列表,看看會有啥效果:
- 行1,2:使用 pathlib2 得到當前目錄的所有 xlsx 后綴的文件列表
- 行5:把上一步得到的文件列表,直接賦值給函數的參數 file 的默認值
- 現在看到,第一個交互控件最右邊有一個小下標,很明顯,這是一個下拉選擇框
- 點擊后,可以選擇文件
還有更多
那么,是不是連工作表名字也可以根據選擇的文件名字,轉為下拉選擇框?
- 這會有一些難度,本系列之后有詳細的講解
現在只是加載了數據,如果可以輸入查詢條件,過濾數據,那就太好了!
雖然要求越來越過分,但是也是可以的。
如下是可以選擇某個日期,并且加載數據中小于這個日期的記錄:
如果你覺得這還不夠好,我們還可以結合 pandas 的 query 方法,現在改變篩選條件,不再需要修改代碼了:
本系列將教會你這些,記得關注噢!