【解説】手を動かしながらカウント(len関数、uniqueメソッド)を学ぶ | データサイエンス100本ノック【問21〜問22 回答】
当ページのリンクには広告が含まれています。
目次
この記事の対象者
本記事で学ぶpythonのメソッド
本記事では以下3つのメソッドを学びます
- リストの数や文字列の長さを数える関数
- 重複を除いた件数(ユニーク件数)を数えるメソッド
以降それぞれの内容についてまとめていきます。
リストの数や文字列の長さを数えるlen()
関数
len()関数はオブジェクトの長さや要素の数を取得するときに使用します。
len()関数の引数には、str型とlist型を使うことが出来ますが、int型、floot型、bool型などは使用できません。
1 | len("python") # 「6」と出力される |
重複を除いた件数(ユニーク件数)を数えるunique()
メソッド
重複を除いた件数であるユニーク件数を数えるメソッドは、unique()
と書きます。
例えば、以下のようなデータフレームがあったとします。
column 1 | column 2 | |
---|---|---|
1 | 12 | a |
2 | 3 | b |
3 | 46 | a |
4 | 61 | b |
このデータフレームのcolumn 2に対してユニーク件数を調べるとします。
要素の数自体は4つありますが、存在するアルファベットは2つなので、ユニーク数は2となります。
注意しなければならないのは、unique()
メソッドはDataFrame単体には使えないということです。
つまり、2次元のデータに対してunique()
メソッドは使うことが出来ないということです。
データフレーム、二次元のデータ、という言葉が「?」という方のために、改めてPandasにおける基本的なデータ構造についておさらいします。
Pnadasには、SeriesとDataFrameという2種類のデータ構造が存在します。
主に使われるデータ構造は2次元のデーブルで表されるDataFrameで、横方向のデータを行、縦方向のデータを列と呼びます。
各行、各列に対してそれぞれラベルが付けられており、行ラベルはインデックス、列ラベルはカラムといいます。
Seriesは1次元の配列で、DataFrameの行または列として捉えることができます。
こちらも同様にラベルが付いています。
実際に手を動かしながらlen()
とunique()
を使ってみよう
実際にlen()
とunique()
を使ってみましょう。
以降は、一般社団法人データサイエンティスト協会がGitHubに公開している「データサイエンス100本ノック」の21問目〜22問目を題材にしています。
データサイエンス100本ノックの環境構築方法は以下の記事にまとめていますので、こちらを参照してください
第21問目: len関数
P-021: レシート明細データフレーム(df_receipt)に対し、件数をカウントせよ。
まずは、レシート明細データフレーム(df_receipt)の全体像を確認しましょう。
1 | df_receipt |
1 |
|
以下のようにlen関数を用いて、レシート明細データフレーム(df_receipt)の件数をカウントすることができます。
1 | len(df_receipt) |
1 | 104681 |
第22問目: unique()メソッド
P-022: レシート明細データフレーム(df_receipt)の顧客ID(customer_id)に対し、ユニーク件数をカウントせよ。
問題の記述通りcustomer_id
を列指定しましょう。
1 | df_receipt[["customerid"]] |
1 |
|
len関数を用いて件数を確認します。
1 | len(df_receipt[["customer_id"]]) |
1 | 104681 |
ここで、unique()
メソッドを使って、ユニーク件数をカウントします。
1 | len(df_receipt[["customer_id"]].unique()) |
以下のようなエラーが出力されるかと思います。
1 | --------------------------------------------------------------------------- |
Dataframeオブジェクトには、uniqueメソッドは使えません、というエラーであることが分かります。
つまり、データが二次元([[]]
というふうに二重リスト)になっているから、uniqueメソッドが使えないということになります。
なので、DataFrameのcustomer_id列の一次元配列であることを明示的に示すために、[]
を1つ外します。
1 | len(df_receipt["customer_id"].unique()) |
こうすることで、以下のようにユニーク件数を出力することが出来ます。
1 | 8307 |
まとめ: len関数とuniqueメソッドを使えるようになりました。
本記事は、【Python】手を動かしながらカウントを学ぶ | データサイエンス100本ノック【問21〜問22 回答】というテーマでまとめました。
uniqueメソッドは、二次元配列では使用できず、1次元配列でのみ使用できる点に注意しましょう。