データの確認:ユニークな値

大量のデータをそのまま見ると、どのような種類の値があるかがわかりにくいです。このような時、ユニークな値を確認することで、データの種類を把握しやすくなります。

具体例で確認しましょう。

惣菜店の販売履歴を表した以下のdfを使います。

DateItemNum
02022/04/02弁当A2
12022/04/02中華B3
22022/04/03中華B1
32022/04/03弁当A4
42022/04/03サラダ2

ある列のユニークな値は、下記のように取得します。

df.列名.unique()

たとえば、列Itemのユニークな値は、以下のようになります。

df.Item.unique()

実行結果

array(['弁当A', '中華B', 'サラダ'], dtype=object)

結果は、多次元配列型になります。ここでは、リストのようなものと思ってください。
実行結果を確認すると、列Itemに含まれる値が重複なく取得できていることがわかります(弁当A中華Bサラダ)。

演習

import pandas as pd

df = pd.DataFrame({
    "Date": ["2022/04/02", "2022/04/02", "2022/04/03", "2022/04/03", "2022/04/03"],
    "Item": ["弁当A", "中華B", "中華B", "弁当A", "サラダ"],
    "Num": [2, 3, 1, 4, 2],
})
df

Out[1]:

DateItemNum
02022/04/02弁当A2
12022/04/02中華B3
22022/04/03中華B1
32022/04/03弁当A4
42022/04/03サラダ2

今回扱うデータには、2022/04/022022/04/03の2日間の販売履歴が含まれています。実際に、列Dateが2日分かどうかを確認しましょう。 ユニークな値は、列のunique()で取得できます。まとめて二つの項目はチェックできない。

df.Date.unique()
df[["Date","Num"]].unique()は出来ない。
array(['2022/04/02', '2022/04/03'], dtype=object)

続いて、列Itemのユニークな値を確認してみましょう。 結果を確認すると、3種類の商品が売れたことがわかります。

df.Item.unique()

Out[3]:

array(['弁当A', '中華B', 'サラダ'], dtype=object)

DataFrameとSeriesのメソッドの多くは共通で存在しますが、unique()はSeriesのみ存在します。DataFrameには存在しないので、下記のコメントを外して実行するとAttributeErrorになります。 また、下記のコメントを外したままだと、判定は通りません。AttributeErrorになることを確認したら、再度コメントアウトしてから判定を行ってください。In [4]:

# df.unique()

nunique()について

本問では、ユニークな値をunique()メソッドで取得しました。これに対し、ユニークな値の件数はnunique()メソッドで取得できます。名前がよく似ていますが、nがついています。これはnumbernです。
このメソッドを使うと、各列に重複した値が存在するかどうかの確認ができます(欠損値は無視します)。

具体例で確認しましょう。写経で扱ったdfでは、全ての列で重複があります。そのため、次のように列Numの要素が重複しないデータを作成して確認してみます。

df2 = df[:4]
df2
DateItemNum
02022/04/02弁当A2
12022/04/02中華B3
22022/04/03中華B1
32022/04/03弁当A4

重複していなければ、ユニークな値の数(nunique())と個数(count())が等しくなります。下記の式で確認できます。このようなSeries同士の比較結果は、要素がブール値のSeriesになります。

df2.nunique() == df2.count()

実行結果

Date    False
Item    False
Num      True
dtype: bool

Numは重複がないので、Trueになります。

上記では、DataFrame.nunique()を使いましたが、Series.nunique()も使えます。
たとえば、列Numに重複している値があるかどうかは、下記でわかります。

df2.Num.nunique() == df2.Num.count()

実行結果

True

コメント

タイトルとURLをコピーしました