(點擊上方快速關注並設置為星標,一起學Python)
選自towardsdatascience 作者:Parul Pandey
機器之心編譯 參與:王子嘉
數據挖掘是機器學習領域的一個重要組成部分。在確定訓練哪種模型以及訓練多少模型之前,我們必須對數據包含的內容有所了解。Pandas 庫為此提供了許多有用的函數,value_counts 就是其中之一。此函數返回 pandas 數據框中各個項的數量。但在使用 value-counts 函數的大多數時候用到的是默認參數。因此,在這篇短文中,作者介紹了如何通過自定義參數來實現更多的功能。
value_counts()
value_counts() 方法返回一個序列 Series,該序列包含每個值的數量。也就是說,對於數據框中的任何列,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首先導入必要的庫和數據集,這是每個數據分析流程的基本步驟。
# 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 )
由上圖可見,Age、Cabin 和 Embarked 列都有無效值。通過這些分析,我們就對數據集有了初步的了解。現在就讓我們來看一下 value_counts() 是如何對這個數據集進行進一步探索的,那 5 個高效方法又是什麼呢?首先在數據集的 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 () 返回的序列是降序的。我們只需要把參數 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 這一列大顯身手的吧!
這個結果並不能告訴我們什麼信息,因為類別太多了。所以讓我們把它集合到 7 個區間裡。
train[ Fare ].value_counts(bins=7)
區間化(Binning)之後的結果更容易理解。我們可以很容易地看到,大多數人支付的票款低於 73.19。此外,我們還可以發現,有五個區間是我們需要的,並且沒有乘客的最後兩個區間是沒用的。因此,我們可以看到,value_counts() 函數是一個非常方便的工具,我們可以使用這一行代碼進行一些有趣的分析。https://towardsdatascience.com/getting-more-value-from-the-pandas-value-counts-aa17230907a6