Pythonを使用して欠損値を扱う

週一ブログ第6回目
担当は学部4年 渡邉がつとめます

まず、Pythonにはバージョン 2.x系 or 3.x系があります。
最新バージョンは3.x系ですが、2.xとの互換性があまりないため利用者が少ないです。私は使えるライブラリの多さの点から2.x系の2.7を利用します。

使用するモジュール 
欠損値を扱うために2つのモジュールNumPy(Numerical Python)とpandas(Python Data Analysis Library)を使用します。

NumPyはPythonで計算を行うための拡張モジュールで、多次元配列や行列を簡単に扱えて効率的な演算処理も行うことができます。
pandasはPythonでデータ分析をすばやく簡単に行う分析ツール。

NumPy(Numerical Python) http://www.numpy.org/
ダウンロードURL http://sourceforge.net/projects/numpy/files/NumPy/
インストーラ numpy-1.7.1-win32-superpack-python2.7.exe

pandas(Python Data Analysis Library) http://pandas.pydata.org/getpandas.html
ダウンロードURL http://pandas.pydata.org/getpandas.html
インストーラ pandas-0.11.0.win32-py2.7.exe

今回はこの2つのライブラリで欠損値を扱います。

欠損値の取り扱いとして、代表的な方法として欠損値の除外、穴埋めの2つの方法があります。

欠損値を除外する方法は
pandasのメソッドdropna を使用すると簡単に除外ができます。

プログラム
from pandas import Series
from numpy import nan as NA

data = Series([1, 2, NA, 7])
print data.dropna()

実行結果
0 1
1 2
3 7
dtype: float64

次に欠損値の穴埋めです。
欠損値の除外よりも穴埋めしたい場合もあると思います。

pandasのメソッドfillna を使用すると簡単に穴埋めができます。

プログラム
from pandas import Series
from numpy import nan as NA

data = Series([1, 2, NA, 7])

print data.fillna(0)

実行結果
0 1
1 2
2 0
3 7
dtype: float64

fillnaメソッドを工夫して平均値、中央地で穴埋めすることもできます。

例としてnumpyの平均値を求めるメソッドで穴埋めしてみます。
欠損値の中にdataの1,2,7の平均値で穴埋めします。

プログラム
from pandas import Series
from numpy import nan as NA

data = Series([1, 2, NA, 7])

print data.fillna(data.mean())

実行結果
0 1.000000
1 2.000000
2 3.333333
3 7.000000
dtype: float64

今回はPythonを使用した簡易的なデータ欠損値の扱いでしたが、今後は欠損値の除外、穴埋めの使い分けをどのように行うかなど、シナリオの設定が重要になってくるのでそこらへんを考えたいと思っています。

以上Pythonで行うデータ欠損値を触ってみました。

カテゴリー: 未分類