Skip to content

Instantly share code, notes, and snippets.

@gyassine
Last active November 9, 2022 05:21
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gyassine/b47b90e8de935cc06ef856401f7582b0 to your computer and use it in GitHub Desktop.
Save gyassine/b47b90e8de935cc06ef856401f7582b0 to your computer and use it in GitHub Desktop.
Graphs de différentes méthodes de pandas.DataFrame.interpolate
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import time
np.random.seed(6)
# kinds = ('linear', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic')
kinds = ('linear', 'index', 'pad', 'values', 'nearest', 'zero', 'slinear',
'quadratic', 'cubic', 'barycentric', 'krogh', 'akima',
'from_derivatives', 'pchip', 'spline', 'polynomial')
N = 10
x = np.linspace(0, 1, N)
y = np.random.randint(10, size=(N,))
new_x = np.linspace(0, 1, 28)
fig, axs = plt.subplots(nrows=len(kinds) // 2 + 1, ncols=2, sharex=True)
axs[0, 0].plot(x, y, 'bo-')
axs[0, 0].set_title('raw')
i = 1
for ((_, _), ax), kind in zip(np.ndenumerate(axs[1:, :]), kinds):
start_time = time.time()
df1 = pd.DataFrame({'x': x, 'y': y})
df1 = df1.set_index('x')
df2 = pd.DataFrame({'x': new_x})
df2 = df2.set_index('x')
df = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
if kind == 'spline' or kind == 'polynomial':
df = df.interpolate(method=kind, order=2)
else:
df = df.interpolate(method=kind)
ax.plot(df, 'ro-')
ax.plot(x, y, 'bo')
end_time = (time.time() - start_time)
title = f'Method : {kind} - Ran in {end_time:.5f} sec'
ax.set_title(title)
plt.show()

pandas.DataFrame.interpolate

made-with-python made-with-python

Graphs de différentes méthodes de pandas.DataFrame.interpolate

Prerequisites ⁉️

You need :

  • Python 3.7 (Anaconda)

Getting Started

Read and Run 😎

Description :

Il existe dans pandas plusieurs méthodes pour interpoler les points manquants dans une série de données. Ces méthodes sont expliqués sur :

Le script suivant permet d'afficher des graphs montrant les différences d'interpolations. Pour informations :

  • La méthode "nearest" est celle qui a été utilisé dans excel (je pense). Elle consiste à renvoyer la valeur de y correspondant au x le plus proche.
  • Les méthodes "zero", "slinear", "quadratic", "cubic" sont tous des "splines" avec une interpolation d'ordre respectivement 0,1,2 et 3.
  • La méthode "barycentric" correspond à une fonction polynôme passant par un ensemble de points
  • "krogh" utilise dérivées successives du polynôme précédent
  • "pchip" veut dire "piecewise cubic hermite interpolating polynomial"
  • "Akima" utilise des sous-splines

Script

See interpolate_method.py

Graphs

See interpolate_method.png

Author 💻

Acknowledgments 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment