5個(gè)可以幫助Pandas進(jìn)行數(shù)據(jù)預(yù)處理的可視化圖表
"一目了然勝過(guò)千言萬(wàn)語(yǔ)。"分析數(shù)據(jù)點(diǎn)的探索性數(shù)據(jù)分析(EDA)是在算法的數(shù)據(jù)建模之前制定假設(shè)的正確步驟。

數(shù)據(jù)科學(xué)行業(yè)中一個(gè)最常見(jiàn)的陷阱是花費(fèi)數(shù)小時(shí)為他們的項(xiàng)目尋找最佳算法,而沒(méi)有花足夠的時(shí)間首先理解數(shù)據(jù)。
數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)項(xiàng)目的結(jié)構(gòu)化方法從項(xiàng)目目標(biāo)開(kāi)始。同一組數(shù)據(jù)點(diǎn)可以推斷出一些有意義的信息?;谖覀兯鶎ふ业模覀冃枰P(guān)注數(shù)據(jù)的另一個(gè)方面。一旦我們明確了目標(biāo),我們就應(yīng)該開(kāi)始考慮我們需要的數(shù)據(jù)點(diǎn)。這將使我們能夠?qū)W⒂谧钕嚓P(guān)的信息集,而忽略可能不重要的數(shù)據(jù)集。
在現(xiàn)實(shí)生活中,從多個(gè)來(lái)源收集到的大多數(shù)時(shí)間數(shù)據(jù)都有空白值、打字錯(cuò)誤和其他異常。在進(jìn)行任何數(shù)據(jù)分析之前,清除數(shù)據(jù)是至關(guān)重要的。
在本文中,我將討論五個(gè)強(qiáng)大的數(shù)據(jù)可視化選項(xiàng),它們可以立即提供數(shù)據(jù)特征的感覺(jué)。即使在正式建模或假設(shè)測(cè)試任務(wù)之前,執(zhí)行EDA就可以傳達(dá)大量關(guān)于數(shù)據(jù)和特征之間關(guān)系的信息。
第1步-我們將導(dǎo)入pandas、matplotlib、seaborn和NumPy包,我們將使用這些包進(jìn)行分析。我們需要散點(diǎn)圖、自相關(guān)圖、滯后圖和平行圖。
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- from pandas.plotting import autocorrelation_plot
- import seaborn as sns
- from pandas.plotting import scatter_matrix
- from pandas.plotting import autocorrelation_plot
- from pandas.plotting import parallel_coordinates
- from pandas.plotting import lag_plot
第2步-在Seaborn包中,有一個(gè)內(nèi)置的小數(shù)據(jù)集。我們將使用"mpg"、"tips"和"attention"數(shù)據(jù)進(jìn)行可視化。數(shù)據(jù)集是在seaborn中使用load_dataset方法加載的。
- """Download the datasets used in the program """
- CarDatabase= sns.load_dataset("mpg")
- MealDatabase= sns.load_dataset("tips")
- AttentionDatabase= sns.load_dataset("attention")
六邊形分箱圖(hexpin)
我們經(jīng)常使用散點(diǎn)圖來(lái)快速掌握變量之間的關(guān)系。只要圖中沒(méi)有人口稠密的數(shù)據(jù)點(diǎn),獲得一個(gè)洞察力是非常有幫助的。在下面的代碼中,我們繪制了"mpg"數(shù)據(jù)集中"Horsepower" 和"Acceleration"數(shù)據(jù)點(diǎn)之間的散點(diǎn)圖。
- plt.scatter(CarDatabase.acceleration ,CarDatabase.horsepower,marker="^")
- plt.show()
散點(diǎn)圖中的點(diǎn)密集分布,從中獲取有意義的信息有點(diǎn)困難。

hexpins是解決重疊點(diǎn)散點(diǎn)圖的一個(gè)很好的替代方案。每個(gè)點(diǎn)不是在hexbin圖中單獨(dú)繪制的。在下面的代碼中,我們用相同的數(shù)據(jù)集在"Horsepower" 和"Acceleration"之間繪制一個(gè)hexbin。
- CarDatabase.plot.hexbin(x='acceleration', y='horsepower', gridsize=10,cmap="YlGnBu")
- plt.show()
在hexpin圖中可以清楚地推斷"Horsepower" 和"Acceleration"范圍集中值,變量之間呈負(fù)線性關(guān)系。六邊形的大小取決于"網(wǎng)格大小"參數(shù)。

