次の Python コードの出力はどれでしょうか?
Python コード:
import pandas as pd dates = pd.date_range( '2023-01-01', periods=5, freq='D') df = pd.DataFrame( {'A': ['foo', 'bar', 'foo', 'bar', 'foo']}, index=dates) df['A'] = df['A'].astype('category') print(df['A'].cat.codes)
回答の選択肢:
(A) 0, 1, 0, 1, 0
(B) 1, 0, 1, 0, 1
(C) ‘foo’, ‘bar’, ‘foo’, ‘bar’, ‘foo’
(D) NaN, NaN, NaN, NaN, NaN
出力例:
2023-01-01 1 2023-01-02 0 2023-01-03 1 2023-01-04 0 2023-01-05 1 Freq: D, dtype: int8
正解:
(B)
解説:
このコードでは、カテゴリ型の特徴量を扱っています。「foo」と「bar」という2つのカテゴリ値を持つ特徴量を日付でインデックス付けされたデータフレームに作成し、その特徴量をカテゴリデータとしてエンコードしています。
詳しく説明します。
‘2023-01-01’ から始まる日単位の日付範囲を5期間生成します。
dates = pd.date_range( '2023-01-01', periods=5, freq='D')
dates
に格納されているデータは次のようになっています。
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'], dtype='datetime64[ns]', freq='D')
生成した日付をインデックスとしたデータフレームを作成します。データフレームの列’A’には ‘foo’, ‘bar’, ‘foo’, ‘bar’, ‘foo’ という値が含まれています。そして、その’A’列をカテゴリデータとして処理するよう指定します。これにより、’A’列のデータはカテゴリ型として扱われます。
df = pd.DataFrame( {'A': ['foo', 'bar', 'foo', 'bar', 'foo']}, index=dates) df['A'] = df['A'].astype('category')
df
に格納されているデータは次のようになっています。
A 2023-01-01 foo 2023-01-02 bar 2023-01-03 foo 2023-01-04 bar 2023-01-05 foo
`.cat.codes`を用いて各カテゴリ値をそのコード値(整数)に変換し表示します。ここでは ‘bar’ が 0、’foo’ が 1 としてエンコードされています。
print(df['A'].cat.codes)
カテゴリエンコーディングは、カテゴリ変数を扱う際に一般的に用いられる方法で、機械学習モデル等での処理を容易にするために使われます。
2023-01-01 1 2023-01-02 0 2023-01-03 1 2023-01-04 0 2023-01-05 1 Freq: D, dtype: int8