5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

選自towardsdatascience作者:Parul Pandey

機器之心編譯參與:王子嘉

數據挖掘是機器學習領域的一個重要組成部分。在確定訓練哪種模型以及訓練多少模型之前,我們必須對數據包含的內容有所瞭解。Pandas 庫為此提供了許多有用的函數,value_counts 就是其中之一。此函數返回 pandas 數據框中各個項的數量。但在使用 value-counts 函數的大多數時候用到的是默認參數。因此,在這篇短文中,作者介紹瞭如何通過自定義參數來實現更多的功能。

5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

value_counts()

value_counts() 方法返回一個序列 Series,該序列包含每個值的數量。也就是說,對於數據框中的任何列,value-counts () 方法會返回該列每個項的計數。
語法

Series.value_counts()


參數

5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

圖源:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html
基本用法

作者通過以下數據集來觀察 value-count () 函數的基本用法,其中 Demo 中使用了 Titanic 數據集。她還在 Kaggle 上發佈了一個配套的 notebook。
代碼鏈接:https://www.kaggle.com/parulpandey/five-ways-to-use values -counts

5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平


導入數據集


首先導入必要的庫和數據集,這是每個數據分析流程的基本步驟。

# Importing necessary librariesimport pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline# Reading in the data
train = pd.read_csv('../input/titanic/train.csv')


瞭解數據集的前幾行內容

train.head()
5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

統計無效值數量

train.isnull().sum()
5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

由上圖可見,Age、Cabin 和 Embarked 列都有無效值。通過這些分析,我們就對數據集有了初步的瞭解。現在就讓我們來看一下 value_counts() 是如何對這個數據集進行進一步探索的,那 5 個高效方法又是什麼呢?

默認參數值下的 value_counts()

首先在數據集的 Embarked 列上使用 value_counts (),這樣會對該列中出現的每個值進行計數。

train['Embarked'].value_counts()
-------------------------------------------------------------------
S 644
C 168
Q 77


這個函數會對給定列裡面的每個值進行計數並進行降序排序,無效值也會被排除。我們很容易就能看出,Southampton 出發的人最多,其次是 Cherbourg 和 Queenstown。
如何用 value_counts() 求各個值的相對頻率

有時候,百分比比單純計數更能體現數量的相對關係。當 normalize = True 時,返回的對象將包含各個值的相對頻率。默認情況下,normalize 參數被設為 False。

train['Embarked'].value_counts(normalize=True)
-------------------------------------------------------------------
S 0.724409
C 0.188976
Q 0.086614

因此,知道有 72% 的人從 Southampton 出發比單純知道 644 個人從 Southampton 出發要直觀得多。如何實現升序的 value_counts()

默認情況下,value_counts () 返回的序列是降序的。我們只需要把參數 ascending 設置為 True,就可以把順序變成升序。

train['Embarked'].value_counts(ascending=True)
-------------------------------------------------------------------
Q 77
C 168
S 644

如何用 value_counts() 展示 NaN 值的計數默認情況下,無效值(NaN)是不會被包含在結果中的。但是跟之前一樣的,只需要把 dropna 參數設置成 False,你也就可以對無效值進行計數。

train['Embarked'].value_counts(dropna=False)
-------------------------------------------------------------------
S 644
C 168
Q 77
NaN 2

我們可以很直觀地觀察到該列內有兩個無效值。
如何用 value_counts() 將連續數據放進離散區間

這是 value_counts() 所有功能中作者最喜歡的,也是利用最充分的。改變參數 bin 的值,value_counts 就可以將連續數據放進離散區間。這個選項只有當數據是數字型時才會有用。它跟 pd.cut 函數很像,讓我們來看一下它是如何在 Fare 這一列大顯身手的吧!

# applying value_counts on a numerical column without the bin parametertrain['Fare'].value_counts()
5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平

這個結果並不能告訴我們什麼信息,因為類別太多了。所以讓我們把它集合到 7 個區間裡。

train['Fare'].value_counts(bins=7)

區間化(Binning)之後的結果更容易理解。我們可以很容易地看到,大多數人支付的票款低於 73.19。此外,我們還可以發現,有五個區間是我們需要的,並且沒有乘客的最後兩個區間是沒用的。因此,我們可以看到,value_counts() 函數是一個非常方便的工具,我們可以使用這一行代碼進行一些有趣的分析。


原文鏈接:
https://towardsdatascience.com/getting-more-value-from-the-pandas-value-counts-aa17230907a6


分享到:


相關文章: