データクリーニングの一連の作業のうち、データ型を確認する手順を説明します。カテゴリカルデータを処理するための最初の一歩です。


チートシート

やりたいこと コーディング
データの型を調べる df.dtypes
整数型にする df['列名']=df['列名'].astype(int)
カテゴリカル型にする df['列名']=pd.Categorical(df['列名'])

カテゴリーデータとは、名前やラベルに基づいて保存し、識別することができる情報の形式を指します。 数値で測定するのではなく、カテゴリーに分類することができる定性的なデータの一種です。

このデータ型は、性別や都道府県などを示すカテゴリー変数で構成されています。 カテゴリカルな測定値は数値で与えられるのではなく、自然言語による記述で与えられます。数字がそれを表すこともあるが、その数字は数学的には何の意味もありません。 カテゴリカルデータの例としては以下のようなものがあります:

  • 生年月日
  • 電話番号
  • 好きな色
  • 洋服のサイズ

この例では、生年月日や電話番号が数字で構成されています。 数値が含まれていても、カテゴリーデータとして扱われます。 提供されたデータがカテゴリー的か数値的かを判断する方法として平均値を計算することが簡単な方法です。

平均値を把握できれば(平均値に意味があれば)、数値データとみなされます。 平均値を把握できない(平均値に何も意味がない)場合は、カテゴリーデータとみなされます。


次に、分析データが 「カテゴリカル変数として定義されてるか」について考えてみましょう。 以下の手順で確認します。

  1. そもそもデータタイプがカテゴリカル変数かどうか
  2. カテゴリカルデータの要素を概観する
    • 総数
    • 種類
    • 種類ごとの数(集計)
  3. NAN(欠損値)の有無を調べる

オリジナルデータセットdf の各列のデータの型を調べるには、df.dtypes と入力するだけです。

1
2
# data frame の各列のデータ型を見る
df.dtypes  

以下がアウトプットです。

データフレーム名はdfという名前で14列ありました。

PY_01     object
PY_02    float64
PY_03      int64
PY_04    float64
PY_05      int64
PY_06     object
PY_07    float64
PY_08    float64
PY_09      int64
PY_10     object
PY_11      int64
PY_12    float64
PY_13    float64
Py_14    float64
dtype: object

PY_07 の内容は、数字ですがその実態は都道府県番号です。 しかし、データを読み込むにあたり、float64 と認識されており、例えば東京の番号13 に対して13.0 と小数点付きの数字で扱われてしまいます。

従って、まず整数にして小数点を取り払い、その後カテゴリカルデータに変更する2段階のステップを踏む必要があります。 

float64 から整数 int64 に変更してそれから、カテゴリカルデータのデータ型に変更します。 整数にするには、 df['列名']=df['列名'].astype(int) とします。

1
2
3
4
5
# data frame の'PY_07' 列の型を整数にする
df['PY_07']=df['PY_07'].astype(int) 
# 確認

df['PY_07'].dtypes

結果は以下のとおり整数型になりました:

dtype('int64')

次に、カテゴリカルのデータ型に変換します。Categoricalメソッドを使います。 具体的には:df['列名']=pd.Categorical(df['列名']) です。

整数型や浮動小数点型にする時と構文が異なります

1
2
3
4
5
# data frame の'PY_07' 列の型をカテゴリカルデータ型にする
df['PY_07']=pd.Categorical(df['PY_07'])

# 確認する
df['PY_07'].dtypes

結果は以下のとおり:

CategoricalDtype(categories=[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
                  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
                  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
                  46, 47],
                 ordered=False)

ひとこと

カテゴリカル変数の場合、データの型が正しく読み込まれているかの確認作業は必須です。 カテゴリカル変数といっても、データの中身が整数で種類を表したりすると、今回の例のように整数型は浮動小数点型として認識している事が多々あります。注意が必要ですね。