幾款強(qiáng)大的 Pandas 數(shù)據(jù)探索工具,推薦收藏使用
對于 Python 數(shù)據(jù)分析領(lǐng)域,Pandas 絕對是中堅力量,那么圍繞著這個工具,又衍生出了很多輔助工具,今天我們就一起來看看輔助 Pandas 來進(jìn)行數(shù)據(jù)探索的幾種工具
首先我們先來看看我們的測試數(shù)據(jù)集
import pandas
df = pd.read_excel("2018_Sales_Total_v2.xlsx")
df

對于上面的數(shù)據(jù),如果使用 Excel,我們可以非常方便的進(jìn)行簡單的過濾、搜索等操作

那么在不借助 Excel 的情況,我們有哪些好用的工具呢
JavaScript tools
最簡單的方法是使用 JavaScript 庫向數(shù)據(jù)中的 DataFrame 視圖添加一些交互屬性
Qgrid
首先我們來看看 Qgrid,這是一個 Jupyter notebook 組件,可以為我們的 DataFrame 添加交互屬性
import qgrid
import pandas
df = pd.read_excel("2018_Sales_Total_v2.xlsx")
widget = qgrid.show_grid(df)
widget

可以看到,Qgrid 的過濾功能還是很不錯的,基本上接近于 Excel 了,但是它也有一些缺點(diǎn),Qgrid 不能進(jìn)行可視化,也不能使用 Pandas 表達(dá)式來過濾和選擇數(shù)據(jù),所以說,Qgrid 只適用于簡單的數(shù)據(jù)操作和檢查
PivottableJs
PivottableJs 工具并不是真正用于查看 DataFrame 數(shù)據(jù)的,但我們可以把它當(dāng)做一個非常有用的匯總數(shù)據(jù)工具來使用
它通過一個 JavaScript 庫的數(shù)據(jù)透視表來進(jìn)行交互式數(shù)據(jù)透視和匯總
from pivottablejs import pivot_ui
pivot_ui(df)

我們通過單擊和拖動來匯總每個客戶購買的數(shù)量
當(dāng)然,除了基本的求和函數(shù),我們還可以做一些可視化和統(tǒng)計分析

該工具對于過濾原始 DataFrame 沒有太大的用處,但對于透視和匯總數(shù)據(jù)方面是非常強(qiáng)大,我們可以在構(gòu)建數(shù)據(jù)透視表后過濾數(shù)據(jù),以此來充分發(fā)揮這個工具的作用
Data Analysis Applications
接下來我們介紹比較成熟的 GUI 工具,通常使用 Web 后端(如 Flask)或基于 Qt 的單獨(dú)應(yīng)用程序。
這些應(yīng)用程序的復(fù)雜性和功能各不相同,從簡單的表格視圖和繪圖功能到強(qiáng)大的統(tǒng)計分析。這些工具的獨(dú)特之處在于它們與 Pandas 緊密集成,因此我們可以使用 Pandas 代碼來過濾數(shù)據(jù)并與這些應(yīng)用程序交互
PandasGUI
我們首先來看的第一個應(yīng)用程序是 PandasGUI,這個應(yīng)用程序的獨(dú)特之處在于它是一個用 Qt 構(gòu)建的獨(dú)立應(yīng)用程序,可以直接從 Jupyter notebook 調(diào)用
from pandasgui import show
show(df)

比如上圖,使用 Pandas 查詢語法過濾數(shù)據(jù)以顯示一位客戶且購買數(shù)量 > 15 的數(shù)據(jù)
PandasGUI 與 Plotly 集成使得我們可以方便的構(gòu)建可視化

PandasGUI 的一項(xiàng)非常棒的功能是過濾器對所有選項(xiàng)卡中的 DataFrame 都有效,我們可以使用此功能在繪制或轉(zhuǎn)換數(shù)據(jù)時嘗試不同的數(shù)據(jù)視圖
PandasGUI 的另一個功能是我們可以通過旋轉(zhuǎn)或融合數(shù)據(jù)來重塑數(shù)據(jù),以下是 SKU 單位銷售額的摘要


PandasGUI 真的是一個令人印象深刻的工具!
Tabloo
Tabloo 使用 Flask 作為后端為 DataFrames 數(shù)據(jù)提供簡單的可視化工具以及類似于 PandasGUI 的繪圖功能
import tabloo
tabloo.show(df)

Dtale
Dtale 還是比較復(fù)雜的,功能也更加強(qiáng)大。Dtale 的架構(gòu)類似于 Tabloo,因?yàn)樗瑯邮褂?Flask 后端,但也包括一個強(qiáng)大的 React 前端
import dtale
dtale.show(df)

Dtale 不僅僅是一個 DataFrame 查看器,還是一個非常強(qiáng)大的統(tǒng)計工具集

我們還可以導(dǎo)出代碼,這是一個非常強(qiáng)大的功能,將 Excel + Python 解決方案與普通 Excel 區(qū)分開來
下面的例子就可以從上面的可視化圖表中導(dǎo)出代碼
import numpy as np
import pandas as pd
if isinstance(df, (pd.DatetimeIndex, pd.MultiIndex)):
df = df.to_frame(index=False)
# remove any pre-existing indices for ease of use in the D-Tale code, but this is not required
df = df.reset_index().drop('index', axis=1, errors='ignore')
df.columns = [str(c) for c in df.columns] # update columns to strings in case they are numbers
s = df[~pd.isnull(df['{col}'])][['{col}']]
chart, labels = np.histogram(s, bins=20)
import scipy.stats as sts
kde = sts.gaussian_kde(s['unit price'])
kde_data = kde.pdf(np.linspace(labels.min(), labels.max()))
# main statistics
stats = df['unit price'].describe().to_frame().T
Dtale 還可以對數(shù)據(jù)進(jìn)行格式化,在下面的示例中,我們將貨幣和日期列格式化為更易于閱讀的形式

Excel
最后來介紹一些與 Excel 相結(jié)合的工具
PyXLL
PyXLL 是一個付費(fèi)產(chǎn)品,不過我們可以免費(fèi)試用 30 天來一睹它的風(fēng)采

它真正的強(qiáng)大之處在于,我們可以將 Jupyter Notebook 與 Excel 共同使用,并使用 jupyter 魔術(shù)命令在 Notebook 和 Excel 之間交換數(shù)據(jù)
xlwings
xlwings 和 PyXLL 類似,也是有商業(yè)公司支持的。但是,有一個社區(qū)版是開源的,我們可以使用開源版本
雖然 xlwings 不直接與 Jupyter Notebook 集成,但我們可以使用 DataFrame 實(shí)時填充 Excel 電子表格并使用 Excel 進(jìn)行分析
import pandas as pd
import xlwings as xw
url =
df = pd.read_excel("2018_Sales_Total_v2.xlsx")
# Create a new workbook and add the DataFrame to Sheet1
xw.view(df)
此代碼將打開一個新的 Excel 實(shí)例并將 df 放入單元格 A1

好了,今天介紹的 Pandas 數(shù)據(jù)探索工具就是這么多,喜歡就點(diǎn)個贊吧
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗(yàn)一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長文系列第②篇)

