2023年五個(gè)自動(dòng)化EDA庫(kù)推薦
EDA或探索性數(shù)據(jù)分析是一項(xiàng)耗時(shí)的工作,但是由于EDA是不可避免的,所以Python出現(xiàn)了很多自動(dòng)化庫(kù)來(lái)減少執(zhí)行分析所需的時(shí)間。EDA的主要目標(biāo)不是制作花哨的圖形或創(chuàng)建彩色的圖形,而是獲得對(duì)數(shù)據(jù)集的理解,并獲得對(duì)變量之間的分布和相關(guān)性的初步見(jiàn)解。我們?cè)谝郧耙步榻B過(guò)EDA自動(dòng)化的庫(kù),但是現(xiàn)在已經(jīng)過(guò)了1年的時(shí)間了,我們看看現(xiàn)在有什么新的變化。
為了測(cè)試這些庫(kù)的功能,本文使用了兩個(gè)不同的數(shù)據(jù)集,只是為了更好地理解這些庫(kù)如何處理不同類型的數(shù)據(jù)。
YData-Profiling
以前被稱為Pandas Profiling,在今年改了名字。如果你搜索任何與EDA自動(dòng)化相關(guān)的內(nèi)容時(shí),它都會(huì)作為第一個(gè)結(jié)果出現(xiàn),這也是有充分理由的。
這個(gè)庫(kù)最有用和最常用的是ProfileReport()命令。它生成整個(gè)數(shù)據(jù)集的詳細(xì)摘要,報(bào)告對(duì)于獲得數(shù)據(jù)的概覽非常有用,特別是如果你不知道從哪里或如何開(kāi)始分析(通常是這種情況)。這對(duì)于那些想要節(jié)省時(shí)間的新手或有經(jīng)驗(yàn)的分析師來(lái)說(shuō)非常有用。該報(bào)告提供單變量分布,突出數(shù)據(jù)質(zhì)量問(wèn)題,并創(chuàng)建相關(guān)性。讓我們看一下患者風(fēng)險(xiǎn)概況數(shù)據(jù)的報(bào)告:
patient_data = pd.read_csv('/kaggle/input/patient-risk-profiles/patient_risk_profiles.csv')
zomato_data=pd.read_csv('/kaggle/input/zomato-data-40k-restaurants-of-indias-100-cities/zomato_dataset.csv')
from ydata_profiling import ProfileReport
patient_report=ProfileReport(patient_data)
patient_report
zomato_report=ProfileReport(zomato_data)
zomato_report
這份報(bào)告在很直觀,也非常全面,它提供了一個(gè)很好的概述:
變量統(tǒng)計(jì)的簡(jiǎn)明概述,缺失值的百分比,重復(fù)值等。
在Alerts選項(xiàng)卡的簡(jiǎn)單文本中高亮顯示數(shù)據(jù)質(zhì)量問(wèn)題,如高相關(guān)性,類不平衡等。
在variables 選項(xiàng)卡中給出了所有變量的單變量分析。有助于了解該變量的分布和統(tǒng)計(jì)特性。
點(diǎn)擊變量下的“More Details”可以提供對(duì)各種其他統(tǒng)計(jì)數(shù)據(jù),直方圖,常見(jiàn)值和極值的更深入分析?;旧习艘话阄覀兿胍赖乃行畔?。
對(duì)于文本變量,報(bào)告生成了一個(gè)類似于NLP的概述,如下所示:
Interactions選項(xiàng)卡可以進(jìn)行雙變量分析,其中x軸變量在左列,y軸變量在右列。可以混搭來(lái)觀察變量之間的相關(guān)性。這里唯一的限制是可用的圖表類型只有散點(diǎn)圖,所以如果想使用不同類型的圖表,必須手動(dòng)繪制。
在Correlations 下,可以觀察到所有變量的熱圖。但是由于變量數(shù)量太多,熱圖幾乎難以辨認(rèn),所以最好是用自定義參數(shù)繪制手動(dòng)熱圖。
最后還顯示了缺失值和相應(yīng)的列,以及重復(fù)的行(如果有的話)。
現(xiàn)YData報(bào)告對(duì)于在新數(shù)據(jù)集上獲得立足點(diǎn)并找到進(jìn)一步調(diào)查的方向非常有用。因?yàn)镻andas Profiling算是最早 的一個(gè)自動(dòng)化EDA庫(kù)了,并且YData對(duì)它做了非常大的更新。但是在較大數(shù)據(jù)集的情況下生成報(bào)告所需的時(shí)間很長(zhǎng),并且有時(shí)會(huì)崩潰。
SweetViz
這是我自己最喜歡用的自動(dòng)化庫(kù)。它有三個(gè)主要函數(shù)可用于匯總數(shù)據(jù)集
analyze() -匯總單個(gè)數(shù)據(jù)集并生成報(bào)告。
compare() -比較兩個(gè)df,如' train '和' test '。它只會(huì)比較常見(jiàn)的功能。
compare_intra() -比較相同數(shù)據(jù)集的子集。例如,同一數(shù)據(jù)中的“男性”和“女性”統(tǒng)計(jì)數(shù)據(jù)。
如果在Jupyter或Kaggle中工作,可以使用show_notebook()來(lái)呈現(xiàn)報(bào)告,在本地可以使用show_html()在新的瀏覽器窗口中打開(kāi)報(bào)告。
import sweetviz as sv
patient_report_2=sv.analyze(patient_data)
patient_report_2.show_notebook(w="100%", h="full")
該報(bào)告與YData類似,提供了類似的信息,但UI感覺(jué)有點(diǎn)過(guò)時(shí)。
Association 選項(xiàng)卡創(chuàng)建了一個(gè)熱圖,提供了對(duì)變量相關(guān)性的洞察,由于變量的數(shù)量很大,熱圖是難以辨認(rèn)的,對(duì)我們沒(méi)有用處。所以可以使用explore_correlations()函數(shù)導(dǎo)出相關(guān)矩陣,并使用這些數(shù)據(jù)繪制帶有自定義參數(shù)的熱圖。
為每個(gè)變量提供的信息更加簡(jiǎn)潔。缺失值、惟一值、分布甚至相關(guān)性都在每個(gè)變量部分中一起給出,所以不必在各個(gè)模塊之間跳轉(zhuǎn)以查看信息。
對(duì)于直方圖,箱的數(shù)量也可以改變。統(tǒng)計(jì)信息可以在右上角查看,頻繁值和極值也可以在底部看到。
但是它除了熱圖之外沒(méi)有提供雙變量分析,因此無(wú)法看到兩個(gè)變量如何相互作用,這與YData不同。
在分析文本數(shù)據(jù)時(shí),所提供的信息主要基于類和百分比分布,這比YData報(bào)告中少了很多
SweetViz給出了數(shù)據(jù)集的一個(gè)很好的概述,并且作為任何分析的起點(diǎn)都是很好的,關(guān)鍵是它運(yùn)行的速度很快。
D-Tale
D-Tale只需一行代碼就可以創(chuàng)建一個(gè)完全交互的界面,其中有大量的選項(xiàng)可隨意使用。只需點(diǎn)擊一個(gè)按鈕就可以完成一些事情,不需要編寫(xiě)許多行代碼。幾乎所有你想通過(guò)編碼做的事情都有一個(gè)UI功能,可以通過(guò)下拉菜單輕松獲得。
import dtale
patient_report=dtale.show(patient_data)
patient_report
也可以在單獨(dú)的瀏覽器中打開(kāi)報(bào)表,而不是在jupyter中工作。這可以提供更大的空間來(lái)探索數(shù)據(jù)及其特性。只需點(diǎn)擊左上角箭頭,選擇“Open in New Tab”。
這個(gè)菜單包含了一個(gè)列表中所有可用的功能,這些功能也在頂部的行中被劃分為自動(dòng)隱藏,所以需要保將光標(biāo)懸停在列上方以查看工具欄,這是一個(gè)對(duì)于新手不好的地方。
Actions:在這個(gè)類別下,你可以使用pandas函數(shù)來(lái)實(shí)現(xiàn)聚合、數(shù)據(jù)清理、數(shù)據(jù)轉(zhuǎn)換等功能。所有這些都是交互式的,只需點(diǎn)擊鼠標(biāo)即可。最棒的是,當(dāng)你將鼠標(biāo)懸停在每個(gè)功能上時(shí),每個(gè)功能的解釋都會(huì)彈出??梢允褂肅lean column從文本數(shù)據(jù)中刪除標(biāo)點(diǎn)符號(hào),并且只需單擊幾下即可標(biāo)準(zhǔn)化文本數(shù)據(jù)。這是一個(gè)非常方便的特性,特別是對(duì)于新手來(lái)說(shuō)。
Visualize:這是最有用的分類,給出了整個(gè)數(shù)據(jù)集的漂亮摘要。類似于pandas的describe()方法。
可以做缺失值分析、時(shí)間序列分析、查找相關(guān)性或創(chuàng)建圖表。選擇想要的圖表類型,選擇x和y變量,如果需要,選擇組,圖形將自動(dòng)加載。也可以選擇多個(gè)變量或組。不需要代碼,只需點(diǎn)擊幾下就可以繪制完整的圖表。
還可以單擊列標(biāo)題以顯示更多選項(xiàng),包括列分析,更改數(shù)據(jù)類型,查找重復(fù)項(xiàng),重命名列,刪除或更改位置等。這些任務(wù)可以通過(guò)編寫(xiě)基本代碼輕松完成,但是使用這個(gè)工具可以節(jié)省很多時(shí)間。你也可以編輯任何單元格的值,只需點(diǎn)擊它,就像在excel中一樣。
這個(gè)庫(kù)可以說(shuō)是EDA的第二步,通過(guò)自動(dòng)化EDA我們對(duì)數(shù)據(jù)有了一定了解后使用這個(gè)庫(kù),可以在數(shù)據(jù)清理、預(yù)處理和可視化方面節(jié)省很多時(shí)間。
Klib
Klib是一個(gè)有趣的小庫(kù),非常容易使并且創(chuàng)建了非常有用的視覺(jué)效果。它還包含清理和預(yù)處理數(shù)據(jù)的功能。它還將一些非常常見(jiàn)的預(yù)處理步驟(這些步驟可能很繁瑣)合并為單個(gè)命令,這些命令可以運(yùn)行以獲得相同的結(jié)果。這個(gè)庫(kù)是由著名的數(shù)據(jù)科學(xué)教育家Krish Naik推薦的,所以值得一試。
df = pd.DataFrame(data)
# klib.describe - functions for visualizing datasets
- klib.cat_plot(df) # returns a visualization of the number and frequency of categorical features
- klib.corr_mat(df) # returns a color-encoded correlation matrix
- klib.corr_plot(df) # returns a color-encoded heatmap, ideal for correlations
- klib.corr_interactive_plot(df, split="neg").show() # returns an interactive correlation plot using plotly
- klib.dist_plot(df) # returns a distribution plot for every numeric feature
- klib.missingval_plot(df) # returns a figure containing information about missing values
# klib.clean - functions for cleaning datasets
- klib.data_cleaning(df) # performs datacleaning (drop duplicates & empty rows/cols, adjust dtypes,...)
- klib.clean_column_names(df) # cleans and standardizes column names, also called inside data_cleaning()
- klib.convert_datatypes(df) # converts existing to more efficient dtypes, also called inside data_cleaning()
- klib.drop_missing(df) # drops missing values, also called in data_cleaning()
- klib.mv_col_handling(df) # drops features with high ratio of missing vals based on informational content
- klib.pool_duplicate_subsets(df) # pools subset of cols based on duplicates with min. loss of information
我嘗試了一些可視化功能,下圖顯示了所有變量的熱圖,上面的三角形被消去了(這是默認(rèn)的),這是一個(gè)很好的特性。它使圖表更具可讀性。由于變量的數(shù)量非常多,因此很難看到相關(guān)性,但默認(rèn)的配色方案可以讓我們看到相關(guān)性較高的地方聚集在一起,用深藍(lán)色標(biāo)記。
圖表的配色方案很好,信息也很清晰。但是信息水平不像前幾個(gè)庫(kù)那樣密集,這對(duì)于那些只希望看到某些特定數(shù)據(jù)而不希望被信息淹沒(méi)的人來(lái)說(shuō)是件好事。但是為了獲得數(shù)據(jù)的概覽,必須編寫(xiě)更多行代碼來(lái)獲得想要的內(nèi)容。
這個(gè)庫(kù)很有趣,它肯定是工具箱中一個(gè)有用的工具,但我發(fā)現(xiàn)它在預(yù)處理的時(shí)候會(huì)更有用,因?yàn)樵S多常用的預(yù)處理技術(shù)已經(jīng)被壓縮成單行命令,可以直接執(zhí)行節(jié)省編碼時(shí)間。
Dabl
數(shù)據(jù)分析基線庫(kù)- Dabl。這個(gè)庫(kù)在執(zhí)行時(shí)需要確定一個(gè)目標(biāo)變量,將目標(biāo)列作為y軸進(jìn)行繪圖。雖然這個(gè)庫(kù)仍在開(kāi)發(fā)中,但是它可以直接幫你進(jìn)行雙變量分析,這通常是我們真正想看到的。每個(gè)變量相對(duì)于目標(biāo)變量的表現(xiàn)。
import dabl
import matplotlib.pyplot as plt
dabl.plot(patient_data, target_col='predicted risk of Pulmonary Embolism')
plt.show()
這與seaborn中的pairplot()命令非常相似。
Dabl也有一些數(shù)據(jù)清理功能,并開(kāi)始引入一些基本的機(jī)器學(xué)習(xí)模型,但是我覺(jué)得這些功能都太多了,沒(méi)有必要。
這是一個(gè)不錯(cuò)的庫(kù),具有良好的雙變量分析和一些額外的數(shù)據(jù)清理功能。如果已經(jīng)確定了目標(biāo)變量,并且只是希望觀察它與其他特征的行為,那么它可能非常有用。
Sketch
它是一個(gè)基于LLM(大型語(yǔ)言模型)的庫(kù),只有三個(gè)命令,其中一個(gè)使用OpenAI API。這導(dǎo)致它有大小限制,所以我們必須取數(shù)據(jù)的一個(gè)子集。
就像其他LLM(ChatGPT)一樣,Sketch使用自然語(yǔ)言來(lái)處理查詢并產(chǎn)生類似人類的輸出。它利用人工智能將數(shù)據(jù)分析過(guò)程轉(zhuǎn)化為對(duì)話。
這三個(gè)命令是ask()、howto()和apply()。最后一個(gè)使用OpenAI的API,對(duì)數(shù)據(jù)生成很有用。第一個(gè)函數(shù)ask()將導(dǎo)致會(huì)話輸出,而howto()將導(dǎo)致給出如何實(shí)現(xiàn)目標(biāo)的代碼。兩者如下所示:
query="How do I plot a chart of all missing values ?"
query2="I want an overview of this dataset"
patient_data_subset=patient_data.iloc[:, :19]
以對(duì)話的形式探索數(shù)據(jù)集是非常有趣的,從一個(gè)查詢到下一個(gè)查詢,直到獲得所需的信息。新手和老手都可以使用howto()函數(shù)來(lái)快速生成代碼塊,不必從頭編寫(xiě)整個(gè)代碼,節(jié)省了時(shí)間。
Sketch允許在Jupyter中使用類似GPT的功能。但是ChatGPT也直接支持了Jupyter,可以集成到開(kāi)發(fā)環(huán)境中,這使得這個(gè)庫(kù)變得多余,但是如果你希望通過(guò)使用OpenAIs API密鑰來(lái)避免復(fù)雜性,簡(jiǎn)單地使用Sketch作為python包是最簡(jiǎn)單的方法。
這個(gè)庫(kù)可以很有趣,但是也只是有趣,并不能作為自動(dòng)EDA來(lái)推薦,我提到他只是因?yàn)樗薒LM的功能,不建議在線上使用。
總結(jié)
YData Profiling執(zhí)行起來(lái)很簡(jiǎn)單,UI很直觀,給了我所有的信息,這是開(kāi)始EDA過(guò)程的一個(gè)很好的切入點(diǎn)。
D-Tale不僅是EDA過(guò)程的一個(gè)很好的起點(diǎn),而且可以用來(lái)輕松地預(yù)處理數(shù)據(jù),最主要是不需要編寫(xiě)任何代碼,這使得它非常節(jié)省時(shí)間,并且任何人都可以輕松訪問(wèn)。
SweetViz的UI有點(diǎn)過(guò)時(shí),但它提供了相當(dāng)數(shù)量的信息,最主要的時(shí)他可以比較兩個(gè)數(shù)據(jù)集。