熱力圖(Heatmaps)
熱力是我個(gè)人最喜歡查看不同變量之間的相關(guān)性。那些在媒體上跟蹤我的人可能已經(jīng)注意到我經(jīng)常使用它。在下面的代碼中,我們將計(jì)算seaborn"mpg"數(shù)據(jù)集中所有變量之間的成對(duì)相關(guān)性,并將其繪制為熱力圖。
熱力圖是我個(gè)人最喜歡查看不同變量之間的相關(guān)性。那些在媒體上跟蹤我的人可能已經(jīng)注意到我經(jīng)常使用它。在下面的代碼中,我們將計(jì)算seaborn"mpg"數(shù)據(jù)集中所有變量之間的成對(duì)相關(guān)性,并將其繪制為熱力圖。
- sns.heatmap(CarDatabase.corr(), annot=True, cmap="YlGnBu")
- plt.show()
我們可以看到"cylinders" 和 "horsepower" 是密切正相關(guān)的(正如在汽車中所預(yù)期的),而重量與加速度成反比。我們只需幾行代碼就可以快速理解所有不同變量之間的指示性關(guān)系。

自相關(guān)圖(Autocorrelation)
自相關(guān)圖是一個(gè)快速的試金石測(cè)試,以確定數(shù)據(jù)點(diǎn)是否隨機(jī)。如果數(shù)據(jù)點(diǎn)遵循某種趨勢(shì),那么一個(gè)或多個(gè)自相關(guān)將顯著非零。圖中的虛線顯示99%的置信區(qū)間。在下面的代碼中,我們正在檢查"tips"數(shù)據(jù)庫(kù)中的總帳單金額是否是隨機(jī)的。
- autocorrelation_plot(MealDatabase.total_bill)
- plt.show()
我們可以看到,自相關(guān)圖在所有時(shí)間滯后中都非常接近于零,這表明總的_bill數(shù)據(jù)點(diǎn)是隨機(jī)的。

當(dāng)我們按照特定順序繪制數(shù)據(jù)點(diǎn)的自相關(guān)圖時(shí),我們可以看到該圖顯著地非零。
- data = pd.Series(np.arange(12,7000,16.3)) autocorrelation_plot(data)
- plt.show()

滯后圖(Lag)
滯后圖也有助于驗(yàn)證數(shù)據(jù)集是隨機(jī)值集還是遵循某種趨勢(shì)。當(dāng)繪制"tips"數(shù)據(jù)集的"total_bills"值的滯后圖時(shí),就像在自相關(guān)圖中一樣,滯后圖表明它是隨機(jī)數(shù)據(jù),到處都有值。
- lag_plot(MealDatabase.total_bill)
- plt.show()

當(dāng)我們延遲繪制一個(gè)非隨機(jī)數(shù)據(jù)序列時(shí),如下面的代碼所示,我們得到了一條平滑的線條。
- data = pd.Series(np.arange(-12*np.pi,300*np.pi,10))
- lag_plot(data)
- plt.show()

平行坐標(biāo)圖(Parallel coordinates)
把我們的大腦包圍起來(lái)并將其可視化不僅僅是三維數(shù)據(jù),這一直是一個(gè)挑戰(zhàn)。繪制高維數(shù)據(jù)集的平行坐標(biāo)非常有用。每個(gè)尺寸用一條垂直線表示。
在平行坐標(biāo)系中,"N"等距垂直線表示數(shù)據(jù)集的"N"維度。頂點(diǎn)在第n個(gè)軸上的位置對(duì)應(yīng)于該點(diǎn)的第n個(gè)坐標(biāo)。
讓我們考慮一個(gè)小樣本數(shù)據(jù),它有五個(gè)小部件和大尺寸小部件的五個(gè)特性。

垂直線表示小部件的每個(gè)功能。一系列連續(xù)的線段代表"小"和"大"小部件的特征值。

下面的代碼繪制了seaborn中"attention"數(shù)據(jù)集的平行坐標(biāo)。請(qǐng)注意,群集的點(diǎn)看起來(lái)更靠近。
- parallel_coordinates(AttentionDatabase,"attention",color=('#556270', '#C7F464'))
- plt.show()

我希望你能開(kāi)始使用這些現(xiàn)成的繪圖來(lái)執(zhí)行探索性的數(shù)據(jù)分析