Kaggle(11) - 尺度変換

データを尺度変換すると分析しやすくなくことがあります。

例えば、25歳・38歳といった年齢の数値データから20代・30代という尺度へ変換することで各年代ごとの傾向や特徴を捉えやすくなります。

他にも価格データを「高い・普通・安い」と変換したり、レビューを「高い・普通・悪い」というような尺度へ変換することもよくあります。

ヒストグラムや散布図などで可視化した場合に、見やすくなるような粒度で変換するのがおすすめです。

尺度変換

チップのデータセットを使って尺度変換を試してみます。

まずはチップのデータセットを読み込みます。

1
2
3
4
5
import seaborn as sns
from matplotlib import pyplot as pyplot
sns.set(style='darkgrid')
tips = sns.load_dataset('tips')
tips

支払い総額(total_bill)をヒストグラムで表示します。

1
sns.distplot(tips.total_bill)

支払い総額(total_bill)を4段階の尺度に分割し、箱ひげ図で表示します。

  1. low (10未満)
  2. normal (10以上25未満)
  3. high (25以上40未満)
  4. very high (40以上)
1
2
3
4
5
6
7
8
9
10
11
12
13
def convert(x):
res = 0
if x < 10:
res = 'low'
elif x < 25:
res = 'normal'
elif x < 40:
res = 'high'
else:
res = 'veryhigh'
return res
tips['total_bill_level'] = tips.total_bill.apply(convert)
sns.boxplot(data=tips.sort_values('tip'), x='total_bill_level', y='tip')

総支払額に対するチップの金額ですが、支払い金額が多いほどチップ(の中央値)が増えていることが分かります。

総支払額が少ない場合や普通程度の場合に、チップの割合が多めになってしまうこともあるようです。(外れ値が多い)

(実行環境としてGoogleさんのColaboratoryを使用ています。)