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

value_counts()
value_counts() 方法返回一個序列 Series,該序列包含每個值的數量。也就是說,對於數據框中的任何列,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')
了解數據集的前幾行內容
train.head()

統計無效值數量
train.isnull().sum()

由上圖可見,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()

這個結果並不能告訴我們什麼資訊,因為類別太多了。所以讓我們把它集合到 7 個區間里。
train['Fare'].value_counts(bins=7)
區間化(Binning)之後的結果更容易理解。我們可以很容易地看到,大多數人支付的票款低於 73.19。此外,我們還可以發現,有五個區間是我們需要的,並且沒有乘客的最後兩個區間是沒用的。
因此,我們可以看到,value_counts() 函數是一個非常方便的工具,我們可以使用這一行程式碼進行一些有趣的分析。
原文鏈接:
https://towardsdatascience.com/getting-more-value-from-the-pandas-value-counts-aa17230907a6