Python 時系列分析 1,000本ノック
– ノック23: 時系列データのカテゴリカル変換 –

Python 時系列分析 1,000本ノック– ノック23: 時系列データのカテゴリカル変換 –

次の 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

Python 時系列分析 1,000本ノック– ノック24: 時系列データのビニング –