pythonコード プログラミング系 pandas python データサイエンス 非エンジニア向け

【Python Coding】pandasでデータフレームのユニーク値を抽出

こんにちは、TAKです。
今回はpythonのpandasを用いて、データフレームを構成する要素のユニーク値を抽出する方法を紹介していきたいと思います。

「ユニーク値」というのは、簡単に言うと「重複しない(一意の)値」のことです。
「データフレームの構成要素を重複なしでカウントしたい!」といった場合に使える方法なので、興味のある方は参考にしてみてください。

今一つイメージが湧かないという方でも、記事内で具体例を使って説明しているので、読み進めるうちに具体的な意味や使い方がわかるようになるかと思います。

【こんな人に読んで欲しい記事です】

● pandasを使ってデータフレーム要素からユニーク値の抽出が出来るようになりたい方

● pandasを使った、ユニーク値の抽出方法が使える具体的な場面を知りたい方

ユニーク値とは?

冒頭でも軽く紹介しましたが、ユニーク値とは「一意の重複しない値」を意味します。
もう少しイメージしやすいように具体例をあげてみます。

このあとpythonコードを使った具体例でも紹介しますが、例えば「ある日に買い物をしてくれた顧客数」をカウントしたいとしましょう。ある商品を買ってくれたお客さんを調べたところ、「午前中にAさんとBさん、午後にAさんとCさん」が買い物をしていたことがわかりました。

このとき、買い物をしてくれた顧客数のユニーク値は「3人」となります。
観測データとしては「4」になりますが、午前午後と買い物をしているAさんを重複してカウントしているので、純粋な顧客数を知りたいような場合に、今回紹介する「ユニーク値」が役に立つイメージです。

必要ライブラリのインポート

今回使うライブラリのインポート

まず最初に、今回使うpandasをインポートしておきます。
「ユニーク値」をデータフレームの要素から抽出するにあたって、それ以外のライブラリは特に使いません。

ユニーク値の使い方【3選】

これから、2つの具体例を想定してデータフレームを構成する要素のユニーク値を抽出する方法を「3つ」紹介していきます。最初に、その「3つの方法の概要」を紹介しておきます。

データフレームの要素からユニーク値を抽出する3つの方法

【方法①】 df[column名].value_counts():要素とカウント結果の組み合わせを取得

【方法②】 df[column名].unique():要素をnumpy配列(ndarray)形式で取得

【方法③】 df[column名].nunique():要素のカウント数を取得

言葉だけみても意味の違いはわかりにくいと思うので、この後具体的な違いをコードを通じて説明していきます。ここでは、いずれの方法もデータフレーム自体に適用しているのではなく、シリーズに対して適用している点がポイントです。

「DataFrameとSeriesの違いが今一つわからない」といった方は、以下記事内で紹介しているので参考にしてみてください。

具体例①|タイタニックデータ

では実際に具体例をみていきたいと思います。
まず最初に、タイタニックデータを用いて3つの使い方を比べていきます。

先ほど、データフレーム自体に対して適用するのではなく、シリーズに対して適用するとお伝えしましたが、今回はカラム「Survived」に着目していきます。これは生存者に関するラベル(目的変数)であり、「1」が助かった人、「0」が助からなかった人を意味しています。

タイタニックデータの読み込み

では実際に、先ほど紹介した3つの方法を適用した結果を比べてみます。

方法①|value_counts()を用いた場合

「Survived」の構成要素「0」「1」とカウント結果(各出現回数)の組み合わせを取得

ユニーク値の抽出例①|value_countsを用いた場合

方法②|unique()を用いた場合

「Survived」の構成要素「0」「1」をnumpy配列(ndarray)形式で取得

ユニーク値の抽出例①|uniqueを用いた場合

方法③|nunique()を用いた場合

「Survived」の構成要素「0」「1」をカウントした数「2」を取得

ユニーク値の抽出例①|nuniqueを用いた場合

以上のように、それぞれの方法を適用した結果がだいぶ違うので、自分が知りたい情報や目的に応じて使い分けるようにしてみてください。

ちなみに、今回のタイタニックデータの場合には、「方法①」が一番使えるかなと思います。
機械学習において、ラベルの数と出現回数を確認することで、不均衡データへの対応を検討する場合に使えます。

具体例②|顧客購買データ

続いては、「日付とユーザー名」から構成されるシンプルなデータを作った上で、3つの方法を比較してみてようと思います。

今回使うデータと、データ集計イメージを図示したものが以下です。

顧客購買データのイメージ図

各日付ごとのユニークな顧客数を集計することを目的とした場合、「3つの方法を適用するとどうなるのか?」「3つのうちどの方法が使えるか」を確認していきます。

まず最初に、データを作っておきます。

顧客データを想定したDataFrameを作成

このデータフレームを前提として、3つの方法を適用した結果が以下となります。
日付ごとにまとめる必要があるため、先にgroupbyを適用し、その後ユニーク抽出をしています。

方法①|value_counts()を用いた場合

「User」の構成要素「Aさん・Bさん・Cさん」とカウント結果(買い物回数)の組み合わせを取得

⇒ 内訳を知る観点からはわかりやすいですが、今回の目的を示した結果にはなっていませんね。

ユニーク値の抽出例②|value_countsを用いた場合

方法②|unique()を用いた場合

「User」の構成要素「Aさん・Bさん・Cさん」をnumpy配列(ndarray)形式で取得

⇒ 購入者の名前はわかりますが、今回の目的を示した結果にはなっていませんね。

ユニーク値の抽出例②|uniqueを用いた場合

方法③|nunique()を用いた場合

「User」の構成要素「Aさん・Bさん・Cさん」の買い物回数をユニークで取得

⇒ 日付別のユニークな顧客数を端的に示しているので、この方法が一番マッチしていますね。

ユニーク値の抽出例②|nuniqueを用いた場合

以上のように、タイタニックデータの場合とは異なり、今回の顧客購買データを想定した場合には、「方法③」が一番使いやすいことがわかりました。

ちなみに、カウントする方法である「count」を用いた場合は、以下のように「間違ったユニーク数」を取得してしまうので、注意が必要となります。(重複を許すカウントをしたい場合には、この方法を使えばOKです。)

【参考】countを用いた場合

さいごに

今回は、pythonのpandasを用いてデータフレームを構成する要素の「ユニーク値」を抽出する方法を紹介してきました。

目的に応じて使える方法は異なるので、今回紹介した「3つ」の方法を使いこなせるようにしてみてください。

では今回はこのへんで。