pandas の cut、qcut でデータ解析-python

pandas の cutqcutは配列データの分類に使います。分類の方法は

  • cut
    境界値を指定して分類する。
    (ヒストグラムのビン指定と言ったほうが判りやすいかもしれません)
  • qcut
    値の大きさ順にn等分する

という違いがあります。

- 目次 -

スポンサーリンク

cut で分類

たとえば、数字が適当に並べてあったとします。

この数値を以下の 3 つのレンジに分類したいとします。

1~34~78~10

その場合、cutの境界値として [0, 3, 7, 10] を指定します。

境界値を決めて実行

実行してみます。

茶色の部分が出力結果ですが、ちょっと判りづらいですね。(3, 7] とか (0, 3] とか・・・

これはレンジを表しており

  1. (0, 3] は 1~3 を意味します。
  2. (3, 7] は 4~7 を意味します。
  3. (7, 10] は 8~10 を意味します。

( ” は下限値を含まない、” ] ” は上限値を含むという意味です。

cut は、6個の各データ(10、1、9、3、4、8)をレンジに振り分けてるわけです。出力の意味は

ということです。

補足

上の例では、「下限を含まない、上限を含む」になっていますが、right=False で逆にできます。

[0, 3) は 0~2 を意味します。
[3, 7) は 3~6 を意味します。
[7, 10) は 7~9 を意味します。
NaN が出ているのは、数値 10 がどのレンジにも属さないためです。

分類結果の使い道

なんのために分類したかといえば、レンジごとの件数を数えたいからです。value_counts を使って

ヒストグラムのビン指定と同じです。cut の出力を DataFrame と組み合わせて groupby のキーにすることもできます。(下に例あり

qcut で分類

qcut は値の大きさ順にデータをn等分してくれます。が、データに重複があるとちょっと怪しくなります。

重複がないケース

まず、重複がない正常ケースを見てみます。

期待通り9個のデータが3等分されています。

重複があるケース

でも、重複があると

ちょっと偏ります。
さらに重複データを増やすと

なんと、エラーになります。(注 Python 2.7.10 で確認)

データが偏って重複の多い場合は使わないほうがいいのかもしれません。

DataFrame で cut を応用

DataFrame のグルーピング(groupby)キーを cut で作ってみます。

学生の身長データがあったとします。

このデータを 小柄、普通、長身 の3つに分類して、その人数を数えたいとします。

分類は cut で

結果を df にマージしてgroupby

df にマージしたくなければ

結果は同じです。仮想的に key がマージされ、その結果が groupby されます。

スポンサーリンク

コメントはお気軽に