PythonのPandasで欠損値を線形補間、多項式補間などで補完する方法

スポンサーリンク

補間は、Pythonの技法で、2つの既知のデータ点の間で未知のデータ点を推定することができます

一般的には、既知の値を用いて表やデータセットの欠損値を埋めるために使用されます。

補間は、画像処理でも使われる技術です。

画像を拡大する際に、隣接するピクセルを使用して新しいピクセルのピクセル値を推定することができます

金融アナリストも、過去の既知のデータポイントを使用して金融の将来を予測するために補間を使用します。

この記事では、データセットの欠損値を埋めるための補間について見ていきます。

PandasのDataframeは.interpolate()メソッドを提供し、データの欠損を埋めるために使用することができます

いくつかのダミーデータを作成し、補間がどのように機能するかを見てみましょう。

スポンサーリンク

補間を使って系列データの欠損値を補正する

欠損値を持つPandasの系列を作成してみましょう。

import pandas as pd
import numpy as np
a=pd.Series([0, 1, np.nan, 3,4,5,7])

1. 線形補間

見ての通り、2番目のインデックスの値はnanです。

このデータを次のコードで補間してください。

a.interpolate()

出力は次のようになる。

0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
5    5.0
6    7.0

Pandasは補間の方法を複数用意しています。

何も指定しない場合、線形補間がデフォルトの方法です。

同じデータで別の種類の補間を試してみましょう。

2. 多項式補間

多項式補間は次数を指定する必要がある。

ここでは、次数2で補間してみましょう。

a.interpolate(method='polynomial', order=2)

出力は次のようになる。

0    0.00000
1    1.00000
2    1.99537
3    3.00000
4    4.00000
5    5.00000
6    7.00000

多項式補間で次数を1にすると、線形補間と同じ出力になります。

これは次数1の多項式が線形であるためです。

a.interpolate(method='polynomial', order=1)

結果は以下の通りです。

出力:

0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
5    5.0
6    7.0

2. パディングによる補間

パディングによる補間とは、欠落したエントリーの直前の値をコピーすることです。

パディング補間を行う場合、制限値を指定する必要がある。

この制限は、このメソッドが連続して埋めることができる最大のナンの数です。

pythonでどのように動作するか見てみましょう。

a.interpolate(method='pad', limit=2)

次のような出力が得られます。

0    0.0
1    1.0
2    1.0
3    3.0
4    4.0
5    5.0
6    7.0

欠落しているエントリは、その前のエントリと同じ値で置き換えられます。

制限値を2としましたが、3つ連続したナンの場合にどうなるかを見てみましょう。

a=pd.Series([0, 1, np.nan, np.nan, np.nan, 3,4,5,7])
a.interpolate(method='pad', limit=2)

出力は次のようになります。

0    0.0
1    1.0
2    1.0
3    1.0
4    NaN
5    3.0
6    4.0
7    5.0
8    7.0

3つ目のナンはそのままです。

Pandas DataFrames における補間処理

pandas Dataframeの欠損値を埋めるために補間を使用することもできます。

ダミーのDataFrameを作成し、補間を適用してみましょう。

s = pd.DataFrame([(0.0, np.nan, -2.0, 2.0), (np.nan, 2.0, np.nan, 1), (2.0, 5.0, np.nan, 9.0), (np.nan, 4.0, -3.0, 16.0)], columns=list('abcd'))
s.interpolate()

1. Pandasのデータフレームを使った線形補間

データフレームに線形補間を適用するには、次のコード行を使用します。

s['c'].interpolate()

結果は以下の通りです。

0   -2.000000
1   -2.333333
2   -2.666667
3   -3.000000

ここで、b列の下の最初の値は、その前に補間のための既知のデータポイントがないため、まだnanです。

また、データフレームの個々の列を補間することもできます。

s.interpolate(method='pad', limit=2)

結果は以下の通りです。

出力:

Dataframe
Dataframe

2. パディングによる補間

パディング法を適用するには、次のコードを使用します。

Linear interpolation
Linear interpolation

次のような出力が得られる。

Padding
Padding

まとめ

このチュートリアルは、Pythonでの補間についてでした。

主に Pandas を使って欠損データを補うために補間を使うことに焦点を当てました。

私たちと一緒に補間を楽しんでいただければ幸いです。

タイトルとURLをコピーしました