データ分析で使える!qcutとcutで連続値にラベルをつける方法【pandas入門】

データセット中の連続量の値に対して簡単にラベルを付与したいと思ったことはないでしょうか。例えば、収入の分布を値に応じて「低」「中」「高」などに分けたいなどです。pandasで提供されている関数qcutcutは簡単にラベルの付与が可能です。

ワカメさん

この記事はpandasの関数 qcutとcutの使い方についてまとめます。

この記事がカバーする内容
  • qcutによる分位数ベースの分割
  • cutによる等間隔の分割
  • qcutとcutの使い分け
スポンサーリンク

qcut

qcutはサンプルの分位数にあわせて均等サイズのビンにデータを分割する分位数ベース関数です。例を使ってqcutの機能を確認します。

import numpy as np
import pandas as pd

#make a dataframe
data = [0,100,200,300,400,500,600,700,800,900,1000]
df = pd.DataFrame({"data":data})

# apply qcut
label = ["Low", "Medium", "High", "Very High"]
df['class'] = pd.qcut(df["data"],q=4,labels=label)
print(df)

データを4分割してみます。qcutによりデータがそれぞれのパーセンタイルの値を境に4分割されました。

    data      class
0      0        Low
1    100        Low
2    200        Low
3    300     Medium
4    400     Medium
5    500     Medium
6    600       High
7    700       High
8    800  Very High
9    900  Very High
10  1000  Very High

cut

cutはデータの値の範囲を等間隔に分けます。

# apply cut
labels = ["Small", "Medium", "Large"]
df["class"] = pd.cut(df["data"],bins=3, labels=labels)
print(df)

0-1000の範囲で3等分してラベルを与えてみます。

    data   class
0      0   Small
1    100   Small
2    200   Small
3    300   Small
4    400  Medium
5    500  Medium
6    600  Medium
7    700   Large
8    800   Large
9    900   Large
10  1000   Large

qcutとcutの使い分け

  • qcut: 各カテゴリに同じ件数を入れたい、外れ値の影響を抑えたい
  • cut: 値の区間幅で分けたい、区間を自分で指定して分けたい

まとめ

qcutやcutを使用すると、連続値をカテゴリに変換してより分かりやすい分析が可能になります。また、データラベリングすることで、可視化、集計にも役立てることができます。

qcutとcut
  • qcut:
    • 分位数に従ってデータを均等に分ける。
    • 各ビンに同じ数のデータが入る
    • 外れ値があってもバランスよく分ける
    • データの偏りに強い
  • cut:
    • 値の範囲を等間隔に分けてデータを分ける
    • 外れ値が多いとデータ数が偏る可能性がある

参考資料

(1) pandas.qcut (2023/5/7アクセス)

(2) pandas.cut(2023/5/7アクセス)

スポンサーリンク
この記事が気にいったらシェアしてね!
0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
ABOUT US
ワカメ
Data Scientist, Master of Data Science & Master of Engineering in Material Science
このブログは以下2点を目的に運営.
1. 管理人の学び・体験の復習機会
2. 海外留学を目指す方の参考情報
趣味の範囲で淡々と更新します.
*ブログ・SNSは所属組織と無関係の個人発信.