機械学習

Pandasを利用してCSVファイルを読み込みカテゴリデータを数値に変換してみた

Pythonでデータの取り込みや加工・集計、分析処理に利用できるライブラリの一つにPandasがあり、これを利用するとCSVファイルの読み込みや加工が簡単に行える。

また、カテゴリデータ(例:性別)を機械学習で利用できるようにするには、文字列(例:男、女)を数値(例:1、0)に変換する必要があるが、その変換も、Pandasを利用すれば簡単に行える。

今回は、Pandasを利用してCSVファイルの読み込み・カテゴリデータの数値変換を行ってみたので、そのサンプルプログラムを共有する。

前提条件

今回サンプルプログラムで利用するCSVファイルは、以下の内容とする。
前提条件

このCSVファイルは、以下のサイトに記載の表を、CSVファイルに書き込んだものとなる。
https://note.com/morichannel2000/n/nb994e30bb1df

また、下記記事のAnacondaをインストールしJupyter Notebookを利用できること。

Python開発用のAnacondaをインストールしJupyter Notebookを利用してみた今回は、Pythonを勉強してみたいと思い、Python開発環境を構築してみたので、その手順を共有する。 Python開発用として...

さらに、下記記事の「Jupyter NotebookへのCSVファイルアップロード」に記載した手順に従って、今回利用するCSVファイル(user_data.csv)をアップロード済であること。

Pandasを利用してCSVファイルを読み込み欠損値補充をしてみたPythonでデータの取り込みや加工・集計、分析処理に利用できるライブラリの一つにPandasがあり、これを利用するとCSVファイルの読...

やってみたこと

  1. CSVファイルの読み込みとデータ抽出
  2. LabelEncoderを利用した変換
  3. ColumnTransformerとOneHotEncoderを利用した変換

CSVファイルの読み込みとデータ抽出

Pandasを利用して、CSVファイルを読み込みNumPy配列に変換するサンプルプログラムと実行結果は、以下の通り。

import pandas as pd

# CSVファイル(user_data.csv)を読み込む
dataset = pd.read_csv('user_data.csv')

# 読み込んだデータをNumPy配列に変換し出力
dataset_ndarray = dataset.values
print(dataset_ndarray)
CSVファイルの読み込みとデータ抽出

LabelEncoderを利用した変換

PandasのLabelEncoderクラスを利用すると、カテゴリデータを、(同一カテゴリで同じ)数値に変換することができる。そのサンプルプログラムと実行結果は、以下の通り。

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# CSVファイル(user_data.csv)を読み込む
dataset = pd.read_csv('user_data.csv')

# 読み込んだデータをNumPy配列に変換
dataset_ndarray = dataset.values

# LabelEncoderを利用して、性別を数値型に変換
le = LabelEncoder()
encoded_data = le.fit_transform(dataset_ndarray[:, 2])
print("*** 変換前の性別 ***")
print(dataset_ndarray[:, 2])
print("*** 変換後の性別 ***")
print(encoded_data)
print()

# 性別を数値型に変換した後の結果を設定
dataset_ndarray[:, 2] = encoded_data
print("*** 読み込んだデータ(性別変換後) ***")
print(dataset_ndarray)
LabelEncoderを利用した変換



ColumnTransformerとOneHotEncoderを利用した変換

PandasのColumnTransformerクラスとOneHotEncoderをクラス利用すると、別行に、カテゴリデータを数値に変換することができる。そのサンプルプログラムと実行結果は、以下の通り。

import pandas as pd
import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

# CSVファイル(user_data.csv)を読み込む
dataset = pd.read_csv('user_data.csv')

# 読み込んだデータをNumPy配列に変換
dataset_ndarray = dataset.values
print("*** 読み込んだデータ(変換前) ***")
print(dataset_ndarray)
print()

# LabelEncoderを利用して、職業/勤務先を別行に数値型に変換
# ColumnTransformerのtransformersの第三引数に、数値型に変換対象の列をインデックスで指定
# ColumnTransformerのremainder='passthrough'を指定することで、変換しないデータを残すようにする
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [4])]
                       , remainder='passthrough')
dataset_ndarray = ct.fit_transform(dataset_ndarray)
print("*** 読み込んだデータ(変換後) ***")
print("*** 1列目~4列目は、職業/勤務先を変換した値を示す ***")
print()
print("*** 1列目:職業/勤務先=フリーターの場合1,それ以外は0 ***")
print("*** 2列目:職業/勤務先=プログラマーの場合1,それ以外は0 ***")
print("*** 3列目:職業/勤務先=事務職の場合1,それ以外は0 ***")
print("*** 4列目:職業/勤務先=商社の場合1,それ以外は0 ***")
print()
print(dataset_ndarray)
ColumnTransformerとOneHotEncoderを利用した職業/勤務先の変換

要点まとめ

  • 機械学習でカテゴリデータ(例:性別)を利用できるようにするには、文字列(例:男、女)を数値(例:1、0)に変換する必要がある。
  • Pandasを利用すると、カテゴリデータの数値変換を簡単に行うことができる。