Python データ間を線形補完する「scipy.interpolate 」

 本記事では、下図のように、青点の間を一次式で補完して赤点を作成する関数を作成する雛形コードを載せました。

上記データは、下図の横軸にA列、縦軸にD列をとったものです。

■本プログラム

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import pandas as pd
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 16 # グラフの基本フォントサイズの設定

df = pd.read_csv('data.csv')
df


# In[2]:


x_name = 'A'
y_name = 'D'

# x, yデータを抽出
x = df[x_name]
y = df[y_name]

# データ区間を抽出
x_min = x.min()
x_max = x.max()

# 各データ間を線形補完した関数を作成する
myfunc = sp.interpolate.interp1d(x, y)

# xデータを作成
x_new = np.linspace(x_min, x_max, len(x)*2)
print(x_new)
print(myfunc(x_new))

# グラフを作成
plt.scatter(x, y, c = 'b', label = 'original')
plt.scatter(x_new, myfunc(x_new), facecolor = 'None', edgecolors = 'r', label = 'new')
plt.xlabel(x_name)
plt.ylabel(y_name)
plt.legend(bbox_to_anchor = (1, 1))
plt.grid()
plt.show()


# In[3]:


# 関数に値を代入して、yを取得する
y = myfunc(7.5).tolist()
print(type(y), y)

2次の場合は下記リンク先を参照下さい。

hk29.hatenablog.jp

以上

<広告>