Kaggle(8) - データの型変換

データセットの中に分析に向かないデータがある場合、分析に適した形式に変更する必要があります。

例えば、「男」「女」のようなテキストデータの場合、seabornのヒートマップでは可視化できないため「男」→0、「女」→1のように数値へ変換します。

データセットに対してのいろいろな変換パターンがありますが、今回はデータ型の変換を実行してみます。

テキストデータから数値データへの変換

テキストデータを数値データに変換する例を次の一覧に示します。

変換前(テキスト)変換後(数値)
男/女0/1
良い/普通/悪い0/1/2
神奈川支店/千葉支店100/200

タイタニックのデータセットには性別データ(male/female)がありますので、これを数値データに変換します。

まずはデータセットを読み込み、性別のデータを表示します。

1
2
3
import seaborn as sns
titanic = sns.load_dataset('titanic')
titanic['sex'].head()

「male」を0に、「female」を1に変換するコードは次の通りです。

apply関数を使うと各データに関数を適用することができます。

1
2
df = titanic['sex'].apply(lambda x: 0 if x == 'male' else 1)
df.head()

想定通りにテキストデータを数値データに変換することができました。


数値データからテキストデータへの変換

視点や切り口を変えてデータを分析するために、数値データからテキストデータへ変換を行うことがあります。

例えば、年齢のような数値データを「幼年/少年/成人/熟年」のように変換しデータの尺度を変えると、元の数値データには見えない特徴が見えることがあります。

タイタニックの年齢データを次の一覧のようにテキストデータに変換します。

変換前(数値)変換後(テキスト)
0歳から6歳幼年
7歳から15歳少年
16歳から30歳青年
31歳から45歳壮年
46歳から60歳中年
61歳以上熟年

まずは元の年齢データを表示して数値を確認します。

1
titanic['age'].head()

年齢をテキストデータに変換するコードは下記の通りです。

再びapply関数を使いますが、条件分岐が多いためlambdaを使わず事前に関数定義を行っています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 年齢をテキストデータに変換
def trans(age):
if age < 7:
return '幼年'
elif age < 16:
return '少年'
elif age < 31:
return '青年'
elif age < 46:
return '壮年'
elif age < 61:
return '中年'
else:
return '熟年'

df = titanic['age'].apply(trans)
df.head()

年齢に応じて青年、壮年などのテキストデータが表示されます。

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

次回は、要約統計量の表示を行います。