Pythonでデータ分析する次の一歩(データ分析支援ライブラリー、pandas編)

2017-09-04 (月) 18:34:12 (99d) | Topic path: Top / 機械学習 / Pythonでデータ分析する次の一歩(データ分析支援ライブラリー、pandas編)

目次

はじめに

pandasはデータ分析支援ライブラリーです。

Pythonでデータ分析をするときに、機械学習の部分はscikit-learnでやりますが、機械学習のための前処理をするときに、pandasを使うととても便利です。

参考書としては、次の本がオススメです。

ライブラリーの読み込み

pandasのライブラリー名は pandas です。 ここでは、以後、pd とします。

import pandas as pd

シリーズとデータフレーム

pandasの基本は、シリーズ (Series) とデータフレーム (DataFrame) と呼ばれるデータ構造です。

シリーズは、(一次元)配列にインデックスが付いたもので、pandas.Seriesクラスのオブジェクトとして表されます。

データフレームは、二次元配列の行と列にインデックスが付いたもので、pandas.DataFrameクラスのオブジェクトとして表されます。

データフレームの列をシリーズとして取り出すことができますので、シリーズも使わないことはありませんが、データ分析するためにはデータフレームを理解することが重要です。

CSVファイルからデータフレームを作る

データ分析をするときはデータをファイルから読み込むことになりますが、pandasには、read_csv関数というCSVファイルを読み込んでデータフレームを作ってくれる関数があります。

例えば、次のような data.csv という名前のCSVファイルを考えてみましょう。

,X1,X2,X3,Y
1,t,1.0,1.2,+
2,t,0.9,0.8,-
3,f,0.9,1.1,+
4,f,0.8,1.0,-

これを読み込んでデータフレームを作るには、次のようにread_csv関数を使います。

df = pd.read_csv('data.csv', index_col=0)

index_colオプションは、行(データ)のインデックスを表す列番号を指定します。

すると、見出し(インデックス)付きの表の形になります。

df
X1X2X3Y
1t1.01.2+
2t0.90.8-
3f0.91.1+
4f0.81.0-

変数の型を調べる

変数の型は、データフレーム・オブジェクトのdtypes属性に格納されています。

df.dtypes
X1    object
X2    float64
X3    float64
Y      object
dtype: object

変数の型を変換する

scikit-learnはnumpy.ndarrayでデータを扱いますが、numpy.ndarrayは配列なので、要素の型が全て同じでなければなりません。 これに対し、pandasでは、説明変数ごとに型推定を行い、それぞれの変数を適当な型で表現します。 特に、文字列を含む型はobject型になります。

scikit-learnを使うには、pandasにおいて説明変数を取り出す前に、astype関数を用いて、変数を同じ型にしておく必要があります。

カテゴリーを表す文字列をカテゴリー番号に変換する

カテゴリーを表す文字列が格納されている列の型をカテゴリー番号に変換するには、まず、astype関数に 'category' を指定して変数をカテゴリー型に変換し、そのcat属性のcodes属性を取得します。

df.X1.astype('category').cat.codes
1    0
2    0
3    1
4    1
dtype: int8

そこで、データフレームをコピーし、カテゴリーを表す変数を置き換えます。

df_cat = df
df_cat.X1 = df.X1.astype('category').cat.codes
df_cat.dtypes
X1    int8
X2    float64
X3    float64
Y        object
dtype: object

カテゴリーを表す文字列をダミー変数に変換する

カテゴリーを表す文字列が格納されている列の型をダミー変数に変換するには、pandas.get_dummies関数を使います。

df_dum = pd.get_dummies(df)
df_dum
X1_tX1_tX2X3Y
1101.01.2+
2100.90.8-
3010.91.1+
4010.81.0-

このように、カテゴリーごとにダミー変数が用意され、そのカテゴリーに属するときは値が 1、そうでないときは値が 0 になります。

データフレームから説明変数を取り出す

データフレームから説明変数を取り出すには、データフレームのdrop関数を使って目的変数を取り除きます。 説明変数はscikit-learnにnumpy.ndarrayで渡しますので、values属性に格納されている配列を取り出します。

X = df.drop('Y', axis=1).values

drop関数は、行と列、どちらを取り除くのにも使えるので、列を取り除く時にはaxisオプションを 1 に指定します。

データフレームから目的変数を取り出す

データフレームから目的変数を取り出すには、目的変数の列のインデックスを指定します。 目的変数もscikit-learnにnumpy.ndarrayで渡しますので、values属性に格納されている配列を取り出します。

y = df['Y'].values
トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS